{ config, pkgs, ... }:
{
  programs.neovim = {
    enable = true;
    # defaultEditor = true; why the hell doesn't this work :(
    vimAlias = true;
    plugins = with pkgs.vimPlugins; [
      nerdtree
      nerdcommenter
      fugitive-gitlab-vim
      vim-repeat
      vim-airline
      fzf-vim
      dracula-vim
      vim-nix # this destroys my tab settings, ffs
    ];
    extraConfig =
      ''
        " basic commands bound to uppercase key
        command Q q
        command W w
        command Wq wq
        command WQ wq

        set shiftwidth=4
        set noexpandtab
        set preserveindent
        set number relativenumber
        set tabstop=4
        set smartcase
        set colorcolumn=120
        set nowrap
        highlight ColorColumn ctermbg=darkgray


        " beautify indents
        :set list lcs=tab:\|\ 

        nnoremap ; :
        nnoremap : ;
        vnoremap ; :
        vnoremap : ;

        " set space as leader
        nnoremap <SPACE> <Nop>
        let mapleader = " "

        " air-line
        let g:airline_powerline_fonts = 1

        " NERDTree
        nnoremap <leader>n :NERDTreeFocus<CR> :NERDTreeRefreshRoot<CR>
        " NERDTree autostart"
        autocmd VimEnter * NERDTree | wincmd p

        " Close the tab if NERDTree is the only window remaining in it.
        autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif

        "remove ex-mode shortcut
        nmap Q <Nop>

        " trigger the fuzzy finder (fzf)
        nnoremap <leader>f :Files<CR>
        nnoremap <leader>g :GFiles<CR>
        nnoremap <leader>b :Buffers<CR>
        nnoremap <leader>r :Rg<CR>

        " keybinds for coc
        nnoremap <leader>d :CocDiagnostics<CR>

        " quickfixlist binds
        nnoremap <C-j> :cnext<CR>
        nnoremap <C-k> :cprev<CR>

        " locallist binds
        nnoremap <C-l> :lnext<CR>
        nnoremap <C-h> :lprev<CR>

        " split keybinds
        nnoremap <leader>s :sp<CR>
        nnoremap <leader>v :vs<CR>

        nnoremap <leader>h <C-w>h
        nnoremap <leader>j <C-w>j
        nnoremap <leader>k <C-w>k
        nnoremap <leader>l <C-w>l

        " coloring stuff
        let g:dracula_colorterm = 0
        colorscheme dracula
 
        " better autocompletion menu colors
        highlight Pmenu ctermbg=darkgray ctermfg=black
        highlight PmenuSel ctermbg=gray ctermfg=black

      '';
  };

}