nix/packages/neovim.nix
Stefan Schwarz 359b7cf8d0 up
2024-11-15 11:05:08 +01:00

128 lines
3.7 KiB
Nix

with import <nixos-unstable> { };
neovim.override {
vimAlias = true;
configure = {
customRC = ''
source ${pkgs.fzf}/share/vim-plugins/fzf/plugin/fzf.vim
set hidden
" langserver
let g:LanguageClient_serverCommands = {
\ 'go': ['gopls'],
\ 'python': ['pyls'],
\ 'rust': ['rust-analyzer'],
\ }
" basic builtin
set background=dark
set shiftwidth=4
set softtabstop=4
set tabstop=4
set expandtab
set ttyfast
set lazyredraw
set regexpengine=1
set synmaxcol=500
set relativenumber
set number
set relativenumber
set mouse=a
set shortmess+=c
set clipboard=unnamedplus
" better search
set incsearch
set ignorecase
set smartcase
set gdefault
" autocomplete
autocmd BufEnter * call ncm2#enable_for_buffer()
inoremap <c-c> <ESC>
inoremap <expr> <CR> (pumvisible() ? "\<c-y>\<cr>" : "\<CR>")
set completeopt=noinsert,menuone,noselect
let g:LanguageClient_completionPreferTextEdit = 1
let g:LanguageClient_diagnosticsSignsMax = 0
" securemodelines
let g:secure_modelines_allowed_items = [
\ "textwidth", "tw",
\ "softtabstop", "sts",
\ "tabstop", "ts",
\ "shiftwidth", "sw",
\ "expandtab", "et", "noexpandtab", "noet",
\ "filetype", "ft",
\ "foldmethod", "fdm",
\ "readonly", "ro", "noreadonly", "noro",
\ "rightleft", "rl", "norightleft", "norl",
\ "colorcolumn"
\ ]
" leader
let mapleader = " "
nnoremap <silent> <leader> :WhichKey '<Space>'<CR>
noremap <leader><space> :Commands<cr>
noremap <leader><tab> :b#<cr>
let g:which_key_map = {}
let g:which_key_map.f = { 'name': '+files' }
noremap <leader>ff :Files<cr>
noremap <leader>fn :NnnPicker %:p:h<cr>
noremap <leader>fc :saveas %:p:h
let g:which_key_map.y = { 'name': '+yank' }
noremap <leader>yp :read !wl-paste<cr>
noremap <leader>yy :read !wl-paste<cr>
noremap <leader>ya :w !wl-copy<cr><cr>
let g:which_key_map.b = { 'name': '+buffers' }
noremap <leader>bb :Buffers<cr>
noremap <leader>bh :History<cr>
noremap <leader>bd :bd<cr>
noremap <leader>bn :bn<cr>
noremap <leader>bp :bp<cr>
let g:which_key_map.m = { 'name': '+lang' }
noremap <leader>md :call LanguageClient_textDocument_codeAction()<cr>
noremap <leader>mc :call LanguageClient#textDocument_references()<cr>
noremap <leader>mf :call LanguageClient#textDocument_formatting()<cr>
noremap <leader>mgg :call LanguageClient#textDocument_definition()<cr>
noremap <leader>mh :call LanguageClient#textDocument_documentHighlight()<cr>
noremap <leader>mm :call LanguageClient#textDocument_hover()<cr>
noremap <leader>mr :call LanguageClient#textDocument_rename()<cr>
noremap <leader>ms :call LanguageClient#workspace_symbol()<cr>
noremap <leader>ma :fzf_lsp_action<cr>
noremap <leader>ml :fzf_lsp_layout<cr>
let g:which_key_map.g = { 'name': '+git' }
noremap <leader>gs :call LazyGit<cr>
" lang specifics
let g:rustfmt_autosave = 1
let g:rustfmt_emit_files = 1
let g:rustfmt_fail_silently = 0
'';
packages.myNvim = with pkgs.vimPlugins; {
start = [
airline
easymotion
editorconfig-vim
fzf-lsp-nvim
fzf-vim
fzfWrapper
LanguageClient-neovim
lazygit-nvim
ncm2
nnn-vim
surround
syntastic
vim-addon-nix
vim-highlightedyank
vim-which-key
];
};
};
}