diff --git a/configurations/neovim.nix b/configurations/neovim.nix index eeaa31e2..c3440da4 100644 --- a/configurations/neovim.nix +++ b/configurations/neovim.nix @@ -30,162 +30,158 @@ in ]; home-manager.users.charlotte = { pkgs, ... }: { - home.packages = [ - ( - pkgs.neovim.override { - configure = { - customRC = '' - set autoread - "" Theming + programs.neovim = { + enable = true; + extraConfig = '' + set autoread + "" Theming - set termguicolors - set background=light - colorscheme snow + set termguicolors + set background=light + colorscheme snow - "" General settings + "" General settings - " Undo over sessions - set undofile - set undodir=~/.cache/nvim/undo + " Undo over sessions + set undofile + set undodir=~/.cache/nvim/undo - " Automatically save sessions on exit and load them on start - function! MakeSession() - let b:sessiondir = $HOME . "/.local/share/nvim/sessions" . getcwd() - if (filewritable(b:sessiondir) != 2) - exe 'silent !mkdir -p ' b:sessiondir - redraw! - endif - let b:filename = b:sessiondir . '/session.vim' - exe "mksession! " . b:filename - endfunction + " Automatically save sessions on exit and load them on start + function! MakeSession() + let b:sessiondir = $HOME . "/.local/share/nvim/sessions" . getcwd() + if (filewritable(b:sessiondir) != 2) + exe 'silent !mkdir -p ' b:sessiondir + redraw! + endif + let b:filename = b:sessiondir . '/session.vim' + exe "mksession! " . b:filename + endfunction - function! LoadSession() - let b:sessiondir = $HOME . "/.local/share/nvim/sessions" . getcwd() - let b:sessionfile = b:sessiondir . "/session.vim" - if (filereadable(b:sessionfile)) - exe 'source ' b:sessionfile - else - echo "No session loaded." - endif - endfunction - if(argc() == 0) - au VimEnter * nested :call LoadSession() - au VimLeave * :call MakeSession() - endif + function! LoadSession() + let b:sessiondir = $HOME . "/.local/share/nvim/sessions" . getcwd() + let b:sessionfile = b:sessiondir . "/session.vim" + if (filereadable(b:sessionfile)) + exe 'source ' b:sessionfile + else + echo "No session loaded." + endif + endfunction + if(argc() == 0) + au VimEnter * nested :call LoadSession() + au VimLeave * :call MakeSession() + endif - "" Filetype configuration + "" Filetype configuration - " Base settings for all files + " Base settings for all files - syntax enable - set number - set showcmd - set scrolloff=8 - set expandtab - set tabstop=4 - set shiftwidth=4 - set linebreak + syntax enable + set number + set showcmd + set scrolloff=8 + set expandtab + set tabstop=4 + set shiftwidth=4 + set linebreak - set list - set listchars=tab:·\ ,trail:· - set inccommand=split - set clipboard=unnamedplus + set list + set listchars=tab:·\ ,trail:· + set inccommand=split + set clipboard=unnamedplus - filetype plugin indent on + filetype plugin indent on - "" Fuzzy search in vim + "" Fuzzy search in vim - function! s:completedFiles(winid, filename, ...) abort - bdelete! - call win_gotoid(a:winid) - if filereadable(a:filename) - let lines = readfile(a:filename) - if !empty(lines) - exe ':e ' . lines[0] - endif - call delete(a:filename) - endif - endfunction + function! s:completedFiles(winid, filename, ...) abort + bdelete! + call win_gotoid(a:winid) + if filereadable(a:filename) + let lines = readfile(a:filename) + if !empty(lines) + exe ':e ' . lines[0] + endif + call delete(a:filename) + endif + endfunction - function! FzyFiles() - let file = tempname() - let winid = win_getid() - let cmd = split(&shell) + split(&shellcmdflag) + ["${pkgs.ripgrep.out}/bin/rg --files --hidden -g '!/.git' --smart-case | ${pkgs.fzy.out}/bin/fzy > " . file] - let F = function('s:completedFiles', [winid, file]) - botright 10 new - call termopen(cmd, {'on_exit': F}) - startinsert - endfunction + function! FzyFiles() + let file = tempname() + let winid = win_getid() + let cmd = split(&shell) + split(&shellcmdflag) + ["${pkgs.ripgrep.out}/bin/rg --files --hidden -g '!/.git' --smart-case | ${pkgs.fzy.out}/bin/fzy > " . file] + let F = function('s:completedFiles', [winid, file]) + botright 10 new + call termopen(cmd, {'on_exit': F}) + startinsert + endfunction - function! s:completedGrep(winid, filename, ...) abort - bdelete! - call win_gotoid(a:winid) - if filereadable(a:filename) - let lines = readfile(a:filename) - if !empty(lines) - let list = split(lines[0], ':') - let file = list[0] - let line = list[1] - exe ':e ' . file - exe line - endif - call delete(a:filename) - endif - endfunction + function! s:completedGrep(winid, filename, ...) abort + bdelete! + call win_gotoid(a:winid) + if filereadable(a:filename) + let lines = readfile(a:filename) + if !empty(lines) + let list = split(lines[0], ':') + let file = list[0] + let line = list[1] + exe ':e ' . file + exe line + endif + call delete(a:filename) + endif + endfunction - function! FzyGrep() - let file = tempname() - let winid = win_getid() - let cmd = split(&shell) + split(&shellcmdflag) + ["${pkgs.ripgrep.out}/bin/rg --vimgrep --hidden -g '!/.git' '^' | ${pkgs.fzy.out}/bin/fzy > " . file] - let F = function('s:completedGrep', [winid, file]) - botright 10 new - call termopen(cmd, {'on_exit': F}) - startinsert - endfunction + function! FzyGrep() + let file = tempname() + let winid = win_getid() + let cmd = split(&shell) + split(&shellcmdflag) + ["${pkgs.ripgrep.out}/bin/rg --vimgrep --hidden -g '!/.git' '^' | ${pkgs.fzy.out}/bin/fzy > " . file] + let F = function('s:completedGrep', [winid, file]) + botright 10 new + call termopen(cmd, {'on_exit': F}) + startinsert + endfunction - nnoremap :call FzyFiles() - nnoremap :call FzyGrep() - - "" Plugin configuration - let g:ale_fixers = { '*': ['remove_trailing_lines', 'trim_whitespace'] } - let g:ale_fix_on_save = 1 - - let g:deoplete#enable_at_startup = 1 - - " Required for operations modifying multiple buffers like rename - set hidden - - let g:LanguageClient_serverCommands = { - \ 'vue': ['${pkgs.nodePackages.vue-language-server}/bin/vls'], - \ 'javascript': ['${pkgs.nodePackages.javascript-typescript-langserver}/bin/javascript-typescript-stdio'], - \ 'typescript': ['${pkgs.nodePackages.typescript-language-server}/bin/typescript-language-server', '--stdio'], - \ 'java': ['${jdtls}/bin/jdtls'], - \ 'kotlin': ['${kotlinls}/bin/kotlin-language-server'], - \ 'ruby': ['${pkgs.solargraph}/bin/solargraph', 'stdio'], - \ } - ''; - vam.knownPlugins = pkgs.vimPlugins // customPlugins; - vam.pluginDictionaries = [ - { - names = [ - "ale" - "auto-pairs" - "deoplete-nvim" - "editorconfig-vim" - "kotlin-vim" - "LanguageClient-neovim" - "snow-color-theme" - "vim-ledger" - "vim-nix" - "vim-ruby" - "vim-vue" - "yats-vim" - ]; - } - ]; - }; + nnoremap :call FzyFiles() + nnoremap :call FzyGrep() + ''; + plugins = with pkgs.vimPlugins // customPlugins; [ + { + plugin = ale; + config = '' + let g:ale_fixers = { '*': ['remove_trailing_lines', 'trim_whitespace'] } + let g:ale_fix_on_save = 1 + ''; } - ) - ]; + auto-pairs + { + plugin = deoplete-nvim; + config = "let g:deoplete#enable_at_startup = 1"; + } + editorconfig-vim + kotlin-vim + { + plugin = LanguageClient-neovim; + config = '' + " Required for operations modifying multiple buffers like rename + set hidden + + let g:LanguageClient_serverCommands = { + \ 'vue': ['${pkgs.nodePackages.vue-language-server}/bin/vls'], + \ 'javascript': ['${pkgs.nodePackages.javascript-typescript-langserver}/bin/javascript-typescript-stdio'], + \ 'typescript': ['${pkgs.nodePackages.typescript-language-server}/bin/typescript-language-server', '--stdio'], + \ 'java': ['${jdtls}/bin/jdtls'], + \ 'kotlin': ['${kotlinls}/bin/kotlin-language-server'], + \ 'ruby': ['${pkgs.solargraph}/bin/solargraph', 'stdio'], + \ } + ''; + } + snow-color-theme + vim-ledger + vim-nix + vim-ruby + vim-vue + yats-vim + ]; + }; }; }