" Set up plug-vim
"let data_dir = has('nvim') ? stdpath('data') . '/site' : '~/.vim'
"if empty(glob(data_dir . '/autoload/plug.vim'))
"    silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs  https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
"    autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
"endif
set nocompatible  " be iMproved, required
 
"set rtp+=~/.vim/bundle/Vundle.vim
"call vundle#begin()
call plug#begin(has('nvim') ? stdpath('data') . '/plugged' : '~/.vim/plugged')

" ==== plugin manager
"Plugin 'VundleVim/Vundle.vim'

" ==== helpers
"Plug 'vim-scripts/L9'

" ==== File tree
"Plug 'scrooloose/nerdtree'

" ==== Completion
"Plug 'Valloric/YouCompleteMe'
Plug 'prabirshrestha/vim-lsp'
Plug 'mattn/vim-lsp-settings'
Plug 'prabirshrestha/asyncomplete.vim'
Plug 'prabirshrestha/asyncomplete-lsp.vim'
"Plug '~/src/vim/asyncomplete-muttgoobook.vim'

" ==== muttgoobook
Plug 'https://git.eldon.me/trey/asyncomplete-muttgoobook.vim'

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

" ==== syntax helpers
"Plug 'scrooloose/syntastic'
"Plug 'tpope/vim-surround'
"Plug 'cakebaker/scss-syntax.vim'
"Plug 'othree/yajs.vim'
"Plug 'mitsuhiko/vim-jinja'
"Plug 'octol/vim-cpp-enhanced-highlight'
"Plug 'ap/vim-css-color'
"Plug 'Vimjas/vim-python-pep8-indent'
"Plug 'python-rope/rope'
"Plug 'python-rope/ropemode'
"Plug 'python-rope/ropevim'
"Plug 'klen/pylama'

" ==== moving / searching
"Plug 'easymotion/vim-easymotion'
"Plug 'kien/ctrlp.vim'
"Plug 'ervandew/supertab'
"Plug 'terryma/vim-multiple-cursors'
"
" ==== snippets
"Plug 'SirVer/ultisnips'
"Plug 'thomasfaingnaert/vim-lsp-ultisnips'

" Status bar on bottom
Plug 'vim-airline/vim-airline'

" ==== PLUGIN THEMES
Plug 'morhetz/gruvbox'

"call vundle#end()
call plug#end()
"filetype plugin indent on

" ==== Colors and other basic settings
"filetype off  " required
set exrc
"
" goobook stuff
"source ~/src/vim/asyncomplete-muttgoobook.vim/autoload/asyncomplete/sources/muttgoobook.vim
let g:asyncomplete_log_file = expand('~/bugs/asyncomplete.log')
let g:goobookrc='~/.goobookrc'
autocmd User asyncomplete_setup call asyncomplete#register_source({
     \ 'name':          'muttgoobook',
     \ 'allowlist':     ['mail'],
     \ 'completor':     function('asyncomplete#sources#muttgoobook#completor'),
     \ }) 

set encoding=UTF-8

" lsp asyncomplete
inoremap <expr> <Tab>   pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
inoremap <expr> <cr>    pumvisible() ? asyncomplete#close_popup() : "\<cr>"

colorscheme gruvbox
set guifont=Monospace\ 10
set fillchars+=vert:\$
"syntax enable
set background=dark
set ruler
set hidden
set number
set laststatus=1
set smartindent
"hset st=4 sw=4 et
set expandtab
set tabstop=4
set softtabstop=4
set shiftwidth=4
let &colorcolumn="80"

" ==== NERDTREE
"let NERDTreeIgnore = ['__pycache__', '\.pyc$', '\.o$', '\.so$', '\.a$', '\.swp', '*\.swp', '\.swo', '\.swn', '\.swh', '\.swm', '\.swl', '\.swk', '\.sw*$', '[a-zA-Z]*egg[a-zA-Z]*', '.DS_Store']

"let NERDTreeShowHidden=1
"let g:NERDTreeWinPos="left"
"let g:NERDTreeDirArrows=0
"map <C-t> :NERDTreeToggle<CR>

" ==== Syntastic
"let g:syntastic_always_populate_loc_list = 1
"let g:syntastic_auto_loc_list = 1
"let g:syntastic_check_on_open = 1
"let g:syntastic_check_on_wq = 0
"set statusline+=%#warningmsg#
"set statusline+=%{SyntasticStatuslineFlag()}
"set statusline+=%*
"let g:syntastic_javascript_checkers = ['eslint']
"let g:syntastic_javascript_mri_args = "--config=$HOME/.jshintrc"
"let g:syntastic_python_checkers = [ 'pylint', 'flake8', 'pep8', 'python']
"let g:syntastic_yaml_checkers = ['jsyaml']
"let g:syntastic_html_tidy_exec = 'tidy5'
"
" === flake8
"let g:flake8_show_in_file=1

" ==== snippets
" If you want :UltiSnipsEdit to split your window.
"let g:UltiSnipsEditSplit="vertical"

" make YCM compatible with UltiSnips (using supertab)
"let g:ycm_key_list_select_completion = ['<C-n>', '<Down>']
"let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>']
"let g:SuperTabDefaultCompletionType = '<C-n>'

" better key bindings for UltiSnipsExpandTrigger
"let g:UltiSnipsExpandTrigger = "<tab>"
"let g:UltiSnipsJumpForwardTrigger = "<tab>"
"let g:UltiSnipsJumpBackwardTrigger = "<s-tab>"

" ==== Easymotion
"let g:EasyMotion_do_mapping = 0
"let g:EasyMotion_smartcase = 1
"nmap f <Plug>(easymotion-s)

" ==== moving around
"nmap <silent> <A-Up> :wincmd k<CR>
"nmap <silent> <A-Down> :wincmd j<CR>
"nmap <silent> <A-Left> :wincmd h<CR>
"nmap <silent> <A-Right> :wincmd l<CR>

" ==== disable mouse
set mouse=c

" ==== disable swap file warning
"set shortmess+=A

" ==== custom commands
command JsonPretty execute ":%!jq ."
set secure
set hlsearch
imap   <End>
imap   <Home>
nmap Y y$
nmap C c$

inoremap jj <Esc>
inoremap kk <Esc>
inoremap hh <Esc>
inoremap lll <Esc>
inoremap :wq <Esc>:wq
inoremap :w <Esc>:w
inoremap :q! <Esc>:q!
inoremap :q <Esc>:q
inoremap yy <Esc>yy
inoremap ddd <Esc>dd

" Force me to stop using arrow keys
noremap <Left> <Nop>
noremap <Right> <Nop>
noremap <Up> <Nop>
noremap <Down> <Nop>

" clear search
nmap <silent> <C-l> :noh<CR>

" Fix Home/End/Delete
set backspace=indent,eol,start
 
set clipboard=unnamedplus

" Change cursor from block to vertical pipe when in insert mode

if &term =~ "tmux-256color"
    let &t_SI = "\<Esc>[6 q"
    let &t_SR = "\<Esc>[4 q"
    let &t_EI = "\<Esc>[0 q"
endif

" search history stuff
autocmd BufReadPost * silent! normal! g`"zv
"autocmd BufRead,BufNewFile ~/Private/academic/certs/lf/LFS211/2017-12-16_study_materials/*.txt source ~/.muttvimrc