call plug#begin('~/local/share/nvim/plugged')

" Lightline
Plug 'itchyny/lightline.vim'
let g:lightline ={
    \ 'colorscheme' : 'dracula',
    \ 'component_function': {
     \   'filetype': 'MyFiletype',
     \   'fileformat': 'MyFileformat',
     \ }
    \}
function! MyFiletype()
  return winwidth(0) > 70 ? (strlen(&filetype) ? &filetype . ' ' . WebDevIconsGetFileTypeSymbol() : 'no ft') : ''
endfunction

function! MyFileformat()
  return winwidth(0) > 70 ? (&fileformat . ' ' . WebDevIconsGetFileFormatSymbol()) : ''
endfunction

Plug 'editorconfig/editorconfig-vim'

" Fzf
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'

" LimeLight
Plug 'junegunn/limelight.vim'

" NERDTree
Plug 'scrooloose/nerdtree'

" Improvements Plug 'terryma/vim-multiple-cursors'
Plug 'tpope/vim-eunuch'
Plug 'tpope/vim-surround'
Plug 'scrooloose/syntastic'
Plug 'jiangmiao/auto-pairs'

"Airline
"Plug 'vim-airline/vim-airline'
"Plug 'vim-airline/vim-airline-themes'
Plug 'prabirshrestha/vim-lsp'

" Themes
Plug 'tomasr/molokai'
Plug 'gko/vim-coloresque'
Plug 'dracula/vim', { 'as': 'dracula' }
Plug 'joshdick/onedark.vim'
Plug 'Mofiqul/dracula.nvim'

" Lang. Support
Plug 'fatih/vim-go'

Plug 'artur-shaik/vim-javacomplete2'
autocmd FileType java setlocal omnifunc=javacomplete#Complete

"Plug 'Valloric/YouCompleteMe', { 'do': './install.py' }
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
Plug 'zchee/deoplete-jedi'
Plug 'deoplete-plugins/deoplete-clang'
Plug 'davidhalter/jedi-vim'

Plug 'rust-lang/rust.vim'
Plug 'simrat39/rust-tools.nvim'
Plug 'neovim/nvim-lspconfig'

Plug 'preservim/nerdcommenter'
Plug 'mattn/emmet-vim'

" Code Folding
Plug 'tmhedberg/SimpylFold'

" Code Formatting
Plug 'Chiel92/vim-autoformat'
noremap <F3> :Autoformat<CR>

" Indent Blanklines
Plug 'lukas-reineke/indent-blankline.nvim'

" Writing
Plug 'junegunn/goyo.vim'
Plug 'lervag/vimtex'
Plug 'xuhdev/vim-latex-live-preview', { 'for': 'tex' }
" Plug 'conornewton/vim-latex-preview'
let g:tex_flavor='latex'
let g:vimtex_view_method='zathura'
let g:vimtex_quickfix_mode=0
let g:livepreview_previewer = 'zathura'
let g:livepreview_engine = 'xelatex'

set conceallevel=1
let g:tex_conceal='abdmg'

"Ultisnips
Plug 'sirver/ultisnips'
Plug 'honza/vim-snippets'
let g:UltiSnipsExpandTrigger = '<tab>'
let g:UltiSnipsJumpForwardTrigger="<c-b>"
let g:UltiSnipsJumpBackwardTrigger="<c-z>"
let g:UltiSnipsListSnippets="<c-;>"
"Zoxide
Plug 'nanotee/zoxide.vim'

" Vim Wiki
Plug 'vimwiki/vimwiki'
Plug 'mattn/calendar-vim'

" Animate
" Plug 'camspiers/animate.vim'
Plug 'camspiers/lens.vim'

" Better Syntax Support
Plug 'sheerun/vim-polyglot'

" Git
Plug 'airblade/vim-gitgutter'
Plug 'tpope/vim-fugitive'

" Icons
Plug 'ryanoasis/vim-devicons'

" Lightspeed
Plug 'ggandor/lightspeed.nvim'

call plug#end()

"let g:molokai_original = 1
"let g:airline_theme='onedark'
"let g:airline_theme='dracula'
let g:ale_enable=1
let g:ale_linters = {
    \ 'python': ['pylint'],
    \ 'vim': ['vint'],
    \ 'cpp': ['clang'],
    \ 'c': ['clang']
\}
syntax on
filetype plugin indent on
set shiftwidth=4
set softtabstop=4
set tabstop=4
set expandtab
set number relativenumber
colorscheme dracula
set nocompatible
set encoding=UTF-8
set clipboard+=unnamedplus
set mouse=a
set laststatus=3
set termguicolors 

" Map Leader
let mapleader = ","

" Note taking (Mardown, Spelling)
let g:vimwiki_list = [{'path': '~/vimwiki/',
                      \ 'syntax': 'markdown', 'ext': '.md'}]

:map <F11> :setlocal spell! spelllang=en_gb<CR>

"Quick spellcheck
inoremap <F10> <c-g>u<Esc>[s1z=`]a<c-g>u

au BufNewFile ~/vimwiki/diary/*.md :silent 0r !~/.config/nvim/generate-vimwiki-diary-template '%'

let NERDTreeMapOpenInTab='<ENTER>'

" Insert Date
nnoremap <silent><leader>d :put=system('date +%d/%b/%Y')<CR>

" Tex
let g:vimtex_complete_enabled = 1
let g:livepreview_previewer = 'zathura'
autocmd Filetype tex setl updatetime=1

" Fzf
let g:fzf_nvim_statusline = 0 " disable statusline overwriting

"remaps for fzf
nnoremap <silent> <leader><space> :Files<CR>
nnoremap <silent> <leader>w :Windows<CR>
nnoremap <silent> <leader>h :History<CR>
nnoremap <silent> <leader>G :GFiles<CR>
" nnoremap <silent> <leader>GS :GFiles?<CR>

" Easy update and reload nvim init file
nnoremap <Leader>e :e $MYVIMRC<CR>
nnoremap <Leader>S :source $MYVIMRC<CR>

" Deoplete
let g:deoplete#enable_at_startup = 1
autocmd InsertLeave,CompleteDone * if pumvisible() == 0 | pclose | endif
let g:jedi#completions_enabled = 0
let g:jedi#use_splits_not_buffers = "right"
" g:deoplete#sources#jedi#python_path = 'python3'
let g:python3_host_prog = '/usr/bin/python3'

" Limeligt + Goyo Binds
nnoremap <Leader>l :Limelight!!<CR>
nnoremap <Leader>g :Goyo<CR>
let g:limelight_conceal_guifg = 'DarkGray'
let g:limelight_conceal_guifg = '#777777'
let g:limelight_conceal_ctermfg = 'gray'
let g:limelight_conceal_ctermfg = 240
autocmd! User GoyoEnter Limelight
autocmd! User GoyoLeave Limelight!

" <TAB>: completion.
inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"

" Switching windows
nnoremap <A-h> <C-w>h
nnoremap <A-j> <C-w>j
nnoremap <A-k> <C-w>k
nnoremap <A-l> <C-w>l

" Move tabs
nnoremap <A-Down> :tabp<CR>
nnoremap <A-Up> :tabn<CR>

" Basic cmd commands
nnoremap <A-n> :!touch<Space>
nnoremap <A-o> :e<Space>
nnoremap <A-O> :tabe<Space>
nnoremap <A-v> :vsplit<Space>

" Screenshot command
nnoremap <silent> <leader>s :!bash /home/simon/.scripts/vscrnpaste<CR><CR>

" Terminal Maps
tnoremap <Esc> <C-\><C-n>
nnoremap <leader>t :tabedit term://bash<CR> 
autocmd BufEnter * silent! lcd %:p:h

" Indents
vmap < <gv
vmap > >gv

" Open NERDTree
nnoremap <leader><enter> :NERDTreeToggle<CR>

" Vimwiki md2html
let g:vimwiki_list = [{
	\ 'path': '~/vimwiki',
	\ 'template_path': '~/vimwiki/templates/',
	\ 'template_default': 'default',
	\ 'syntax': 'markdown',
	\ 'ext': '.md',
	\ 'path_html': '~/vimwiki/site_html/',
	\ 'custom_wiki2html': 'vimwiki_markdown',
	\ 'template_ext': '.tpl'}]

" Vimwiki 
nnoremap <leader>T :VimwikiTable<CR>

" Rust
let g:rustfmt_autosave = 1

" Fullscreen on nvim in kitty term
autocmd VimLeave * :silent !kitty @ set-spacing padding=20 margin=20
autocmd VimEnter * :silent !kitty @ set-spacing padding=0 margin=0
