{ config, options, lib, pkgs, ... }: with lib; with lib.my; let cfg = config.modules.editors.vim; in { options.modules.editors.vim = { enable = mkBoolOpt false; }; config = mkIf cfg.enable { user.packages = with pkgs; [ editorconfig-core-c unstable.neovim ]; # options.users home-manager.users.anish.programs.neovim = { enable = true; # = TODO something like this n00b. # builtins.concatStringsSep "\n" [ # (lib.strings.fileContents ./base.vim) # (lib.strings.fileContents ./plugins.vim) # (lib.strings.fileContents ./lsp.vim) # # this allows you to add lua config files # '' # lua << EOF # ${lib.strings.fileContents ./config.lua} # ${lib.strings.fileContents ./lsp.lua} # EOF # '' # ]; #home-manager.programs.nvim = { # extraConfig = '' # set tabstop=2 # set showmatch # set shiftwidth=2 # set noexpandtab # set autoindent # # set foldmethod=indent " fold based on indent # set number # set nocompatible # set relativenumber # set showtabline=2 # set autowriteall # syntax on # set list lcs=tab:\|\ # filetype plugin on # # set termguicolors # let ayucolor="dark" # colorscheme ayu # # " window # nmap wh :topleft vnew # nmap wl :botright vnew # nmap wk :topleft new # nmap wj :botright new # # let mapleader = "\" # # " lightline colorscheme # let g:lightline = { # \ 'colorscheme': 'seoul256', # \ } # # " moving splits with vim movements. # :tnoremap h # :tnoremap j # :tnoremap k # :tnoremap l # :inoremap h # :inoremap j # :inoremap k # :inoremap l # :nnoremap h # :nnoremap j # :nnoremap k # :nnoremap l # :nnoremap "=strftime("%Y-%m-%d %H:%M:") # :inoremap =strftime("%Y-%m-%d %H:%M:") # # " exit normal mode in terminal # :tnoremap # # let g:syntastic_always_populate_loc_list = 1 # let g:syntastic_auto_loc_list = 1 # let g:syntastic_check_on_open = 1 # let g:syntastic_check_on_wq = 0 # # let g:rainbow_active = 0 # autocmd BufReadPost,BufNewFile c,py,nix RainbowParenthesesToggleAll # # " keyboard commands # map t :NERDTreeToggle # map s :w # map q :wq # map r :RainbowParenthesesToggleAll # map zs :ZettelSearch # map zo :ZettelOpen # map zn :ZettelNew # # # " NERDTree # " open on directory # autocmd StdinReadPre * let s:std_in=1 # # " coc # " # " if hidden is not set, TextEdit might fail. # set hidden # # " Some servers have issues with backup files, see #649 # set nobackup # set nowritebackup # # " Better display for messages # set cmdheight=2 # # " You will have bad experience for diagnostic messages when it's default 4000. # set updatetime=300 # # " don't give |ins-completion-menu| messages. # set shortmess+=c # # " always show signcolumns # set signcolumn=yes # # " Use tab for trigger completion with characters ahead and navigate. # " Use command ':verbose imap ' to make sure tab is not mapped by other plugin. # inoremap # \ pumvisible() ? "\" : # \ check_back_space() ? "\" : # \ coc#refresh() # inoremap pumvisible() ? "\" : "\" # # function! s:check_back_space() abort # let col = col('.') - 1 # return !col || getline('.')[col - 1] =~# '\s' # endfunction # # " Use to trigger completion. # inoremap coc#refresh() # # " Use to confirm completion, `u` means break undo chain at current position. # " Coc only does snippet and additional edit on confirm. # inoremap pumvisible() ? "\" : "\u\" # " Or use `complete_info` if your vim support it, like: # " inoremap complete_info()["selected"] != "-1" ? "\" : "\u\" # # " Use `[g` and `]g` to navigate diagnostics # nmap [g (coc-diagnostic-prev) # nmap ]g (coc-diagnostic-next) # # " Remap keys for gotos # nmap gd (coc-definition) # nmap gy (coc-type-definition) # nmap gi (coc-implementation) # nmap gr (coc-references) # # " Use K to show documentation in preview window # nnoremap K :call show_documentation() # # function! s:show_documentation() # if (index(['vim','help'], &filetype) >= 0) # execute 'h '.expand('') # else # call CocAction('doHover') # endif # endfunction # # " Highlight symbol under cursor on CursorHold # autocmd CursorHold * silent call CocActionAsync('highlight') # # " Remap for rename current word # nmap rn (coc-rename) # # " Remap for format selected region # xmap f (coc-format-selected) # nmap f (coc-format-selected) # # augroup mygroup # autocmd! # " Setup formatexpr specified filetype(s). # autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') # " Update signature help on jump placeholder # autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') # augroup end # # " Remap for do codeAction of selected region, ex: `aap` for current paragraph # xmap a (coc-codeaction-selected) # nmap a (coc-codeaction-selected) # # " Remap for do codeAction of current line # nmap ac (coc-codeaction) # " Fix autofix problem of current line # nmap qf (coc-fix-current) # # " Create mappings for function text object, requires document symbols feature of languageserver. # xmap if (coc-funcobj-i) # xmap af (coc-funcobj-a) # omap if (coc-funcobj-i) # omap af (coc-funcobj-a) # # " Use for select selections ranges, needs server support, like: coc-tsserver, coc-python # nmap (coc-range-select) # xmap (coc-range-select) # # " Use `:Format` to format current buffer # command! -nargs=0 Format :call CocAction('format') # # " Use `:Fold` to fold current buffer # command! -nargs=? Fold :call CocAction('fold', ) # # " use `:OR` for organize import of current buffer # command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport') # # " Add status line support, for integration with other plugin, checkout `:h coc-status` # " set statusline^=%{coc#status()}%{get(b:,'coc_current_function',"")} # # " Using CocList # " Show all diagnostics # nnoremap a :CocList diagnostics # " Manage extensions # nnoremap e :CocList extensions # " Show commands # nnoremap c :CocList commands # " Find symbol of current document # nnoremap o :CocList outline # " Search workspace symbols # nnoremap s :CocList -I symbols # " Do default action for next item. # nnoremap j :CocNext # " Do default action for previous item. # nnoremap k :CocPrev # " Resume latest coc list # nnoremap p :CocListResume # # au BufNewFile,BufRead *.frag,*.vert,*.fp,*.vp,*.glsl setf glsl # ''; # extraPackages = with pkgs.vimPlugins; [ # vim-nix # fzf-vim # vim-elixir # emmet-vim # nerdtree # goyo-vim # vim-sneak # lightline-vim # csv-vim # vimwiki # coc-nvim # coc-json # coc-python # coc-pairs # coc-emmet # emmet-vim # LanguageClient-neovim # ayu-vim # rainbow_parentheses-vim # vim-surround # vim-fugitive # #iron-nvim # #nvim-colorizer # vim-devicons # # testing # #vim-processing # #vim-tidal # taskwiki # #vim-zettel # ]; #}; environment.shellAliases = { vim = "nvim"; v = "nvim"; k = "vim -c :VimwikiIndex"; kz = "vim -c :VimwikiIndex -c :ZettelNew"; }; }; }