diff --git a/profiles/nvim/default.nix b/profiles/nvim/default.nix new file mode 100644 index 00000000..e69de29b diff --git a/profiles/nvim/nvim.nix b/profiles/nvim/nvim.nix new file mode 100644 index 00000000..081e0a5c --- /dev/null +++ b/profiles/nvim/nvim.nix @@ -0,0 +1,261 @@ +{ pkgs, ... }: + + + #nvim + { + environment.variables.EDITOR = "nvim"; + environment.shellAliases = { + k = "vim -c :VimwikiIndex"; + kz = "vim -c :VimwikiIndex -c :ZettelNew"; + }; + environment.systemPackages = with pkgs; [ + nodejs + ( neovim.override { + vimAlias = true; + configure = { + packages.myPlugins = with pkgs.vimPlugins; { + start = [ + 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 + #vimwiki-sync + ]; + }; + customRC = '' + 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 + ''; + }; + } + )]; +}