174 lines
5.5 KiB
Nix
174 lines
5.5 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')
|
|
'' +
|
|
builtins.concatStringsSep "\n" (
|
|
lib.mapAttrsToList
|
|
(
|
|
lang: cfg: "lsp.${lang}.setup\n" + lib.generators.toLua { } cfg
|
|
)
|
|
{
|
|
# C and C++
|
|
ccls = {
|
|
cmd = [ "${pkgs.ccls}/bin/ccls" ];
|
|
};
|
|
|
|
# Nix
|
|
rnix = {
|
|
cmd = [ "${pkgs.rnix-lsp}/bin/rnix-lsp" ];
|
|
};
|
|
|
|
# Python
|
|
pylsp = {
|
|
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
|
|
solargraph = {
|
|
cmd = [ "${pkgs.solargraph}/bin/solargraph" "stdio" ];
|
|
};
|
|
|
|
# Rust
|
|
rust_analyzer = {
|
|
cmd = [ "${pkgs.rust-analyzer}/bin/rust-analyzer" ];
|
|
};
|
|
|
|
# Bash
|
|
bashls = {
|
|
cmd = [ "${pkgs.nodePackages.bash-language-server}/bin/bash-language-server" "start" ];
|
|
};
|
|
|
|
# Terraform
|
|
terraform_lsp = {
|
|
cmd = [ "${pkgs.terraform-lsp}/bin/terraform-lsp" "serve" ];
|
|
};
|
|
|
|
# YAML
|
|
yamlls = {
|
|
cmd = [ "${pkgs.nodePackages.yaml-language-server}/bin/yaml-language-server" "--stdio" ];
|
|
settings = {
|
|
yaml = {
|
|
keyOrdering = false;
|
|
};
|
|
};
|
|
};
|
|
}
|
|
)
|
|
)
|
|
);
|
|
}
|