Maybe this is even better and less hacky?

This commit is contained in:
Liyua 2025-07-01 20:21:15 +02:00
commit bfeec99df8
No known key found for this signature in database
GPG key ID: AFF37010586DE14D

View file

@ -4,16 +4,16 @@
lib,
inputs,
...
}: let
}:
let
inherit (builtins) attrNames;
inherit (lib) concatStringsSep;
inherit (lib) concatStringsSep mkLuaInline;
inherit (lib.meta) getExe;
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.modules) mkIf mkMerge;
inherit (lib.lists) isList;
inherit (lib.strings) optionalString;
inherit
(lib.types)
inherit (lib.types)
anything
attrsOf
enum
@ -32,42 +32,60 @@
noFormat = "on_attach = attach_keymaps";
defaultServer = "nil";
packageToCmd = package: defaultCmd:
if isList package
then expToLua package
else ''{"${package}/bin/${defaultCmd}"}'';
packageToCmd =
package: defaultCmd:
if isList package then expToLua package else ''{"${package}/bin/${defaultCmd}"}'';
servers = {
nil = {
package = inputs.nil.packages.${pkgs.stdenv.system}.nil;
internalFormatter = true;
lspConfig = ''
lspconfig.nil_ls.setup{
capabilities = capabilities,
${
if cfg.format.enable
then useFormat
else noFormat
},
cmd = ${packageToCmd cfg.lsp.package "nil"},
${optionalString cfg.format.enable ''
lspConfig = ''lspconfig.nil_ls.setup ${
toLuaObject {
capabilities = mkLuaInline "capabilities";
on_attach = if cfg.format.enable then mkLuaInline "default_on_attach" else "attach_keymaps";
cmd = packageToCmd cfg.lsp.package "nil";
settings = {
["nil"] = {
${optionalString (cfg.format.type == "alejandra") ''
formatting = {
command = {"${cfg.format.package}/bin/alejandra", "--quiet"},
},
''}
${optionalString (cfg.format.type == "nixfmt") ''
formatting = {
command = {"${cfg.format.package}/bin/nixfmt"},
},
''}
nix = ${toLuaObject cfg.lsp.options},
},
},
''}
nil.formatting.command =
if cfg.format.enable then
if cfg.format.type == "alejandra" then
''{"${cfg.format.package}/bin/alejandra", "--quiet"}''
else if cfg.format.type == "nixfmt" then
''{"${cfg.format.package}/bin/nixfmt"}''
else
null
else
null;
} // config.lsp.options;
}
'';
}'';
# lspConfig = ''
# lspconfig.nil_ls.setup{
# capabilities = capabilities,
# ${
# if cfg.format.enable
# then useFormat
# else noFormat
# },
# cmd = ${packageToCmd cfg.lsp.package "nil"},
# ${optionalString cfg.format.enable ''
# settings = {
# ["nil"] = {
# ${optionalString (cfg.format.type == "alejandra") ''
# formatting = {
# command = {"${cfg.format.package}/bin/alejandra", "--quiet"},
# },
# ''}
# ${optionalString (cfg.format.type == "nixfmt") ''
# formatting = {
# command = {"${cfg.format.package}/bin/nixfmt"},
# },
# ''}
# nix = ${toLuaObject cfg.lsp.options},
# },
# },
# ''}
# }
# '';
};
nixd = {
@ -76,11 +94,7 @@
lspConfig = ''
lspconfig.nixd.setup{
capabilities = capabilities,
${
if cfg.format.enable
then useFormat
else noFormat
},
${if cfg.format.enable then useFormat else noFormat},
cmd = ${packageToCmd cfg.lsp.package "nixd"},
${optionalString cfg.format.enable ''
settings = {
@ -144,23 +158,20 @@
'';
};
};
in {
in
{
options.vim.languages.nix = {
enable = mkEnableOption "Nix language support";
treesitter = {
enable =
mkEnableOption "Nix treesitter"
// {
enable = mkEnableOption "Nix treesitter" // {
default = config.vim.languages.enableTreesitter;
};
package = mkGrammarOption pkgs "nix";
};
lsp = {
enable =
mkEnableOption "Nix LSP support"
// {
enable = mkEnableOption "Nix LSP support" // {
default = config.vim.lsp.enable;
};
server = mkOption {
@ -184,9 +195,7 @@ in {
};
format = {
enable =
mkEnableOption "Nix formatting"
// {
enable = mkEnableOption "Nix formatting" // {
default = config.vim.languages.enableFormat;
};
@ -204,9 +213,7 @@ in {
};
extraDiagnostics = {
enable =
mkEnableOption "extra Nix diagnostics"
// {
enable = mkEnableOption "extra Nix diagnostics" // {
default = config.vim.languages.enableExtraDiagnostics;
};
@ -265,8 +272,7 @@ in {
linters = mkMerge (
map (name: {
${name}.cmd = getExe diagnosticsProviders.${name}.package;
})
cfg.extraDiagnostics.types
}) cfg.extraDiagnostics.types
);
};
})