if empty(glob('~/.config/nvim/autoload/plug.vim'))
  silent !curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs
    \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif

set number
set relativenumber
set tabstop=4
set shiftwidth=4
set smarttab
set expandtab
set hidden
set showtabline=1
set termguicolors
set ttyfast
set wildmenu
set title
set list
set listchars=tab:→\ ,eol:¬,trail:⋅,extends:❯,precedes:❮,space:␣
set showbreak=↪
set timeoutlen=500

let g:mapleader="\<SPACE>"
let g:maplocallead=','

if has('nvim')
	set inccommand=split
endif

if has("persistent_undo")
    set undodir=$HOME/.undodir
    set undofile
endif

let g:ale_set_baloons = 1
let g:ale_completion_enabled = 1

call plug#begin('~/.config/nvim/plugged')

"LSP Stuff
Plug 'w0rp/ale'
Plug 'ryanolsonx/vim-lsp-python'
Plug 'ryanolsonx/vim-lsp-typescript'
Plug 'prabirshrestha/asyncomplete.vim'
Plug 'prabirshrestha/asyncomplete-lsp.vim'

Plug 'junegunn/rainbow_parentheses.vim'

Plug 'machakann/vim-highlightedyank'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'morhetz/gruvbox'
Plug 'tpope/vim-fugitive'
Plug 'mhinz/vim-signify'
Plug 'tpope/vim-commentary'
Plug 'mbbill/undotree'
Plug 'elmcast/elm-vim'
Plug 'liuchengxu/vim-which-key'

"https://github.com/baverman/vial-http/blob/master/doc/tutorial.rst
"Plug 'baverman/vial'
"Plug 'baverman/vial-http'

call plug#end()

"Gruvbox config
colorscheme gruvbox
set background=dark
let g:gruvbox_contrast_dark = 'soft'

"Airline settings
let g:airline#extensions#tabline#enabled = 1
let g:airline_powerline_fonts = 1
let g:airline#extensions#tabline#formatter = 'unique_tail_improved'

nnoremap <leader>u :UndotreeToggle<cr>
nnoremap <leader>h <C-W><C-H> 
nnoremap <leader>j <C-W><C-J>
nnoremap <leader>k <C-W><C-K>
nnoremap <leader>l <C-W><C-L>

"ALE Keymaps and options
nnoremap <silent> <leader><Space>a a<C-X><C-O>
nnoremap <silent> <leader><Space>g :ALEGoToDefinition<CR>
nnoremap <silent> <leader><Space>f :ALEFix<CR>

let g:ale_fixers = {
            \ 'python': ['add_blank_lines_for_python_control_statements', 'yapf']
            \ }

"which-key
let g:which_key_map = {}
autocmd! User vim-which-key call which_key#register('<Space>', 'g:which_key_map')
let g:which_key_map[' '] =  {
  \ 'name' : '+ale'                ,
  \ 'a'    : 'completions'         , 
  \ 'g'    : 'go-to-definition'    ,
  \ 'f'    : 'fix'                 ,
  \ }
call which_key#register('<Space>', "g:which_key_map")
nnoremap <silent> <leader>      :<c-u>WhichKey '<Space>'<CR>
nnoremap <silent> <localleader> :<c-u>WhichKey  ','<CR>

"rainbow-parens
autocmd VimEnter * RainbowParentheses
let g:rainbow#blacklist = [248]
let g:rainbow#pairs = [['(', ')'], ['[', ']'], ['{', '}']]