neovim: split configs into multiple files

This commit is contained in:
Dmitriy Pleshevskiy 2024-06-18 17:14:05 +03:00
parent 43586edf29
commit 9ed408cc86
Signed by: pleshevskiy
GPG key ID: 17041163DA10A9A2
7 changed files with 135 additions and 108 deletions

View file

@ -0,0 +1,6 @@
{
imports = [
./language-server.nix
./line-limiter.nix
];
}

View file

@ -0,0 +1,56 @@
{ config, lib, ... }:
let inherit (lib.nix2lua) call; in
{
fn.lspconfig-eslint-on-attach = {
args = [ "client" "bufnr" ];
content = { bufnr, ... }: {
vim.augroup.eslint-fix = {
event = "BufWritePre";
buffer = bufnr;
command = "silent! EslintFixAll";
};
};
};
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 = rec {
filetypes = [ "javascript" "javascriptreact" "typescript" "typescriptreact" "vue" ];
init_options.plugins = [
{
name = "@vue/typescript-plugin";
location = "./node_modules/@vue/typescript-plugin";
languages = filetypes;
}
];
};
eslint = {
on_attach = config.fn.lspconfig-eslint-on-attach.lambda;
};
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" ];
};
jdtls = { cmd = [ "jdtls" ]; };
};
}

View file

@ -0,0 +1,48 @@
{ lib, ... }:
let
mkLineLimiterOpts = limit: {
colorcolumn = toString (limit + 1);
textwidth = limit;
};
mkLineLimiterGroup = { limit, pattern }:
lib.nameValuePair
"line-limiter-${toString limit}"
{
inherit pattern;
opt = mkLineLimiterOpts limit;
};
in
{
buffer.filetype = lib.listToAttrs [
(mkLineLimiterGroup {
limit = 100;
pattern = [
"nix"
"javascript,javascriptreact"
"typescript,typescriptreact"
"vue"
"rust"
"haskell"
];
})
(mkLineLimiterGroup {
limit = 90;
pattern = [
"python"
];
})
(mkLineLimiterGroup {
limit = 80;
pattern = [
"json"
"yaml"
"markdown"
"html,htmldjango"
"css,scss,less"
"sql,psql"
];
})
];
}

View file

@ -1,26 +1,16 @@
{ config, modulesPath, lib, pkgs, ... }:
{ modulesPath, lib, pkgs, ... }:
let
inherit (lib.mod) ctrl;
inherit (lib.nix2lua) pipe1 require call call0 nf var;
inherit (lib.nix2lua) pipe1 require call0 nf var;
mkLineLimiterOpts = limit: {
colorcolumn = toString (limit + 1);
textwidth = limit;
};
mkLineLimiterGroup = { limit, pattern }:
lib.nameValuePair
"line-limiter-${toString limit}"
{
inherit pattern;
opt = mkLineLimiterOpts limit;
};
in
{
imports = [
"${modulesPath}/profiles/recommended.nix"
./snippets.nix
./configs
./plugins
];
vim.opt = {
@ -33,36 +23,7 @@ in
pattern = [ "txt" "markdown" "mail" "man" ];
opt = { formatoptions = "tcroqwanjp"; };
};
} // lib.listToAttrs [
(mkLineLimiterGroup {
limit = 100;
pattern = [
"nix"
"javascript,javascriptreact"
"typescript,typescriptreact"
"vue"
"rust"
"haskell"
];
})
(mkLineLimiterGroup {
limit = 90;
pattern = [
"python"
];
})
(mkLineLimiterGroup {
limit = 80;
pattern = [
"json"
"yaml"
"markdown"
"html,htmldjango"
"css,scss,less"
"sql,psql"
];
})
];
};
filetype.detect = {
d2 = "*.d2";
@ -73,18 +34,6 @@ in
# Enable fast navigation between windows
vim.keymap.set = map (k: { mode = "n"; lhs = ctrl k; rhs = "${ctrl "w"}${k}"; }) [ "h" "l" "j" "k" ];
plugin.ollama-nvim = {
enable = true;
name = "ollama";
setupSettings = { };
};
plugin.nlsp-settings-nvim = {
enable = true;
name = "nlspsettings";
setupSettings = { };
};
plugins.style.nvim-treesitter.extraGrammars = {
tree-sitter-d2 = rec {
language = "d2";
@ -128,58 +77,6 @@ in
};
};
fn.lspconfig-eslint-on-attach = {
args = [ "client" "bufnr" ];
content = { bufnr, ... }: {
vim.augroup.eslint-fix = {
event = "BufWritePre";
buffer = bufnr;
command = "silent! EslintFixAll";
};
};
};
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 = rec {
filetypes = [ "javascript" "typescript" "vue" ];
init_options.plugins = [
{
name = "@vue/typescript-plugin";
location = "./node_modules/@vue/typescript-plugin";
languages = filetypes;
}
];
};
eslint = {
on_attach = config.fn.lspconfig-eslint-on-attach.lambda;
};
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" ];
};
jdtls = { cmd = [ "jdtls" ]; };
};
plugins.snippet.luasnip.settings = {
ext_opts = [
(nf (var "luasnip_types.choiceNode") {

View file

@ -0,0 +1,6 @@
{
imports = [
./ollama.nix
./nlsp-settings.nix
];
}

View file

@ -0,0 +1,7 @@
{
plugin.nlsp-settings-nvim = {
enable = true;
name = "nlspsettings";
setupSettings = { };
};
}

View file

@ -0,0 +1,7 @@
{
plugin.ollama-nvim = {
enable = true;
name = "ollama";
setupSettings = { };
};
}