"""""""""""""""""""""""""""""""""""""

" Capella .vimrc
"""""""""""""""""""""""""""""""""""""
set nocompatible              " be iMproved, required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'

" ------Plugins-------
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'scrooloose/nerdtree'
Plugin 'tpope/vim-fugitive'
Plugin 'kristijanhusak/vim-multiple-cursors'
Plugin 'tpope/vim-surround'
Plugin 'colors'
Plugin 'jistr/vim-nerdtree-tabs'
Plugin 'iwonbigbro/vim-hybrid'
Plugin 'dense-analysis/ale'
Plugin 'junegunn/fzf.vim'


call vundle#end()
filetype plugin indent on

if has('syntax') && !exists('g:syntax_on')
  syntax enable
endif


"""""""""""""""""""""""""""""""""""""
" Configuration Section
"""""""""""""""""""""""""""""""""""""

set laststatus=2
set ruler
set showcmd
set wildmenu
set autoread
set backspace=indent,eol,start

" Show line numbers
set number
set noruler
set cursorline

" Encoding
set encoding=utf-8


" Set Proper Tabs
set tabstop=4
set shiftwidth=4
set smarttab
set expandtab
set listchars=tab:▒░,trail:▓
set list

" Search
set hlsearch
set incsearch
" nnoremap <silent> <Esc><Esc> :let @/=""<CR>

" Theme and Styling
set t_Co=256
set background=dark

" Vim-Airline Configuration
let g:airline#extensions#tabline#enabled = 1
let g:airline_theme='badwolf'
let g:airline_powerline_fonts = 1

set guifont=Source\ Code\ Pro\ for\ Powerline
set t_Co=256

let g:NERDTreeDirArrowExpandable = '▸'
let g:NERDTreeDirArrowCollapsible = '▾'

"""""""""""""""""""""""""""""""""""""
" Colors 
"""""""""""""""""""""""""""""""""""""
colorscheme hybrid
hi MatchParen cterm=bold ctermbg=none ctermfg=yellow
hi ColorColumn ctermbg=232 guibg=#2c2d27

autocmd FileType nerdtree setlocal colorcolumn&
let &colorcolumn="".join(range(81,999),",")

set splitright

let g:NERDTreeDirArrows=0

"""""""""""""""""""""""""""""""""""""
" Golang
"""""""""""""""""""""""""""""""""""""
autocmd Filetype go command! -bang A call go#alternate#Switch(<bang>0, 'edit')
autocmd Filetype go command! -bang AV call go#alternate#Switch(<bang>0, 'vsplit')
autocmd Filetype go command! -bang AS call go#alternate#Switch(<bang>0, 'split')
autocmd Filetype go command! -bang AT call go#alternate#Switch(<bang>0, 'tabe')
map <C-l> :cnext<CR>
map <C-k> :cprevious<CR>
map gd :ALEGoToDefinition<CR>

nnoremap <leader>a :cclose<CR>
autocmd FileType go nmap <leader>b  <Plug>(go-build)
autocmd FileType go nmap <leader>r  <Plug>(go-run)

set spell spelllang=en_gb
let g:ale_fix_on_save = 1
let g:ale_completion_enabled = 1
let g:ale_echo_msg_format = '[%linter%]% [code]% %s'

let g:ale_sign_error = '✗'
let g:ale_sign_warning = '⚠️'
let g:ale_sign_column_always = 1

let g:ale_fixers = {'go': ['gofmt', 'gofumpt', 'goimports', 'golines', 'trim_whitespace']}