mirror of
https://github.com/NotAShelf/nvf.git
synced 2025-09-06 10:21:31 +00:00
Maybe this is even better and less hacky?
This commit is contained in:
parent
1e6b888949
commit
bfeec99df8
1 changed files with 70 additions and 64 deletions
|
@ -4,16 +4,16 @@
|
||||||
lib,
|
lib,
|
||||||
inputs,
|
inputs,
|
||||||
...
|
...
|
||||||
}: let
|
}:
|
||||||
|
let
|
||||||
inherit (builtins) attrNames;
|
inherit (builtins) attrNames;
|
||||||
inherit (lib) concatStringsSep;
|
inherit (lib) concatStringsSep mkLuaInline;
|
||||||
inherit (lib.meta) getExe;
|
inherit (lib.meta) getExe;
|
||||||
inherit (lib.options) mkEnableOption mkOption;
|
inherit (lib.options) mkEnableOption mkOption;
|
||||||
inherit (lib.modules) mkIf mkMerge;
|
inherit (lib.modules) mkIf mkMerge;
|
||||||
inherit (lib.lists) isList;
|
inherit (lib.lists) isList;
|
||||||
inherit (lib.strings) optionalString;
|
inherit (lib.strings) optionalString;
|
||||||
inherit
|
inherit (lib.types)
|
||||||
(lib.types)
|
|
||||||
anything
|
anything
|
||||||
attrsOf
|
attrsOf
|
||||||
enum
|
enum
|
||||||
|
@ -32,42 +32,60 @@
|
||||||
noFormat = "on_attach = attach_keymaps";
|
noFormat = "on_attach = attach_keymaps";
|
||||||
|
|
||||||
defaultServer = "nil";
|
defaultServer = "nil";
|
||||||
packageToCmd = package: defaultCmd:
|
packageToCmd =
|
||||||
if isList package
|
package: defaultCmd:
|
||||||
then expToLua package
|
if isList package then expToLua package else ''{"${package}/bin/${defaultCmd}"}'';
|
||||||
else ''{"${package}/bin/${defaultCmd}"}'';
|
|
||||||
servers = {
|
servers = {
|
||||||
nil = {
|
nil = {
|
||||||
package = inputs.nil.packages.${pkgs.stdenv.system}.nil;
|
package = inputs.nil.packages.${pkgs.stdenv.system}.nil;
|
||||||
internalFormatter = true;
|
internalFormatter = true;
|
||||||
lspConfig = ''
|
lspConfig = ''lspconfig.nil_ls.setup ${
|
||||||
lspconfig.nil_ls.setup{
|
toLuaObject {
|
||||||
capabilities = capabilities,
|
capabilities = mkLuaInline "capabilities";
|
||||||
${
|
on_attach = if cfg.format.enable then mkLuaInline "default_on_attach" else "attach_keymaps";
|
||||||
if cfg.format.enable
|
cmd = packageToCmd cfg.lsp.package "nil";
|
||||||
then useFormat
|
|
||||||
else noFormat
|
|
||||||
},
|
|
||||||
cmd = ${packageToCmd cfg.lsp.package "nil"},
|
|
||||||
${optionalString cfg.format.enable ''
|
|
||||||
settings = {
|
settings = {
|
||||||
["nil"] = {
|
nil.formatting.command =
|
||||||
${optionalString (cfg.format.type == "alejandra") ''
|
if cfg.format.enable then
|
||||||
formatting = {
|
if cfg.format.type == "alejandra" then
|
||||||
command = {"${cfg.format.package}/bin/alejandra", "--quiet"},
|
''{"${cfg.format.package}/bin/alejandra", "--quiet"}''
|
||||||
},
|
else if cfg.format.type == "nixfmt" then
|
||||||
''}
|
''{"${cfg.format.package}/bin/nixfmt"}''
|
||||||
${optionalString (cfg.format.type == "nixfmt") ''
|
else
|
||||||
formatting = {
|
null
|
||||||
command = {"${cfg.format.package}/bin/nixfmt"},
|
else
|
||||||
},
|
null;
|
||||||
''}
|
} // config.lsp.options;
|
||||||
nix = ${toLuaObject cfg.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 = {
|
nixd = {
|
||||||
|
@ -76,11 +94,7 @@
|
||||||
lspConfig = ''
|
lspConfig = ''
|
||||||
lspconfig.nixd.setup{
|
lspconfig.nixd.setup{
|
||||||
capabilities = capabilities,
|
capabilities = capabilities,
|
||||||
${
|
${if cfg.format.enable then useFormat else noFormat},
|
||||||
if cfg.format.enable
|
|
||||||
then useFormat
|
|
||||||
else noFormat
|
|
||||||
},
|
|
||||||
cmd = ${packageToCmd cfg.lsp.package "nixd"},
|
cmd = ${packageToCmd cfg.lsp.package "nixd"},
|
||||||
${optionalString cfg.format.enable ''
|
${optionalString cfg.format.enable ''
|
||||||
settings = {
|
settings = {
|
||||||
|
@ -144,25 +158,22 @@
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
options.vim.languages.nix = {
|
options.vim.languages.nix = {
|
||||||
enable = mkEnableOption "Nix language support";
|
enable = mkEnableOption "Nix language support";
|
||||||
|
|
||||||
treesitter = {
|
treesitter = {
|
||||||
enable =
|
enable = mkEnableOption "Nix treesitter" // {
|
||||||
mkEnableOption "Nix treesitter"
|
default = config.vim.languages.enableTreesitter;
|
||||||
// {
|
};
|
||||||
default = config.vim.languages.enableTreesitter;
|
|
||||||
};
|
|
||||||
package = mkGrammarOption pkgs "nix";
|
package = mkGrammarOption pkgs "nix";
|
||||||
};
|
};
|
||||||
|
|
||||||
lsp = {
|
lsp = {
|
||||||
enable =
|
enable = mkEnableOption "Nix LSP support" // {
|
||||||
mkEnableOption "Nix LSP support"
|
default = config.vim.lsp.enable;
|
||||||
// {
|
};
|
||||||
default = config.vim.lsp.enable;
|
|
||||||
};
|
|
||||||
server = mkOption {
|
server = mkOption {
|
||||||
description = "Nix LSP server to use";
|
description = "Nix LSP server to use";
|
||||||
type = enum (attrNames servers);
|
type = enum (attrNames servers);
|
||||||
|
@ -184,11 +195,9 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
format = {
|
format = {
|
||||||
enable =
|
enable = mkEnableOption "Nix formatting" // {
|
||||||
mkEnableOption "Nix formatting"
|
default = config.vim.languages.enableFormat;
|
||||||
// {
|
};
|
||||||
default = config.vim.languages.enableFormat;
|
|
||||||
};
|
|
||||||
|
|
||||||
type = mkOption {
|
type = mkOption {
|
||||||
description = "Nix formatter to use";
|
description = "Nix formatter to use";
|
||||||
|
@ -204,11 +213,9 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
extraDiagnostics = {
|
extraDiagnostics = {
|
||||||
enable =
|
enable = mkEnableOption "extra Nix diagnostics" // {
|
||||||
mkEnableOption "extra Nix diagnostics"
|
default = config.vim.languages.enableExtraDiagnostics;
|
||||||
// {
|
};
|
||||||
default = config.vim.languages.enableExtraDiagnostics;
|
|
||||||
};
|
|
||||||
|
|
||||||
types = diagnostics {
|
types = diagnostics {
|
||||||
langDesc = "Nix";
|
langDesc = "Nix";
|
||||||
|
@ -240,7 +247,7 @@ in {
|
||||||
|
|
||||||
(mkIf cfg.treesitter.enable {
|
(mkIf cfg.treesitter.enable {
|
||||||
vim.treesitter.enable = true;
|
vim.treesitter.enable = true;
|
||||||
vim.treesitter.grammars = [cfg.treesitter.package];
|
vim.treesitter.grammars = [ cfg.treesitter.package ];
|
||||||
})
|
})
|
||||||
|
|
||||||
(mkIf cfg.lsp.enable {
|
(mkIf cfg.lsp.enable {
|
||||||
|
@ -251,7 +258,7 @@ in {
|
||||||
(mkIf (cfg.format.enable && (!cfg.lsp.enable || !servers.${cfg.lsp.server}.internalFormatter)) {
|
(mkIf (cfg.format.enable && (!cfg.lsp.enable || !servers.${cfg.lsp.server}.internalFormatter)) {
|
||||||
vim.formatter.conform-nvim = {
|
vim.formatter.conform-nvim = {
|
||||||
enable = true;
|
enable = true;
|
||||||
setupOpts.formatters_by_ft.nix = [cfg.format.type];
|
setupOpts.formatters_by_ft.nix = [ cfg.format.type ];
|
||||||
setupOpts.formatters.${cfg.format.type} = {
|
setupOpts.formatters.${cfg.format.type} = {
|
||||||
command = getExe cfg.format.package;
|
command = getExe cfg.format.package;
|
||||||
};
|
};
|
||||||
|
@ -265,8 +272,7 @@ in {
|
||||||
linters = mkMerge (
|
linters = mkMerge (
|
||||||
map (name: {
|
map (name: {
|
||||||
${name}.cmd = getExe diagnosticsProviders.${name}.package;
|
${name}.cmd = getExe diagnosticsProviders.${name}.package;
|
||||||
})
|
}) cfg.extraDiagnostics.types
|
||||||
cfg.extraDiagnostics.types
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue