Use home-manager neovim module

This commit is contained in:
Charlotte Van Petegem 2020-09-25 18:50:36 +02:00
parent ff33beb260
commit f3e8f0bb05

View file

@ -30,162 +30,158 @@ in
]; ];
home-manager.users.charlotte = { pkgs, ... }: { home-manager.users.charlotte = { pkgs, ... }: {
home.packages = [ programs.neovim = {
( enable = true;
pkgs.neovim.override { extraConfig = ''
configure = { set autoread
customRC = '' "" Theming
set autoread
"" Theming
set termguicolors set termguicolors
set background=light set background=light
colorscheme snow colorscheme snow
"" General settings "" General settings
" Undo over sessions " Undo over sessions
set undofile set undofile
set undodir=~/.cache/nvim/undo set undodir=~/.cache/nvim/undo
" Automatically save sessions on exit and load them on start " Automatically save sessions on exit and load them on start
function! MakeSession() function! MakeSession()
let b:sessiondir = $HOME . "/.local/share/nvim/sessions" . getcwd() let b:sessiondir = $HOME . "/.local/share/nvim/sessions" . getcwd()
if (filewritable(b:sessiondir) != 2) if (filewritable(b:sessiondir) != 2)
exe 'silent !mkdir -p ' b:sessiondir exe 'silent !mkdir -p ' b:sessiondir
redraw! redraw!
endif endif
let b:filename = b:sessiondir . '/session.vim' let b:filename = b:sessiondir . '/session.vim'
exe "mksession! " . b:filename exe "mksession! " . b:filename
endfunction endfunction
function! LoadSession() function! LoadSession()
let b:sessiondir = $HOME . "/.local/share/nvim/sessions" . getcwd() let b:sessiondir = $HOME . "/.local/share/nvim/sessions" . getcwd()
let b:sessionfile = b:sessiondir . "/session.vim" let b:sessionfile = b:sessiondir . "/session.vim"
if (filereadable(b:sessionfile)) if (filereadable(b:sessionfile))
exe 'source ' b:sessionfile exe 'source ' b:sessionfile
else else
echo "No session loaded." echo "No session loaded."
endif endif
endfunction endfunction
if(argc() == 0) if(argc() == 0)
au VimEnter * nested :call LoadSession() au VimEnter * nested :call LoadSession()
au VimLeave * :call MakeSession() au VimLeave * :call MakeSession()
endif endif
"" Filetype configuration "" Filetype configuration
" Base settings for all files " Base settings for all files
syntax enable syntax enable
set number set number
set showcmd set showcmd
set scrolloff=8 set scrolloff=8
set expandtab set expandtab
set tabstop=4 set tabstop=4
set shiftwidth=4 set shiftwidth=4
set linebreak set linebreak
set list set list
set listchars=tab:·\ ,trail:· set listchars=tab:·\ ,trail:·
set inccommand=split set inccommand=split
set clipboard=unnamedplus 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 function! s:completedFiles(winid, filename, ...) abort
bdelete! bdelete!
call win_gotoid(a:winid) call win_gotoid(a:winid)
if filereadable(a:filename) if filereadable(a:filename)
let lines = readfile(a:filename) let lines = readfile(a:filename)
if !empty(lines) if !empty(lines)
exe ':e ' . lines[0] exe ':e ' . lines[0]
endif endif
call delete(a:filename) call delete(a:filename)
endif endif
endfunction endfunction
function! FzyFiles() function! FzyFiles()
let file = tempname() let file = tempname()
let winid = win_getid() 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 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]) let F = function('s:completedFiles', [winid, file])
botright 10 new botright 10 new
call termopen(cmd, {'on_exit': F}) call termopen(cmd, {'on_exit': F})
startinsert startinsert
endfunction endfunction
function! s:completedGrep(winid, filename, ...) abort function! s:completedGrep(winid, filename, ...) abort
bdelete! bdelete!
call win_gotoid(a:winid) call win_gotoid(a:winid)
if filereadable(a:filename) if filereadable(a:filename)
let lines = readfile(a:filename) let lines = readfile(a:filename)
if !empty(lines) if !empty(lines)
let list = split(lines[0], ':') let list = split(lines[0], ':')
let file = list[0] let file = list[0]
let line = list[1] let line = list[1]
exe ':e ' . file exe ':e ' . file
exe line exe line
endif endif
call delete(a:filename) call delete(a:filename)
endif endif
endfunction endfunction
function! FzyGrep() function! FzyGrep()
let file = tempname() let file = tempname()
let winid = win_getid() 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 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]) let F = function('s:completedGrep', [winid, file])
botright 10 new botright 10 new
call termopen(cmd, {'on_exit': F}) call termopen(cmd, {'on_exit': F})
startinsert startinsert
endfunction endfunction
nnoremap <C-f> :call FzyFiles()<CR> nnoremap <C-f> :call FzyFiles()<CR>
nnoremap <C-g> :call FzyGrep()<CR> nnoremap <C-g> :call FzyGrep()<CR>
'';
"" Plugin configuration plugins = with pkgs.vimPlugins // customPlugins; [
let g:ale_fixers = { '*': ['remove_trailing_lines', 'trim_whitespace'] } {
let g:ale_fix_on_save = 1 plugin = ale;
config = ''
let g:deoplete#enable_at_startup = 1 let g:ale_fixers = { '*': ['remove_trailing_lines', 'trim_whitespace'] }
let g:ale_fix_on_save = 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"
];
}
];
};
} }
) 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
];
};
}; };
} }