feat(nvim): add nixCats-backed language options
check / lint (push) Successful in 16s

This commit is contained in:
hektor committed 2026-11-04 23:13:01 +01:00
1 parent 0d5027edb7
commit c028ed7f48
9 files changed
+180 -61

No files matched your search

+1
View File
@@ -31,6 +31,7 @@
desktop.niri.enable = true;
devenv.enable = true;
direnv.enable = true;
docker.enable = true;
gaming.enable = true;
git = {
enable = true;
+1
View File
@@ -30,6 +30,7 @@
desktop.niri.enable = true;
devenv.enable = true;
direnv.enable = true;
docker.enable = true;
git = {
enable = true;
gitea.enable = true;
-1
View File
@@ -13,7 +13,6 @@
blender
]
++ lib.optionals config.modules."3d".modeling.openscad.enable [
openscad-lsp
openscad-unstable
];
};
+1 -4
View File
@@ -13,10 +13,7 @@
config = lib.mkIf config.go.enable {
home = {
sessionVariables.GOPATH = "${config.xdg.dataHome}/go";
packages = with pkgs; [
go
gopls
];
packages = with pkgs; [ go ];
};
};
}
@@ -10,6 +10,7 @@ require("conform").setup({
cpp = { "clang-format" },
css = { "prettierd", "prettier", stop_after_first = true },
gdscript = { "gdformat" },
go = { "gofmt" },
haskell = { "ormolu" },
html = { "prettierd", "prettier", stop_after_first = true },
javascript = { "eslint_d", "eslint", "prettierd", "prettier", stop_after_first = true },
@@ -4,31 +4,17 @@ local cmp_nvim_lsp = require("cmp_nvim_lsp")
local capabilities = cmp_nvim_lsp.default_capabilities()
local servers = {
bashls = {},
eslint = {
settings = {
--Assuming prettier/prettierd will handle formatting, we don't need to see these errors
rulesCustomizations = {
{ rule = "prettier/prettier", severity = "off" },
},
format = false,
},
},
emmet_language_server = {},
gdscript = {},
c = { clangd = {} },
docker = { dockerls = {} },
gdscript = { gdscript = {} },
go = { gopls = {} },
haskell = { hls = { filetypes = { "haskell", "lhaskell", "cabal" } } },
helm = {
helm_ls = {
filetypes = { "helm", "yaml.helm-values" },
},
hls = { filetypes = { "haskell", "lhaskell", "cabal" } },
html = {},
jsonls = {
settings = {
json = {
schemas = require("schemastore").json.schemas(),
validate = { enable = true },
},
},
},
lua = {
lua_ls = {
on_init = function(client)
if client.workspace_folders then
@@ -61,6 +47,8 @@ local servers = {
Lua = {},
},
},
},
nix = {
nixd = {
settings = {
nixd = {
@@ -85,8 +73,30 @@ local servers = {
},
},
},
openscad_ls = {},
pyright = {},
},
openscad = { openscad_ls = {} },
python = { pyright = {} },
shell = { bashls = {} },
web = {
emmet_language_server = {},
eslint = {
settings = {
--Assuming prettier/prettierd will handle formatting, we don't need to see these errors
rulesCustomizations = {
{ rule = "prettier/prettier", severity = "off" },
},
format = false,
},
},
html = {},
jsonls = {
settings = {
json = {
schemas = require("schemastore").json.schemas(),
validate = { enable = true },
},
},
},
svelte = {
plugin = {
svelte = {
@@ -132,6 +142,8 @@ local servers = {
},
},
},
},
yaml = {
yamlls = {
settings = {
yaml = {
@@ -146,17 +158,25 @@ local servers = {
},
},
},
},
}
local typescript_server = require("nixCatsUtils").getCatOrDefault("typescriptServer", "ts_ls")
servers[typescript_server == "vtsls" and "ts_ls" or "vtsls"] = nil
local nixCatsUtils = require("nixCatsUtils")
local typescript_server = nixCatsUtils.getCatOrDefault("typescriptServer", "ts_ls")
servers.web[typescript_server == "vtsls" and "ts_ls" or "vtsls"] = nil
for server, config in pairs(servers) do
local enabled = {}
for language, language_servers in pairs(servers) do
if nixCatsUtils.enableForCategory("languages." .. language) then
for server, config in pairs(language_servers) do
config.capabilities = capabilities
vim.lsp.config(server, config)
table.insert(enabled, server)
end
end
end
vim.lsp.enable(vim.tbl_keys(servers))
vim.lsp.enable(enabled)
vim.api.nvim_create_autocmd("LspAttach", {
callback = function(e)
+6 -28
View File
@@ -34,6 +34,7 @@
}@inputs:
let
inherit (nixCats) utils;
inherit (nixpkgs) lib;
luaPath = ./.;
forEachSystem = utils.eachSystem nixpkgs.lib.platforms.all;
extra_pkg_config = {
@@ -75,44 +76,23 @@
}:
let
themes = import ./themes.nix pkgs;
languages = import ./languages.nix { inherit pkgs categories; };
in
{
lspsAndRuntimeDeps = with pkgs; {
general = [
nodejs_24
black
clang
clang-tools
curl # → plenary-nvim
delta
emmet-language-server
eslint_d
fd
gawk
gdtoolkit_4
hadolint
helm-ls
inotify-tools
isort
lua-language-server
nixd
nixfmt
prettier
ormolu
prettierd
rust-analyzer
rustfmt
shellcheck-minimal
stylelint
stylua
tree-sitter
tailwindcss-language-server
(if (categories.typescriptServer or "ts_ls") == "vtsls" then vtsls else typescript-language-server)
vscode-langservers-extracted
yaml-language-server
yamllint
];
github = [ gh ];
languages = lib.mapAttrs (_: language: language.packages) languages;
};
startupPlugins = {
@@ -137,9 +117,7 @@
# TODO: tidalcycles/vim-tidal
vim-glsl
# TODO: timtro/glslView-nvim
# TODO: sirtaj/vim-openscad
jupytext-nvim
vim-openscad
## paq
eyeliner-nvim
fzf-lua
@@ -178,15 +156,14 @@
image-nvim
pkgs.neovimPlugins.beancount-nvim
codecompanion-nvim
helm-ls-nvim
kitty-scrollback-nvim
fidget-nvim
rustaceanvim
# pkgs.neovimPlugins.m-taskwarrior-d-nvim
claudecode-nvim
snacks-nvim
]
++ themes.${categories.colorscheme or "zenwritten"};
languages = lib.mapAttrs (_: language: language.plugins or [ ]) languages;
};
optionalPlugins = {
@@ -202,7 +179,7 @@
};
packageDefinitions = {
nvim = _: {
nvim = { pkgs, ... }: {
settings = {
suffix-path = true;
suffix-LD = true;
@@ -214,6 +191,7 @@
github = false;
colorscheme = "zenwritten";
typescriptServer = "ts_ls";
languages = lib.mapAttrs (_: language: language.enable) (import ./languages.nix { inherit pkgs; });
};
};
};
+107
View File
@@ -0,0 +1,107 @@
{
pkgs,
categories ? { },
}:
with pkgs;
{
c = {
enable = false;
packages = [
clang
clang-tools
];
};
docker = {
enable = false;
packages = [
dockerfile-language-server
hadolint
];
};
gdscript = {
enable = false;
packages = [ gdtoolkit_4 ];
};
go = {
enable = false;
packages = [
go
gopls
];
};
haskell = {
enable = false;
packages = [
haskell-language-server
hlint
ormolu
];
};
helm = {
enable = false;
packages = [ helm-ls ];
plugins = [ vimPlugins.helm-ls-nvim ];
};
lua = {
enable = true;
packages = [
lua-language-server
stylua
];
};
nix = {
enable = true;
packages = [
nixd
nixfmt
];
};
openscad = {
enable = false;
packages = [ openscad-lsp ];
plugins = [ vimPlugins.vim-openscad ];
};
python = {
enable = false;
packages = [
black
isort
pyright
];
};
rust = {
enable = false;
packages = [
rust-analyzer
rustfmt
];
plugins = [ vimPlugins.rustaceanvim ];
};
shell = {
enable = true;
packages = [
bash-language-server
shellcheck-minimal
];
};
web = {
enable = false;
packages = [
emmet-language-server
eslint_d
stylelint
svelte-language-server
tailwindcss-language-server
(if (categories.typescriptServer or "ts_ls") == "vtsls" then vtsls else typescript-language-server)
vscode-langservers-extracted
];
};
yaml = {
enable = false;
packages = [
yaml-language-server
yamllint
];
};
}
+16 -1
View File
@@ -25,14 +25,29 @@ in
"vtsls"
];
};
languages = lib.mapAttrs (
_: language:
lib.mkOption {
default = language.enable;
type = lib.types.bool;
}
) (import "${inputs.nvim}/languages.nix" { inherit pkgs; });
};
config = lib.mkIf config.nvim.enable {
nvim.languages = {
docker = lib.mkDefault config.docker.enable;
go = lib.mkDefault config.go.enable;
helm = lib.mkDefault config.k8s.helm.enable;
openscad = lib.mkDefault config.modules."3d".modeling.openscad.enable;
web = lib.mkDefault config.nodejs.enable;
};
nvim.packageDefinitions.merge.nvim = _: {
categories = {
colorscheme = config.nvim.colorscheme;
github = config.git.github.enable;
inherit (config.nvim) typescriptServer;
inherit (config.nvim) languages typescriptServer;
};
};