{ pkgs, ... }: {
  programs.neovim = {
    enable = true;
    coc = {
      enable = true;
      settings = {
        "suggest.noselect" = false;
      };
    };
    viAlias = true;
    vimAlias = true;
    vimdiffAlias = true;
    extraConfig = ''
      set whichwrap=b,s,<,>,[,]
      set linebreak
      set wrap
      set number
      set cursorline
      set expandtab
      set mouse=a
      set splitright
      set splitbelow
      set clipboard=unnamedplus
      set smartcase
      set scrolloff=5
      colorscheme onehalfdark

      if exists('+termguicolors')
        let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
        let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
        set termguicolors
      endif

      let g:better_whitespace_enabled=1
      let g:strip_whitespace_on_save=1
      let g:strip_only_modified_lines=1
      let g:strip_whitelines_at_eof=1
      let g:show_spaces_that_precede_tabs=1
      nnoremap ]w :NextTrailingWhitespace<CR>
      nnoremap [w :PrevTrailingWhitespace<CR>

      nmap <silent> [c :call CocAction('diagnosticNext')<cr>
      nmap <silent> ]c :call CocAction('diagnosticPrevious')<cr>

      set statusline=%t       "tail of the filename
      set statusline+=[%{strlen(&fenc)?&fenc:'none'}, "file encoding
      set statusline+=%{&ff}] "file format
      set statusline+=%h      "help file flag
      set statusline+=%m      "modified flag
      set statusline+=%r      "read only flag
      set statusline+=%y      "filetype
      set statusline+=%=      "left/right separator
      set statusline+=%c,     "cursor column
      set statusline+=%l/%L   "cursor line/total lines
      set statusline+=\ %P    "percent through file

      let g:VM_theme_set_by_colorscheme = 1
      highlight VM_Extend ctermfg=NONE guifg=NONE    ctermbg=239 guibg=#474e5d
      highlight VM_Cursor ctermfg=188  guifg=#dcdfe4 ctermbg=168 guibg=#e06c75
      highlight VM_Insert ctermfg=236  guifg=#282c34 ctermbg=176 guibg=#c678dd
      highlight VM_Mono   ctermfg=236  guifg=#282c34 ctermbg=75  guibg=#61afef

      highlight Pmenu      ctermfg=188 guifg=#dcdfe4 ctermbg=239 guibg=#474e5d
      highlight PmenuSel   ctermfg=236 guifg=#282c34 ctermbg=75  guibg=#61afef
      highlight PmenuSbar  ctermfg=237 guifg=#313640 ctermbg=237 guibg=#313640
      highlight PmenuThumb ctermfg=188 guifg=#dcdfe4 ctermbg=188 guibg=#dcdfe4

      nnoremap <silent> K :call <SID>show_documentation()<CR>

      function! s:show_documentation()
        if (index(['vim','help'], &filetype) >= 0)
          execute 'h '.expand('<cword>')
        else
          call CocAction('doHover')
        endif
      endfunction

      lua << EOF
        require('neorg').setup {
          load = {
            ["core.defaults"] = {}
          }
        }

        require('orgmode').setup_ts_grammar()

        require('nvim-treesitter.configs').setup {
          highlight = {
            enable = true,
            additional_vim_regex_highlighting = {'org'},
          },
          rainbow = {
            enable = true,
            extended_mode = true,
            max_file_lines = nil,
          },
          incremental_selection = {
            enable = true,
            keymaps = {
              init_selection = "gnn",
              node_incremental = "grn",
              scope_incremental = "grc",
              node_decremental = "grm",
            },
          },
          indent = {
            enable = true,
          },
        }

        require('git-conflict').setup()
      EOF

      set foldmethod=expr
      set foldexpr=nvim_treesitter#foldexpr()

      set viewoptions-=options
      autocmd BufWinLeave ?* mkview!
      autocmd BufWinEnter ?* normal zR
      autocmd BufWinEnter ?* silent! loadview
    '';

    plugins = [
      pkgs.vimPlugins.git-conflict-nvim
      pkgs.vimPlugins.vim-nix
      pkgs.vimPlugins.copilot-vim
      pkgs.vimPlugins.coc-tsserver
      pkgs.vimPlugins.coc-eslint
      pkgs.vimPlugins.zoomwintab-vim
      pkgs.vimPlugins.onehalf
      pkgs.vimPlugins.neorg
      pkgs.vimPlugins.orgmode
      pkgs.vimPlugins.vim-sleuth
      pkgs.vimPlugins.vim-visual-multi
      pkgs.vimPlugins.vim-better-whitespace
      pkgs.vimPlugins.nvim-ts-rainbow
      (pkgs.vimPlugins.nvim-treesitter.withPlugins (plugins: pkgs.tree-sitter.allGrammars))
    ];
  };

  home.sessionVariables.EDITOR = "${pkgs.neovim}/bin/nvim";
}
