system/neovim/dev.nix

128 lines
2.7 KiB
Nix

{ config, modulesPath, lib, ... }:
let
inherit (lib.mod) ctrl;
inherit (lib.nix2lua) lambda0 set pipe1 require call call0;
mkLineLimiterGroup = { limit, pattern }: {
"line-limiter-${toString limit}" = {
event = [ "BufNewFile" "BufRead" ];
inherit pattern;
callback = lambda0 (set "vim.wo.colorcolumn" (toString limit));
};
};
in
{
imports = [
"${modulesPath}/profiles/recommended.nix"
];
vim.namedCmd.extra-ftdetect = ''
aug extra_ftdetect
au!
au BufNewFile,BufRead *.d2 setfiletype d2
au BufNewFile,BufRead *.ncl setfiletype nickel
au BufNewFile,BufRead *.psql setfiletype psql
aug END
'';
# Enable fast navigation between windows
vim.keymap.set = map (k: { mode = "n"; lhs = ctrl k; rhs = "${ctrl "w"}${k}"; }) [ "h" "l" "j" "k" ];
vim.augroup = lib.mkMerge [
(mkLineLimiterGroup {
limit = 101;
pattern = [
"*.nix"
"*.ts"
"*.tsx"
"*.js"
"*.jsx"
"*.rs"
"*.hs"
];
})
(mkLineLimiterGroup {
limit = 81;
pattern = [
"*.json"
"*.yml"
"*.yaml"
"*.md"
"*.html"
"*.css"
"*.scss"
"*.less"
];
})
];
plugins.style.neoformat.autoformat.enable = true;
plugins.navigation = {
nvim-tree.settings = {
renderer = {
group_empty = true;
full_name = true;
};
tab.sync = {
open = true;
close = true;
};
};
telescope.extensions.telescope-live-grep-args-nvim.settings = {
auto_quoting = true;
mappings.i = {
"<C-K>" = pipe1
(require "telescope-live-grep-args.actions")
(call0 "quote_prompt")
;
};
};
};
plugins.language-server.lspconfig.serverSettings = {
nil_ls = { };
rust_analyzer = {
settings.rust-analyzer = {
"server.path" = "rust-analyzer";
"updates.prompt" = false;
"updates.checkOnStartup" = false;
"checkOnSave.enable" = true;
"checkOnSave.command" = "clippy";
"cargo.autoreload" = true;
};
};
tsserver = { };
eslint = {
# TODO: on attach
/*
vim.cmd([[
aug eslint_fix
au!
au BufWritePre *.tsx,*.ts,*.jsx,*.js silent! EslintFixAll
aug END
]])
*/
};
volar = {
init_options = {
typescript.tsdk = "./node_modules/typescript/lib";
};
};
ltex = {
language = "en-US";
languageToolHttpServerUri = "http://localhost:8081";
};
pylsp = { };
denols = {
root_dir = call "${config.plugin.nvim-lspconfig.varName}.util.root_pattern" [ "deno.json" "deno.jsonc" ];
};
};
}