"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"                                                                             "
"   Maintainer:   Patrick Auernig <patrick DOT auernig AT gmail DOT com>      "
"   VIM Version:  NVIM 0.1.3                                                  "
"                                                                             "
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""


"""""""""""""""""""
" XDG Directories "
"""""""""""""""""""
let g:vim_config_home = split(&rtp, ',', 0)[0]

if exists('$XDG_CACHE_HOME')
    let g:vim_cache_home = expand('$XDG_CACHE_HOME/') . v:progname
else
    let g:vim_cache_home = expand('$HOME/.local/cache/') . v:progname
endif

if exists('$XDG_DATA_HOME')
    let g:vim_data_home = expand('$XDG_DATA_HOME/') . v:progname
else
    let g:vim_data_home = expand('$HOME/.local/share/') . v:progname
endif


""""""""""""
" Settings "
""""""""""""
set confirm
set ttimeout
set timeoutlen=500
set autochdir
set autowrite
set scrolloff=1
set sidescrolloff=5
set number
set ignorecase
set smartcase
set listchars=tab:»\ ,trail:◆,extends:▹,precedes:◃,eol:↲,nbsp:·
set showmatch
set shortmess=aoOtTI
set clipboard+=unnamed
set smartindent
set undofile
set splitbelow
set splitright
set breakindent
set breakindentopt=sbr
let &showbreak = '↳ '
set ruler
set showcmd
set wildmode=list:longest,full
set wildignore=.bak,.old,.swp,~
set virtualedit=block
set foldcolumn=1
set foldlevel=99
set foldmethod=syntax
set foldtext=myfold#text()
set visualbell
set t_vb=

filetype indent on
filetype plugin on
syntax enable


"""""""""""""""""""""
" Keyboard mappings "
"""""""""""""""""""""
let g:mapleader = ","

command! Wq wq
command! WQ wq
command! Q q
command! W w

noremap <silent> <Leader><CR> :noh<CR>

nnoremap <F1> <NOP>
nnoremap U :redo<CR>
nnoremap <C-R> <NOP>
nnoremap <Leader>vl :setlocal cursorline!<CR>
nnoremap <Leader>vc :setlocal cursorcolumn!<CR>
nnoremap <Leader>ve :setlocal colorcolumn=80<CR>
nnoremap <Leader>vn :setlocal colorcolumn=0<CR>
nnoremap <Leader>tcs :call ToggleColorscheme()<CR>
nnoremap Y y$
nnoremap j gj
nnoremap k gk
nnoremap <leader>fmt gg=G<CR>``
nnoremap gr gd[{V%::s/<C-R>///g<left><left>
nnoremap gR gD:%s/<C-R>///g<left><left>
nnoremap th :tabfirst<CR>
nnoremap tj :tabnext<CR>
nnoremap tk :tabprev<CR>
nnoremap tl :tablast<CR>
nnoremap tn :tabnew<CR>
nnoremap tq :tabclose<CR>
nnoremap <silent> <leader>il :set invlist<CR>

inoremap <F1> <NOP>
inoremap jk <ESC>
inoremap JK <ESC>
inoremap Jk <ESC>

vnoremap < <gv
vnoremap > >gv
vnoremap <silent> <leader>il :<C-W>set invlist<CR>

cnoremap sudow w !sudo tee % >/dev/null

tnoremap <ESC> <C-\><C-n>


""""""""""""""""
" Autocommands "
""""""""""""""""
aug ToggleLineNumbers
    au!
    au VimEnter,WinEnter,InsertLeave * setlocal relativenumber
    au WinLeave,InsertEnter * setlocal norelativenumber
aug END

aug CursorLineColumn
    au!
    au VimEnter,WinEnter,BufWinEnter * setlocal cursorline cursorcolumn
    au WinLeave * setlocal nocursorline nocursorcolumn
aug END

augroup AutoReload
    au!
    au BufWritePost $MYVIMRC source $MYVIMRC
augroup END


"""""""""""
" Plugins "
"""""""""""
call plug#begin(g:vim_data_home . '/plugins')
runtime! plugins/**/*.vim
call plug#end()


"""""""""""""""
" Colorscheme "
"""""""""""""""
function! ToggleColorscheme()
    if g:colors_name == 'PaperColor'
        call ToggleBackground()
    elseif g:colors_name =~ 'seoul256'
        call ToggleSeoul256()
    elseif g:colors_name =~ 'Tomorrow'
        call ToggleTomorrow()
    endif

    AirlineRefresh
endfunction

function! ToggleBackground()
        if &background == 'dark'
            set background=light
        else
            set background=dark
        endif
endfunction

"colorscheme molokai
"colorscheme seoul256
"colorscheme PaperColor
colorscheme Tomorrow-Night