141 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ pkgs, lib, inputs, config, ...}:
 | 
						|
let
 | 
						|
  undoDir = "${config.home.homeDirectory}/.vim/undo";
 | 
						|
in {
 | 
						|
  programs.neovim = {
 | 
						|
    enable = true;
 | 
						|
    defaultEditor = true;
 | 
						|
    viAlias = true;
 | 
						|
    vimAlias = true;
 | 
						|
    vimdiffAlias = true;
 | 
						|
    plugins = with pkgs.vimPlugins; [
 | 
						|
      lightline-vim
 | 
						|
      vim-lightline-coc
 | 
						|
 | 
						|
      vim-commentary
 | 
						|
      vim-fugitive
 | 
						|
 | 
						|
      nerdtree
 | 
						|
      nerdtree-git-plugin
 | 
						|
      vim-devicons
 | 
						|
      telescope-nvim
 | 
						|
 | 
						|
      nvim-lspconfig
 | 
						|
      nvim-treesitter
 | 
						|
 | 
						|
      coc-css
 | 
						|
      coc-go
 | 
						|
      coc-html
 | 
						|
      coc-json
 | 
						|
      coc-nvim
 | 
						|
 | 
						|
      vim-nix
 | 
						|
      vim-puppet
 | 
						|
    ];
 | 
						|
 | 
						|
    withNodeJs = true;
 | 
						|
 | 
						|
    extraConfig = ''
 | 
						|
      let mapleader = ','
 | 
						|
      set number
 | 
						|
      set shiftwidth=2
 | 
						|
      set tabstop=2
 | 
						|
      set expandtab
 | 
						|
 | 
						|
      set undofile
 | 
						|
      set undodir=${undoDir}
 | 
						|
      set undolevels=1000
 | 
						|
      set undoreload=10000
 | 
						|
 | 
						|
      " Integrate status with lightline
 | 
						|
      let g:lightline = {
 | 
						|
        \   'active': {
 | 
						|
        \     'left': [[ 'mode', 'paste', 'filename', 'readonly', 'coc_info', 'coc_hints', 'coc_errors', 'coc_warnings', 'coc_ok' ], [ 'coc_status'  ]]
 | 
						|
        \   }
 | 
						|
        \ }
 | 
						|
 | 
						|
      " register components:
 | 
						|
      call lightline#coc#register()
 | 
						|
 | 
						|
      " GoTo code navigation.
 | 
						|
      nmap <silent> gd <Plug>(coc-definition)
 | 
						|
      nmap <silent> gy <Plug>(coc-type-definition)
 | 
						|
      nmap <silent> gi <Plug>(coc-implementation)
 | 
						|
      nmap <silent> gr <Plug>(coc-references)
 | 
						|
 | 
						|
      " Use K to show documentation in preview window.
 | 
						|
      nnoremap <silent> K :call ShowDocumentation()<CR>
 | 
						|
      function! ShowDocumentation()
 | 
						|
        if CocAction('hasProvider', 'hover')
 | 
						|
          call CocActionAsync('doHover')
 | 
						|
        else
 | 
						|
          call feedkeys('K', 'in')
 | 
						|
        endif
 | 
						|
      endfunction
 | 
						|
 | 
						|
      " Enable syntax folding with coc
 | 
						|
      command! -nargs=* Fold :call CocAction('fold', <f-args>)
 | 
						|
 | 
						|
      inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
 | 
						|
                                    \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
 | 
						|
 | 
						|
      " Highlight the symbol and its references when holding the cursor.
 | 
						|
      autocmd CursorHold * silent call CocActionAsync('highlight')
 | 
						|
 | 
						|
      " Symbol renaming.
 | 
						|
      nmap <leader>rn <Plug>(coc-rename)
 | 
						|
 | 
						|
      " Use CTRL-S for selections ranges.
 | 
						|
      " Requires 'textDocument/selectionRange' support of language server.
 | 
						|
      nmap <silent> <C-s> <Plug>(coc-range-select)
 | 
						|
      xmap <silent> <C-s> <Plug>(coc-range-select)
 | 
						|
 | 
						|
      " Step through diagnostics
 | 
						|
      nmap <silent> <g <Plug>(coc-diagnostic-prev)
 | 
						|
      nmap <silent> >g <Plug>(coc-diagnostic-next)
 | 
						|
 | 
						|
      " Nerdtree-settings
 | 
						|
      " Toggle nerdtree on Ctrl+t
 | 
						|
      nmap <silent> <C-t> :NERDTreeToggle<CR>
 | 
						|
      " Close vim is Nerdtree is the only buffer left
 | 
						|
      autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
 | 
						|
 | 
						|
      if empty($AERC_ACCOUNT) && empty($MOZ_APP_LAUNCHER)
 | 
						|
        autocmd VimEnter * NERDTree " Autostart nerdtree on vim startup
 | 
						|
        autocmd VimEnter * wincmd p " Unselect nerdtree window
 | 
						|
      endif
 | 
						|
 | 
						|
      autocmd Filetype go setlocal expandtab tabstop=4 shiftwidth=4 softtabstop=4
 | 
						|
 | 
						|
      " List and switch buffers on Ctrl+k
 | 
						|
      " nnoremap <C-k> :set nomore <Bar> :ls <Bar> :set more <CR>:b<Space>
 | 
						|
      nnoremap <silent> <C-k> !echo "Did you mean C-a?"<CR>
 | 
						|
 | 
						|
      " Telescope-settings
 | 
						|
      nnoremap <leader>ff <cmd>Telescope find_files<cr>
 | 
						|
      nnoremap <leader>fg <cmd>Telescope live_grep<cr>
 | 
						|
      nnoremap <leader>fb <cmd>Telescope buffers<cr>
 | 
						|
      nnoremap <leader>fh <cmd>Telescope help_tags<cr>
 | 
						|
      nnoremap <C-a> <cmd>Telescope buffers<cr>
 | 
						|
      nnoremap <C-s> <cmd>Telescope find_files<cr>
 | 
						|
      nnoremap <C-g> <cmd>Telescope live_grep<cr>
 | 
						|
 | 
						|
      " Don't darken the background
 | 
						|
      autocmd VimEnter * highlight normal ctermbg=NONE guibg=NONE
 | 
						|
 | 
						|
      " Show trailing whitespace
 | 
						|
      highlight ExtraWhitespace ctermbg=red guibg=red
 | 
						|
      match ExtraWhitespace /\s\+$/
 | 
						|
 | 
						|
      " Disable search highlights
 | 
						|
      map <Leader><Space> :noh<CR>
 | 
						|
 | 
						|
      " Start with Coc disabled
 | 
						|
      " autocmd VimEnter * CocDisable
 | 
						|
    '';
 | 
						|
  };
 | 
						|
 | 
						|
  # Create undo directory
 | 
						|
  home.activation.vimUndoDir = lib.hm.dag.entryAfter ["writeBoundary"] "mkdir -p ${undoDir}";
 | 
						|
}
 |