nixos-configuration/home-manager/modules/neovim.nix
2023-11-08 23:35:55 +00:00

168 lines
5.1 KiB
Nix

{ lib, nixosConfig, 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
sign define LspDiagnosticsSignError text=🟥
sign define LspDiagnosticsSignWarning text=🟠
sign define LspDiagnosticsSignInformation text=🟣
sign define LspDiagnosticsSignHint text=🟢
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 = builtins.concatStringsSep "\n" (
[
''
-- init.lua
-- this configuration applies to servers and workstations
''
] ++ lib.optional nixosConfig.jalr.workstation.enable ''
-- this configuration applies to workstations only
-- 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.python310Packages.python-lsp-server}/bin/pylsp" },
settings = {
-- https://github.com/python-lsp/python-lsp-server/blob/develop/CONFIGURATION.md
pylsp = {
plugins = {
flake8 = {
enabled = true;
executable = "${pkgs.python310Packages.flake8}/bin/flake8";
};
jedi_completion = { enabled = true; };
jedi_definition = { enabled = true; };
jedi_hover = { enabled = true; };
jedi_references = { enabled = true; };
jedi_signature_help = { enabled = true; };
jedi_symbols = { enabled = true; };
mccabe = { enabled = true; };
preload = { enabled = true; };
pycodestyle = { enabled = true; };
pyflakes = { enabled = true; };
rope_completion = { enabled = true; };
yapf = { enabled = true; };
};
};
};
}
-- Ruby
lsp.solargraph.setup {
on_attach = on_attach,
cmd = { "${pkgs.solargraph}/bin/solargraph", "stdio" },
}
-- Rust
lsp.rust_analyzer.setup {
on_attach = on_attach,
cmd = { "${pkgs.rust-analyzer}/bin/rust-analyzer" },
}
-- 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" },
}
''
);
}