set encoding=utf-8				" Use UTF-8
set showmatch					" Show matching brackets
set ignorecase					" Do case insensitive matching
set incsearch					" Show partial matches for a search phrase
set number						" Show numbers
set relativenumber				" Show relative numbersi
set undolevels=999				" Lots of these
set history=1000				" More history
set hlsearch					" Highlight Search
set expandtab					" Expand tabs to spaces (inverse: noexpandtab)
set tabstop=4					" Tab size
set shiftwidth=4				" Indentation size
set softtabstop=4				" Tabs/Spaces interrop
set tabpagemax=50				" More tabs
set autoindent					" Enable autoindent
set ruler						" Show cursor position
set cursorline					" Highlight cursor line
set backspace=indent,eol,start	" Delete everything
set laststatus=2				" Always show status line
set wildmode=longest,list,full	" Enable autocompletion
set splitbelow splitright		" Split in more natural way
set formatoptions+=j			" Delete comment character when joining commented lines
set autoread					" Reload files on change
set mouse=a						" Enable mouse mode
set encoding=utf-8				" Use UTF-8, not ASCII (May cause issues on TTY)
"set termguicolors				" Use true colors (256) (May cause issues on TTY)
syntax enable					" Turn on syntax highlighting

" XDG Support
" Avoid using this with root, sudo causes issues with this
if empty($MYVIMRC) | let $MYVIMRC = expand('<sfile>:p') | endif

if empty($XDG_CACHE_HOME)  | let $XDG_CACHE_HOME  = $HOME."/.cache"       | endif
if empty($XDG_CONFIG_HOME) | let $XDG_CONFIG_HOME = $HOME."/.config"      | endif
if empty($XDG_DATA_HOME)   | let $XDG_CONFIG_HOME = $HOME."/.local/share" | endif

set runtimepath^=$XDG_CONFIG_HOME/vim
set runtimepath+=$XDG_DATA_HOME/vim
set runtimepath+=$XDG_CONFIG_HOME/vim/after

set packpath^=$XDG_DATA_HOME/vim,$XDG_CONFIG_HOME/vim
set packpath+=$XDG_CONFIG_HOME/vim/after,$XDG_DATA_HOME/vim/after

let g:netrw_home = $XDG_DATA_HOME."/vim"
call mkdir($XDG_DATA_HOME."/vim/spell", 'p')
set viewdir=$XDG_DATA_HOME/vim/view | call mkdir(&viewdir, 'p')

set backupdir=$XDG_CACHE_HOME/vim/backup | call mkdir(&backupdir, 'p')
set directory=$XDG_CACHE_HOME/vim/swap   | call mkdir(&directory, 'p')
set undodir=$XDG_CACHE_HOME/vim/undo     | call mkdir(&undodir,   'p')

" Have Vim jump to the last position when reopening a file
if has("autocmd")
    au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\""
endif

" Automatically deletes all trailing whitespace on save
autocmd BufWritePre * %s/\s\+$//e

" Remap splits navigation to just CTRL + hjkl
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l

" Make adjusing split sizes a bit more friendly
noremap <silent> <C-Left> :vertical resize +3<CR>
noremap <silent> <C-Right> :vertical resize -3<CR>
noremap <silent> <C-Up> :resize +3<CR>
noremap <silent> <C-Down> :resize -3<CR>

" System clipboard interractions
map <C-c> "+y
vnoremap <C-v> "+p

" Vim-Plug (Plugins)
call plug#begin('~/.local/share/vim/plugged')

Plug 'airblade/vim-gitgutter'                                   " Shows Git diff
Plug 'jiangmiao/auto-pairs'				                        " Quote and bracket completion
Plug 'neomake/neomake'					                        " Syntax checking
Plug 'zchee/deoplete-jedi'                                      " Pyhon jedi autocompletion
Plug 'davidhalter/jedi-vim'                                     " Python implementation check
Plug 'preservim/nerdcommenter'                                  " Comment plugin
Plug 'preservim/nerdtree'                                       " File manager
Plug 'joshdick/onedark.vim'				                        " OneDark theme
Plug 'vim-airline/vim-airline'			                        " AirLine statusline
Plug 'vim-airline/vim-airline-themes'	                        " AirLine statusline themes
if has('nvim')
    Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }   " Auto-completion
else
    Plug 'Shougo/deoplete.nvim'
    Plug 'roxma/nvim-yarp'
    Plug 'roxma/vim-hug-neovim-rpc'
endif

call plug#end()

" User interface / Theme
colorscheme onedark
set guioptions-=m	" remove menubar
set guioptions-=T	" remove toolbar
set guioptions-=r	" remove right-hand scrollbar
set guioptions-=L	" remove left-hand scrollbar

" Airline
let g:airline_theme='onedark'
let g:airline#extensions#tabline#enabled = 1
let g:airline#tabline#formatter = 'unique_tail'
let g:airline_symbols_ascii = 1 " Enable ASCII only for TTY
let g:airline_left_sep = "\uE0B0" " Change to ASCII symbol on TTY (>)
let g:airline_right_sep = "\uE0B2" " Change to ASCII symbol on TTY (<)

" Neomake
let g:neomake_python_enabled_makers = ['flake8']
let g:neomake_python_flake8_maker = {'args': ['--ignore=E501', '--format=default']}
call neomake#configure#automake('nrwi', 500)

" Deoplete
let g:deoplete#enable_at_startup = 1

" Jedi-vim
let g:jedi#completions_enabled = 0 " disable completions, since we use deoplete
let g:jedi#use_splits_not_buffers = "right"

" NERDTree
map <C-n> :NERDTreeToggle<CR>
let g:NERDTreeDirArrowExpandable = '►' " Change to ASCII symbol on TTY (>)
let g:NERDTreeDirArrowCollapsible = '▼' " Change to ASCII symbol on TTY (V)
let NERDTreeShowLineNumbers=1
let NERDTreeShowHidden=1
let NERDTreeMinimalUI = 1
let g:NERDTreeWinSize=38