nixos-configuration/home-manager/modules/neovim.nix
2022-04-27 11:03:33 +00:00

127 lines
3.5 KiB
Nix

{ config, pkgs, ... }:
{
home.sessionVariables = {
EDITOR = "nvim";
};
programs.neovim = {
enable = true;
vimAlias = true;
extraConfig = ''
" use space as leader
let mapleader = " "
colorscheme NeoSolarized
"""""""""""""""""
" Swap and undo "
set noswapfile
set nobackup
if has('persistent_undo')
" yay persistent undo
:silent !mkdir -p ~/.local/vim-undo
set undofile
set undodir=~/.local/vim-undo
endif
cabbr <expr> %% expand('%:p:h')
set listchars=trail:·,precedes:«,extends:»,eol:,tab:\
nmap <silent> <leader>c :set list!<CR>
set smartcase
set hlsearch
nnoremap <silent> <CR> :nohlsearch<CR>:set nolist<CR><CR>
" highlight whitespace
highlight ExtraWhitespace ctermbg=red guibg=red
highlight WrongIndent ctermbg=2 guibg=blue
match ExtraWhitespace /\s\+$/
augroup highlight_extra_whitespace
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()
augroup END
let g:deoplete#enable_at_startup = 1
nnoremap <silent> gd <cmd>lua vim.lsp.buf.definition()<CR>
nnoremap <silent> gi <cmd>lua vim.lsp.buf.implementation()<CR>
nnoremap <silent> gr <cmd>lua vim.lsp.buf.references()<CR>
nnoremap <silent> gD <cmd>lua vim.lsp.buf.declaration()<CR>
nnoremap <silent> ge <cmd>lua vim.lsp.diagnostic.set_loclist()<CR>
nnoremap <silent> K <cmd>lua vim.lsp.buf.hover()<CR>
nnoremap <silent> <leader>f <cmd>lua vim.lsp.buf.formatting()<CR>
nnoremap <silent> <leader>rn <cmd>lua vim.lsp.buf.rename()<CR>
nnoremap <silent> <leader>a <cmd>lua vim.lsp.buf.code_action()<CR>
xmap <silent> <leader>a <cmd>lua vim.lsp.buf.range_code_action()<CR>
lua require('init')
'';
# nix-env -f '<nixpkgs>' -qaP -A vimPlugins
plugins = with pkgs.vimPlugins; [
#Valloric/MatchTagAlways
#frankier/neovim-colors-solarized-truecolor-only
#nvie/vim-rst-tables
NeoSolarized
deoplete-nvim
editorconfig-vim
nvim-lspconfig
vim-gitgutter
vim-indent-guides
vim-nix
vim-puppet
vim-terraform
];
};
xdg.configFile."nvim/lua/init.lua".text = ''
-- https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md
local lsp = require('lspconfig')
-- C and C++
lsp.ccls.setup {
on_attach = on_attach,
cmd = { "${pkgs.ccls}/bin/ccls" },
}
-- Nix
lsp.rnix.setup {
on_attach = on_attach,
cmd = { "${pkgs.rnix-lsp}/bin/rnix-lsp" },
}
-- Python
lsp.pylsp.setup {
on_attach = on_attach,
cmd = { "${pkgs.python39Packages.python-lsp-server}/bin/pylsp" },
}
-- Ruby
lsp.solargraph.setup {
on_attach = on_attach,
cmd = { "${pkgs.solargraph}/bin/solargraph", "stdio" },
}
-- Bash
lsp.bashls.setup {
on_attach = on_attach,
cmd = { "${pkgs.nodePackages.bash-language-server}/bin/bash-language-server", "start" },
}
-- Terraform
lsp.terraform_lsp.setup {
on_attach = on_attach,
cmd = { "${pkgs.terraform-lsp}/bin/terraform-lsp", "serve" },
}
-- YAML
lsp.yamlls.setup {
on_attach = on_attach,
cmd = { "${pkgs.nodePackages.yaml-language-server}/bin/yaml-language-server", "--stdio" },
}
'';
}