diagnostics/presets: init

This commit is contained in:
Snoweuph 2026-05-11 23:25:02 +02:00
commit 0735ee8cfd
No known key found for this signature in database
GPG key ID: BEFC41DA223CEC55
49 changed files with 892 additions and 575 deletions

View file

@ -297,6 +297,9 @@
- Add `emmet-ls` to the supported LSPs for all languages it supports. - Add `emmet-ls` to the supported LSPs for all languages it supports.
- Moved extra diagnostic modules under `diagnostics.presets.<name>` this will
allow for more flexibility in the future for nvf.
- Added {option}`vim.treesitter.queries` to support adding custom queries. - Added {option}`vim.treesitter.queries` to support adding custom queries.
- Added injections for `query = '' ... ''` as `query` and `mkLualine '' ... ''`, - Added injections for `query = '' ... ''` as `query` and `mkLualine '' ... ''`,

View file

@ -6,11 +6,13 @@
typesPlugin = import ./plugins.nix {inherit lib self;}; typesPlugin = import ./plugins.nix {inherit lib self;};
typesLanguage = import ./languages.nix {inherit lib;}; typesLanguage = import ./languages.nix {inherit lib;};
typesLsp = import ./lsp.nix {inherit lib;}; typesLsp = import ./lsp.nix {inherit lib;};
typesDiagnostics = import ./diagnostics.nix {inherit lib;};
customTypes = import ./custom.nix {inherit lib;}; customTypes = import ./custom.nix {inherit lib;};
in { in {
inherit (typesDag) dagOf; inherit (typesDag) dagOf;
inherit (typesPlugin) pluginsOpt extraPluginType mkPluginSetupOption luaInline pluginType borderType; inherit (typesPlugin) pluginsOpt extraPluginType mkPluginSetupOption luaInline pluginType borderType;
inherit (typesLanguage) diagnostics mkGrammarOption mkTreesitterGrammarOption; inherit (typesLanguage) mkGrammarOption mkTreesitterGrammarOption;
inherit (typesLsp) mkLspPresetEnableOption; inherit (typesLsp) mkLspPresetEnableOption;
inherit (typesDiagnostics) mkDiagnosticsPresetEnableOption;
inherit (customTypes) char hexColor mergelessListOf deprecatedSingleOrListOf enumWithRename; inherit (customTypes) char hexColor mergelessListOf deprecatedSingleOrListOf enumWithRename;
} }

11
lib/types/diagnostics.nix Normal file
View file

@ -0,0 +1,11 @@
{lib}: let
inherit (lib.options) mkEnableOption;
mkDiagnosticsPresetEnableOption = option: display:
mkEnableOption ''
the ${display} Diagnostics Provider.
Use {option}`vim.diagnostics.nvim-lint.linters.${option}` for customization
'';
in {
inherit mkDiagnosticsPresetEnableOption;
}

View file

@ -1,32 +1,5 @@
{lib}: let {lib}: let
inherit (lib.options) mkOption mkPackageOption; inherit (lib.options) mkPackageOption;
inherit (lib.attrsets) attrNames;
inherit (lib.types) listOf either enum submodule package;
diagnosticSubmodule = _: {
options = {
type = mkOption {
description = "Type of diagnostic to enable";
type = attrNames diagnostics;
};
package = mkOption {
type = package;
description = "Diagnostics package";
};
};
};
diagnostics = {
langDesc,
diagnosticsProviders,
defaultDiagnosticsProvider,
}:
mkOption {
type = listOf (either (enum (attrNames diagnosticsProviders)) (submodule diagnosticSubmodule));
default = defaultDiagnosticsProvider;
description = "List of ${langDesc} diagnostics to enable";
};
mkGrammarOption = pkgs: grammar: mkGrammarOption = pkgs: grammar:
mkPackageOption pkgs ["${grammar} treesitter"] { mkPackageOption pkgs ["${grammar} treesitter"] {
@ -45,5 +18,5 @@
nullable = true; nullable = true;
}; };
in { in {
inherit diagnostics diagnosticSubmodule mkGrammarOption mkTreesitterGrammarOption; inherit mkGrammarOption mkTreesitterGrammarOption;
} }

View file

@ -1,3 +1,6 @@
{ {
imports = [./nvim-lint]; imports = [
./nvim-lint
./presets
];
} }

View file

@ -0,0 +1,20 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.biomejs;
in {
options.vim.diagnostics.presets.biomejs = {
enable = mkDiagnosticsPresetEnableOption "biomejs" "Biome";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.biomejs.cmd = getExe pkgs.biome;
};
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.checkmake;
in {
options.vim.diagnostics.presets.checkmake = {
enable = mkDiagnosticsPresetEnableOption "checkmake" "Checkmake";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.checkmake.cmd = getExe pkgs.checkmake;
};
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.deadnix;
in {
options.vim.diagnostics.presets.deadnix = {
enable = mkDiagnosticsPresetEnableOption "deadnix" "Deadnix";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.deadnix.cmd = getExe pkgs.deadnix;
};
}

View file

@ -0,0 +1,27 @@
{
imports = [
./biomejs.nix
./checkmake.nix
./deadnix.nix
./djlint.nix
./dotenv-linter.nix
./eslint_d.nix
./golangci-lint.nix
./hadolint.nix
./htmlhint.nix
./ktlint.nix
./luacheck.nix
./markdownlint-cli2.nix
./mypy.nix
./rubocop.nix
./rumdl.nix
./selene.nix
./shellcheck.nix
./sqlfluff.nix
./sqruff.nix
./statix.nix
./stylelint.nix
./taplo.nix
./tombi.nix
];
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.djlint;
in {
options.vim.diagnostics.presets.djlint = {
enable = mkDiagnosticsPresetEnableOption "djlint" "djLint";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.djlint.cmd = getExe pkgs.djlint;
};
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.dotenv-linter;
in {
options.vim.diagnostics.presets.dotenv-linter = {
enable = mkDiagnosticsPresetEnableOption "dotenv-linter" "Dotenv Linter";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.dotenv-linter.cmd = getExe pkgs.dotenv-linter;
};
}

View file

@ -0,0 +1,30 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.eslint_d;
in {
options.vim.diagnostics.presets.eslint_d = {
enable = mkDiagnosticsPresetEnableOption "eslint_d" "Eslint Daemon";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.eslint_d = {
cmd = getExe pkgs.eslint_d;
required_files = [
"eslint.config.js"
"eslint.config.mjs"
".eslintrc"
".eslintrc.json"
".eslintrc.js"
".eslintrc.yml"
];
};
};
}

View file

@ -0,0 +1,96 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.generators) mkLuaInline;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.golangci-lint;
in {
options.vim.diagnostics.presets.golangci-lint = {
enable = mkDiagnosticsPresetEnableOption "golangci-lint" "GolangCI Lint";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.golangci-lint = {
cmd = getExe pkgs.golangci-lint;
args = [
"run"
"--output.json.path=stdout"
"--issues-exit-code=0"
"--show-stats=false"
"--fix=false"
"--path-mode=abs"
# Overwrite values that could be configured and result in unwanted writes
"--output.text.path="
"--output.tab.path="
"--output.html.path="
"--output.checkstyle.path="
"--output.code-climate.path="
"--output.junit-xml.path="
"--output.teamcity.path="
"--output.sarif.path="
];
parser = mkLuaInline ''
function(output, bufnr)
local SOURCE = "golangci-lint";
local function display_tool_error(msg)
return{
{
bufnr = bufnr,
lnum = 0,
col = 0,
message = string.format("[%s] %s", SOURCE, msg),
severity = vim.diagnostic.severity.ERROR,
source = SOURCE,
},
}
end
if output == "" then
return display_tool_error("no output provided")
end
local ok, decoded = pcall(vim.json.decode, output)
if not ok then
return display_tool_error("failed to parse JSON output")
end
if not decoded or not decoded.Issues then
return display_tool_error("unexpected output format")
end
local severity_map = {
error = vim.diagnostic.severity.ERROR,
warning = vim.diagnostic.severity.WARN,
info = vim.diagnostic.severity.INFO,
hint = vim.diagnostic.severity.HINT,
}
local diagnostics = {}
for _, issue in ipairs(decoded.Issues) do
local sev = vim.diagnostic.severity.ERROR
if issue.Severity and issue.Severity ~= "" then
local normalized = issue.Severity:lower()
sev = severity_map[normalized] or vim.diagnostic.severity.ERROR
end
table.insert(diagnostics, {
bufnr = bufnr,
lnum = issue.Pos.Line - 1,
col = issue.Pos.Column - 1,
message = issue.Text,
code = issue.FromLinter,
severity = sev,
source = SOURCE,
})
end
return diagnostics
end
'';
};
};
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.hadolint;
in {
options.vim.diagnostics.presets.hadolint = {
enable = mkDiagnosticsPresetEnableOption "hadolint" "Hadolint";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.hadolint.cmd = getExe pkgs.hadolint;
};
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.htmlhint;
in {
options.vim.diagnostics.presets.htmlhint = {
enable = mkDiagnosticsPresetEnableOption "htmlhint" "HTMLHint";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.htmlhint.cmd = getExe pkgs.htmlhint;
};
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.ktlint;
in {
options.vim.diagnostics.presets.ktlint = {
enable = mkDiagnosticsPresetEnableOption "ktlint" "ktlint";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.ktlint.cmd = getExe pkgs.ktlint;
};
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.luacheck;
in {
options.vim.diagnostics.presets.luacheck = {
enable = mkDiagnosticsPresetEnableOption "luacheck" "Luacheck";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.luacheck.cmd = getExe pkgs.luajitPackages.luacheck;
};
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.markdownlint-cli2;
in {
options.vim.diagnostics.presets.markdownlint-cli2 = {
enable = mkDiagnosticsPresetEnableOption "markdownlint-cli2" "Markdownlint CLI 2";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.markdownlint-cli2.cmd = getExe pkgs.markdownlint-cli2;
};
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe';
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.mypy;
in {
options.vim.diagnostics.presets.mypy = {
enable = mkDiagnosticsPresetEnableOption "mypy" "Mypy";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.mypy.cmd = getExe' pkgs.mypy "mypy";
};
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.rubocop;
in {
options.vim.diagnostics.presets.rubocop = {
enable = mkDiagnosticsPresetEnableOption "rubocop" "RuboCop";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.rubocop.cmd = getExe pkgs.rubyPackages.rubocop;
};
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.rumdl;
in {
options.vim.diagnostics.presets.rumdl = {
enable = mkDiagnosticsPresetEnableOption "rumdl" "Rumdl";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.rumdl.cmd = getExe pkgs.rumdl;
};
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.selene;
in {
options.vim.diagnostics.presets.selene = {
enable = mkDiagnosticsPresetEnableOption "selene" "Selene";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.selene.cmd = getExe pkgs.selene;
};
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.shellcheck;
in {
options.vim.diagnostics.presets.shellcheck = {
enable = mkDiagnosticsPresetEnableOption "shellcheck" "Shellcheck";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.shellcheck.cmd = getExe pkgs.shellcheck;
};
}

View file

@ -0,0 +1,31 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.options) mkOption;
inherit (lib.types) str;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.sqlfluff;
in {
options.vim.diagnostics.presets.sqlfluff = {
enable = mkDiagnosticsPresetEnableOption "sqlfluff" "SQLFluff";
dialect = mkOption {
type = str;
default = "ansi";
description = "SQL dialect to use for sqlfluff diagnostics";
};
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.sqlfluff = {
cmd = getExe pkgs.sqlfluff;
args = ["lint" "--format=json" "--dialect=${cfg.dialect}"];
};
};
}

View file

@ -0,0 +1,31 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.options) mkOption;
inherit (lib.types) str;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.sqruff;
in {
options.vim.diagnostics.presets.sqruff = {
enable = mkDiagnosticsPresetEnableOption "sqruff" "Sqruff";
dialect = mkOption {
type = str;
default = "ansi";
description = "SQL dialect to use for sqruff diagnostics";
};
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.sqruff = {
cmd = getExe pkgs.sqruff;
args = ["lint" "--format=json" "--dialect=${cfg.dialect}" "-"];
};
};
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.statix;
in {
options.vim.diagnostics.presets.statix = {
enable = mkDiagnosticsPresetEnableOption "statix" "Statix";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.statix.cmd = getExe pkgs.statix;
};
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.stylelint;
in {
options.vim.diagnostics.presets.stylelint = {
enable = mkDiagnosticsPresetEnableOption "stylelint" "Stylelint";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.stylelint.cmd = getExe pkgs.stylelint;
};
}

View file

@ -0,0 +1,23 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.taplo;
in {
options.vim.diagnostics.presets.taplo = {
enable = mkDiagnosticsPresetEnableOption "taplo" "Taplo";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.taplo = {
cmd = getExe pkgs.taplo;
args = ["lint"];
};
};
}

View file

@ -0,0 +1,23 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf;
inherit (lib.nvim.types) mkDiagnosticsPresetEnableOption;
cfg = config.vim.diagnostics.presets.tombi;
in {
options.vim.diagnostics.presets.tombi = {
enable = mkDiagnosticsPresetEnableOption "tombi" "Tombi";
};
config = mkIf cfg.enable {
vim.diagnostics.nvim-lint.linters.tombi = {
cmd = getExe pkgs.tombi;
args = ["lint"];
};
};
}

View file

@ -11,7 +11,7 @@
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
inherit (lib.types) enum coercedTo listOf; inherit (lib.types) enum coercedTo listOf;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
inherit (lib.nvim.types) mkGrammarOption diagnostics deprecatedSingleOrListOf enumWithRename; inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf enumWithRename;
inherit (lib) genAttrs; inherit (lib) genAttrs;
cfg = config.vim.languages.astro; cfg = config.vim.languages.astro;
@ -35,24 +35,7 @@
}; };
defaultDiagnosticsProvider = ["eslint_d"]; defaultDiagnosticsProvider = ["eslint_d"];
diagnosticsProviders = { diagnosticsProviders = ["eslint_d"];
eslint_d = let
pkg = pkgs.eslint_d;
in {
package = pkg;
config = {
cmd = getExe pkg;
required_files = [
"eslint.config.js"
"eslint.config.mjs"
".eslintrc"
".eslintrc.json"
".eslintrc.js"
".eslintrc.yml"
];
};
};
};
formatType = formatType =
deprecatedSingleOrListOf deprecatedSingleOrListOf
@ -119,10 +102,10 @@ in {
defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics"; defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics";
}; };
types = diagnostics { types = mkOption {
langDesc = "Astro"; type = listOf (enum diagnosticsProviders);
inherit diagnosticsProviders; default = defaultDiagnosticsProvider;
inherit defaultDiagnosticsProvider; description = "extra Astro diagnostics providers";
}; };
}; };
}; };
@ -158,12 +141,12 @@ in {
}) })
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;});
linters_by_ft.astro = cfg.extraDiagnostics.types; nvim-lint = {
linters = enable = true;
mkMerge (map (name: {${name} = diagnosticsProviders.${name}.config;}) linters_by_ft.astro = cfg.extraDiagnostics.types;
cfg.extraDiagnostics.types); };
}; };
}) })
]); ]);

View file

@ -10,7 +10,7 @@
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.types) enum bool listOf; inherit (lib.types) enum bool listOf;
inherit (lib) genAttrs; inherit (lib) genAttrs;
inherit (lib.nvim.types) diagnostics mkGrammarOption deprecatedSingleOrListOf enumWithRename; inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf enumWithRename;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
cfg = config.vim.languages.bash; cfg = config.vim.languages.bash;
@ -26,11 +26,7 @@
}; };
defaultDiagnosticsProvider = ["shellcheck"]; defaultDiagnosticsProvider = ["shellcheck"];
diagnosticsProviders = { diagnosticsProviders = ["shellcheck"];
shellcheck = {
package = pkgs.shellcheck;
};
};
in { in {
options.vim.languages.bash = { options.vim.languages.bash = {
enable = mkEnableOption "Bash language support"; enable = mkEnableOption "Bash language support";
@ -80,15 +76,16 @@ in {
extraDiagnostics = { extraDiagnostics = {
enable = enable =
mkEnableOption "extra Bash diagnostics" mkEnableOption "extra Shell diagnostics"
// { // {
default = config.vim.languages.enableExtraDiagnostics; default = config.vim.languages.enableExtraDiagnostics;
defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics"; defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics";
}; };
types = diagnostics {
langDesc = "Bash"; types = mkOption {
inherit diagnosticsProviders; type = listOf (enum diagnosticsProviders);
inherit defaultDiagnosticsProvider; default = defaultDiagnosticsProvider;
description = "extra Shell diagnostics providers";
}; };
}; };
}; };
@ -128,13 +125,16 @@ in {
}) })
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;});
linters_by_ft.sh = cfg.extraDiagnostics.types; nvim-lint = {
linters = mkMerge (map (name: { enable = true;
${name}.cmd = getExe diagnosticsProviders.${name}.package; linters_by_ft = {
}) sh = cfg.extraDiagnostics.types;
cfg.extraDiagnostics.types); bash = cfg.extraDiagnostics.types;
zsh = cfg.extraDiagnostics.types;
};
};
}; };
}) })
]); ]);

View file

@ -4,13 +4,12 @@
lib, lib,
... ...
}: let }: let
inherit (builtins) attrNames; inherit (lib.attrsets) attrNames genAttrs;
inherit (lib) genAttrs;
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
inherit (lib.options) mkEnableOption mkOption literalExpression; inherit (lib.options) mkEnableOption mkOption literalExpression;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.types) enum listOf; inherit (lib.types) enum listOf;
inherit (lib.nvim.types) mkGrammarOption diagnostics; inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
cfg = config.vim.languages.docker; cfg = config.vim.languages.docker;
@ -26,17 +25,7 @@
}; };
defaultDiagnosticsProvider = ["hadolint"]; defaultDiagnosticsProvider = ["hadolint"];
diagnosticsProviders = { diagnosticsProviders = ["hadolint"];
hadolint = {
config.cmd = getExe (
pkgs.writeShellApplication {
name = "hadolint";
runtimeInputs = [pkgs.hadolint];
text = "hadolint -";
}
);
};
};
in { in {
options.vim.languages.docker = { options.vim.languages.docker = {
enable = mkEnableOption "Docker language support"; enable = mkEnableOption "Docker language support";
@ -81,15 +70,16 @@ in {
extraDiagnostics = { extraDiagnostics = {
enable = enable =
mkEnableOption "extra Dockerfile diagnostics" mkEnableOption "extra Docker diagnostics"
// { // {
default = config.vim.languages.enableExtraDiagnostics; default = config.vim.languages.enableExtraDiagnostics;
defaultText = literalExpression "config.vim.languages.enableExtraDiagnostic";
}; };
types = diagnostics { types = mkOption {
langDesc = "Dockerfile"; type = listOf (enum diagnosticsProviders);
inherit diagnosticsProviders; default = defaultDiagnosticsProvider;
inherit defaultDiagnosticsProvider; description = "extra Docker diagnostics providers";
}; };
}; };
}; };
@ -148,15 +138,12 @@ in {
}) })
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;});
linters_by_ft.dockerfile = cfg.extraDiagnostics.types; nvim-lint = {
linters = mkMerge ( enable = true;
map (name: { linters_by_ft.dockerfile = cfg.extraDiagnostics.types;
${name} = diagnosticsProviders.${name}.config; };
})
cfg.extraDiagnostics.types
);
}; };
}) })
]); ]);

View file

@ -1,27 +1,17 @@
{ {
config, config,
pkgs,
lib, lib,
... ...
}: let }: let
inherit (lib.options) mkEnableOption literalExpression; inherit (lib.options) mkEnableOption literalExpression mkOption;
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.nvim.types) diagnostics; inherit (lib.attrsets) genAttrs;
inherit (lib.types) enum listOf;
cfg = config.vim.languages.env; cfg = config.vim.languages.env;
defaultDiagnosticsProvider = ["dotenv-linter"]; defaultDiagnosticsProvider = ["dotenv-linter"];
diagnosticsProviders = { diagnosticsProviders = ["dotenv-linter"];
dotenv-linter = let
pkg = pkgs.dotenv-linter;
in {
package = pkg;
config = {
cmd = getExe pkg;
};
};
};
in { in {
options.vim.languages.env = { options.vim.languages.env = {
enable = mkEnableOption "Env language support"; enable = mkEnableOption "Env language support";
@ -31,12 +21,13 @@ in {
mkEnableOption "extra Env diagnostics" mkEnableOption "extra Env diagnostics"
// { // {
default = config.vim.languages.enableExtraDiagnostics; default = config.vim.languages.enableExtraDiagnostics;
defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics"; defaultText = literalExpression "config.vim.languages.enableExtraDiagnostic";
}; };
types = diagnostics {
langDesc = "Env"; types = mkOption {
inherit diagnosticsProviders; type = listOf (enum diagnosticsProviders);
inherit defaultDiagnosticsProvider; default = defaultDiagnosticsProvider;
description = "extra Env diagnostics providers";
}; };
}; };
}; };
@ -58,12 +49,12 @@ in {
} }
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;});
linters_by_ft.env = cfg.extraDiagnostics.types; nvim-lint = {
linters = enable = true;
mkMerge (map (name: {${name} = diagnosticsProviders.${name}.config;}) linters_by_ft.env = cfg.extraDiagnostics.types;
cfg.extraDiagnostics.types); };
}; };
}) })
]); ]);

View file

@ -10,9 +10,8 @@
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
inherit (lib) genAttrs; inherit (lib) genAttrs;
inherit (lib.generators) mkLuaInline;
inherit (lib.types) enum package str listOf; inherit (lib.types) enum package str listOf;
inherit (lib.nvim.types) mkGrammarOption diagnostics deprecatedSingleOrListOf mkPluginSetupOption; inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf mkPluginSetupOption;
inherit (lib.nvim.dag) entryAfter; inherit (lib.nvim.dag) entryAfter;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
@ -44,89 +43,7 @@
}; };
defaultDiagnosticsProvider = ["golangci-lint"]; defaultDiagnosticsProvider = ["golangci-lint"];
diagnosticsProviders = { diagnosticsProviders = ["golangci-lint"];
golangci-lint = let
pkg = pkgs.golangci-lint;
in {
package = pkg;
config = {
cmd = getExe pkg;
args = [
"run"
"--output.json.path=stdout"
"--issues-exit-code=0"
"--show-stats=false"
"--fix=false"
"--path-mode=abs"
# Overwrite values that could be configured and result in unwanted writes
"--output.text.path="
"--output.tab.path="
"--output.html.path="
"--output.checkstyle.path="
"--output.code-climate.path="
"--output.junit-xml.path="
"--output.teamcity.path="
"--output.sarif.path="
];
parser = mkLuaInline ''
function(output, bufnr)
local SOURCE = "golangci-lint";
local function display_tool_error(msg)
return{
{
bufnr = bufnr,
lnum = 0,
col = 0,
message = string.format("[%s] %s", SOURCE, msg),
severity = vim.diagnostic.severity.ERROR,
source = SOURCE,
},
}
end
if output == "" then
return display_tool_error("no output provided")
end
local ok, decoded = pcall(vim.json.decode, output)
if not ok then
return display_tool_error("failed to parse JSON output")
end
if not decoded or not decoded.Issues then
return display_tool_error("unexpected output format")
end
local severity_map = {
error = vim.diagnostic.severity.ERROR,
warning = vim.diagnostic.severity.WARN,
info = vim.diagnostic.severity.INFO,
hint = vim.diagnostic.severity.HINT,
}
local diagnostics = {}
for _, issue in ipairs(decoded.Issues) do
local sev = vim.diagnostic.severity.ERROR
if issue.Severity and issue.Severity ~= "" then
local normalized = issue.Severity:lower()
sev = severity_map[normalized] or vim.diagnostic.severity.ERROR
end
table.insert(diagnostics, {
bufnr = bufnr,
lnum = issue.Pos.Line - 1,
col = issue.Pos.Column - 1,
message = issue.Text,
code = issue.FromLinter,
severity = sev,
source = SOURCE,
})
end
return diagnostics
end
'';
};
};
};
in { in {
options.vim.languages.go = { options.vim.languages.go = {
enable = mkEnableOption "Go language support"; enable = mkEnableOption "Go language support";
@ -214,10 +131,10 @@ in {
defaultText = literalExpression "config.vim.languages.enableExtraDiagnostic"; defaultText = literalExpression "config.vim.languages.enableExtraDiagnostic";
}; };
types = diagnostics { types = mkOption {
langDesc = "Go"; type = listOf (enum diagnosticsProviders);
inherit diagnosticsProviders; default = defaultDiagnosticsProvider;
inherit defaultDiagnosticsProvider; description = "extra Go diagnostics providers";
}; };
}; };
@ -339,12 +256,12 @@ in {
}) })
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;});
linters_by_ft.go = cfg.extraDiagnostics.types; nvim-lint = {
linters = enable = true;
mkMerge (map (name: {${name} = diagnosticsProviders.${name}.config;}) linters_by_ft.go = cfg.extraDiagnostics.types;
cfg.extraDiagnostics.types); };
}; };
}) })

View file

@ -5,13 +5,12 @@
... ...
}: let }: let
inherit (builtins) attrNames; inherit (builtins) attrNames;
inherit (lib.meta) getExe;
inherit (lib.options) literalExpression mkEnableOption mkOption; inherit (lib.options) literalExpression mkEnableOption mkOption;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.types) bool enum listOf; inherit (lib.types) bool enum listOf;
inherit (lib) genAttrs; inherit (lib) genAttrs;
inherit (lib.lists) optional; inherit (lib.lists) optional;
inherit (lib.nvim.types) mkGrammarOption diagnostics deprecatedSingleOrListOf; inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf;
inherit (lib.nvim.dag) entryAnywhere; inherit (lib.nvim.dag) entryAnywhere;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
@ -29,11 +28,7 @@
}; };
defaultDiagnosticsProvider = ["htmlhint"]; defaultDiagnosticsProvider = ["htmlhint"];
diagnosticsProviders = { diagnosticsProviders = ["htmlhint"];
htmlhint = {
config.cmd = getExe pkgs.htmlhint;
};
};
in { in {
options.vim.languages.html = { options.vim.languages.html = {
enable = mkEnableOption "HTML language support"; enable = mkEnableOption "HTML language support";
@ -89,10 +84,10 @@ in {
defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics"; defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics";
}; };
types = diagnostics { types = mkOption {
langDesc = "HTML"; type = listOf (enum diagnosticsProviders);
inherit diagnosticsProviders; default = defaultDiagnosticsProvider;
inherit defaultDiagnosticsProvider; description = "extra HTML diagnostics providers";
}; };
}; };
}; };
@ -138,13 +133,12 @@ in {
}) })
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;});
linters_by_ft.html = cfg.extraDiagnostics.types; nvim-lint = {
linters = mkMerge (map (name: { enable = true;
${name} = diagnosticsProviders.${name}.config; linters_by_ft.html = cfg.extraDiagnostics.types;
}) };
cfg.extraDiagnostics.types);
}; };
}) })
]); ]);

View file

@ -6,11 +6,9 @@
}: let }: let
inherit (lib.options) literalExpression mkEnableOption mkOption; inherit (lib.options) literalExpression mkEnableOption mkOption;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.meta) getExe;
inherit (lib) genAttrs; inherit (lib) genAttrs;
inherit (lib.types) enum listOf; inherit (lib.types) enum listOf;
inherit (lib.nvim.types) mkGrammarOption diagnostics; inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.attrsets) mapListToAttrs;
cfg = config.vim.languages.kotlin; cfg = config.vim.languages.kotlin;
@ -18,11 +16,7 @@
servers = ["kotlin-language-server"]; servers = ["kotlin-language-server"];
defaultDiagnosticsProvider = ["ktlint"]; defaultDiagnosticsProvider = ["ktlint"];
diagnosticsProviders = { diagnosticsProviders = ["ktlint"];
ktlint = {
package = pkgs.ktlint;
};
};
in { in {
options.vim.languages.kotlin = { options.vim.languages.kotlin = {
enable = mkEnableOption "Kotlin/HCL support"; enable = mkEnableOption "Kotlin/HCL support";
@ -59,10 +53,10 @@ in {
defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics"; defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics";
}; };
types = diagnostics { types = mkOption {
langDesc = "Kotlin"; type = listOf (enum diagnosticsProviders);
inherit diagnosticsProviders; default = defaultDiagnosticsProvider;
inherit defaultDiagnosticsProvider; description = "extra Kotlin diagnostics providers";
}; };
}; };
}; };
@ -73,13 +67,12 @@ in {
}) })
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;});
linters_by_ft.kotlin = cfg.extraDiagnostics.types; nvim-lint = {
linters = mkMerge (map (name: { enable = true;
${name}.cmd = getExe diagnosticsProviders.${name}.package; linters_by_ft.kotlin = cfg.extraDiagnostics.types;
}) };
cfg.extraDiagnostics.types);
}; };
}) })

View file

@ -10,7 +10,7 @@
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
inherit (lib) genAttrs; inherit (lib) genAttrs;
inherit (lib.types) bool enum listOf; inherit (lib.types) bool enum listOf;
inherit (lib.nvim.types) diagnostics mkGrammarOption; inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.dag) entryBefore; inherit (lib.nvim.dag) entryBefore;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
@ -27,14 +27,7 @@
}; };
defaultDiagnosticsProvider = ["luacheck"]; defaultDiagnosticsProvider = ["luacheck"];
diagnosticsProviders = { diagnosticsProviders = ["luacheck" "selene"];
luacheck = {
package = pkgs.luajitPackages.luacheck;
};
selene = {
package = pkgs.selene;
};
};
in { in {
imports = [ imports = [
(lib.mkRemovedOptionModule ["vim" "languages" "lua" "lsp" "neodev"] '' (lib.mkRemovedOptionModule ["vim" "languages" "lua" "lsp" "neodev"] ''
@ -91,10 +84,10 @@ in {
default = config.vim.languages.enableExtraDiagnostics; default = config.vim.languages.enableExtraDiagnostics;
defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics"; defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics";
}; };
types = diagnostics { types = mkOption {
langDesc = "Lua"; type = listOf (enum diagnosticsProviders);
inherit diagnosticsProviders; default = defaultDiagnosticsProvider;
inherit defaultDiagnosticsProvider; description = "extra Lua diagnostics providers";
}; };
}; };
}; };
@ -143,13 +136,12 @@ in {
}) })
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;});
linters_by_ft.lua = cfg.extraDiagnostics.types; nvim-lint = {
linters = mkMerge (map (name: { enable = true;
${name}.cmd = getExe diagnosticsProviders.${name}.package; linters_by_ft.lua = cfg.extraDiagnostics.types;
}) };
cfg.extraDiagnostics.types);
}; };
}) })
])) ]))

View file

@ -6,10 +6,10 @@
}: let }: let
inherit (builtins) attrNames; inherit (builtins) attrNames;
inherit (lib.options) literalExpression mkEnableOption mkOption; inherit (lib.options) literalExpression mkEnableOption mkOption;
inherit (lib.meta) getExe;
inherit (lib.types) listOf enum; inherit (lib.types) listOf enum;
inherit (lib) genAttrs;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.nvim.types) mkGrammarOption diagnostics; inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
cfg = config.vim.languages.make; cfg = config.vim.languages.make;
@ -22,13 +22,7 @@
}; };
defaultDiagnosticsProvider = ["checkmake"]; defaultDiagnosticsProvider = ["checkmake"];
diagnosticsProviders = { diagnosticsProviders = ["checkmake"];
checkmake = {
config = {
cmd = getExe pkgs.checkmake;
};
};
};
in { in {
options.vim.languages.make = { options.vim.languages.make = {
enable = mkEnableOption "Make support"; enable = mkEnableOption "Make support";
@ -64,10 +58,10 @@ in {
default = config.vim.languages.enableExtraDiagnostics; default = config.vim.languages.enableExtraDiagnostics;
defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics"; defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics";
}; };
types = diagnostics { types = mkOption {
langDesc = "Make"; type = listOf (enum diagnosticsProviders);
inherit diagnosticsProviders; default = defaultDiagnosticsProvider;
inherit defaultDiagnosticsProvider; description = "extra Make diagnostics providers";
}; };
}; };
}; };
@ -96,12 +90,12 @@ in {
}) })
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;});
linters_by_ft.make = cfg.extraDiagnostics.types; nvim-lint = {
linters = enable = true;
mkMerge (map (name: {${name} = diagnosticsProviders.${name}.config;}) linters_by_ft.make = cfg.extraDiagnostics.types;
cfg.extraDiagnostics.types); };
}; };
}) })
]); ]);

View file

@ -11,7 +11,7 @@
inherit (lib.options) literalExpression mkEnableOption mkOption; inherit (lib.options) literalExpression mkEnableOption mkOption;
inherit (lib.types) bool enum listOf str nullOr; inherit (lib.types) bool enum listOf str nullOr;
inherit (lib.nvim.lua) toLuaObject; inherit (lib.nvim.lua) toLuaObject;
inherit (lib.nvim.types) diagnostics mkGrammarOption mkPluginSetupOption deprecatedSingleOrListOf; inherit (lib.nvim.types) mkGrammarOption mkPluginSetupOption deprecatedSingleOrListOf;
inherit (lib.nvim.dag) entryAnywhere; inherit (lib.nvim.dag) entryAnywhere;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
inherit (lib.trivial) warn; inherit (lib.trivial) warn;
@ -46,14 +46,7 @@
}; };
}; };
defaultDiagnosticsProvider = ["markdownlint-cli2"]; defaultDiagnosticsProvider = ["markdownlint-cli2"];
diagnosticsProviders = { diagnosticsProviders = ["markdownlint-cli2" "rumdl"];
markdownlint-cli2 = {
package = pkgs.markdownlint-cli2;
};
rumdl = {
package = pkgs.rumdl;
};
};
in { in {
options.vim.languages.markdown = { options.vim.languages.markdown = {
enable = mkEnableOption "Markdown markup language support"; enable = mkEnableOption "Markdown markup language support";
@ -151,10 +144,10 @@ in {
default = config.vim.languages.enableExtraDiagnostics; default = config.vim.languages.enableExtraDiagnostics;
defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics"; defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics";
}; };
types = diagnostics { types = mkOption {
langDesc = "Markdown"; type = listOf (enum diagnosticsProviders);
inherit diagnosticsProviders; default = defaultDiagnosticsProvider;
inherit defaultDiagnosticsProvider; description = "extra Markdown diagnostics providers";
}; };
}; };
}; };
@ -214,13 +207,12 @@ in {
}) })
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;});
linters_by_ft.markdown = cfg.extraDiagnostics.types; nvim-lint = {
linters = mkMerge (map (name: { enable = true;
${name}.cmd = getExe diagnosticsProviders.${name}.package; linters_by_ft.markdown = cfg.extraDiagnostics.types;
}) };
cfg.extraDiagnostics.types);
}; };
}) })
]); ]);

View file

@ -10,7 +10,7 @@
inherit (lib.options) mkEnableOption mkOption literalExpression; inherit (lib.options) mkEnableOption mkOption literalExpression;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.types) enum listOf; inherit (lib.types) enum listOf;
inherit (lib.nvim.types) mkGrammarOption diagnostics deprecatedSingleOrListOf; inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
cfg = config.vim.languages.nix; cfg = config.vim.languages.nix;
@ -30,31 +30,7 @@
}; };
defaultDiagnosticsProvider = ["statix" "deadnix"]; defaultDiagnosticsProvider = ["statix" "deadnix"];
diagnosticsProviders = { diagnosticsProviders = ["statix" "deadnix"];
statix = {
package = pkgs.statix;
nullConfig = pkg: ''
table.insert(
ls_sources,
null_ls.builtins.diagnostics.statix.with({
command = "${pkg}/bin/statix",
})
)
'';
};
deadnix = {
package = pkgs.deadnix;
nullConfig = pkg: ''
table.insert(
ls_sources,
null_ls.builtins.diagnostics.deadnix.with({
command = "${pkg}/bin/deadnix",
})
)
'';
};
};
in { in {
options.vim.languages.nix = { options.vim.languages.nix = {
enable = mkEnableOption "Nix language support"; enable = mkEnableOption "Nix language support";
@ -106,10 +82,10 @@ in {
defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics"; defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics";
}; };
types = diagnostics { types = mkOption {
langDesc = "Nix"; type = listOf (enum diagnosticsProviders);
inherit diagnosticsProviders; default = defaultDiagnosticsProvider;
inherit defaultDiagnosticsProvider; description = "extra Nix diagnostics providers";
}; };
}; };
}; };
@ -220,13 +196,12 @@ in {
}) })
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;});
linters_by_ft.nix = cfg.extraDiagnostics.types; nvim-lint = {
linters = mkMerge (map (name: { enable = true;
${name}.cmd = getExe diagnosticsProviders.${name}.package; linters_by_ft.nix = cfg.extraDiagnostics.types;
}) };
cfg.extraDiagnostics.types);
}; };
}) })
]); ]);

View file

@ -8,11 +8,11 @@
inherit (lib.options) mkEnableOption mkOption literalExpression; inherit (lib.options) mkEnableOption mkOption literalExpression;
inherit (lib.lists) flatten; inherit (lib.lists) flatten;
inherit (lib) genAttrs; inherit (lib) genAttrs;
inherit (lib.meta) getExe getExe'; inherit (lib.meta) getExe;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.types) enum package bool listOf; inherit (lib.types) enum package bool listOf;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
inherit (lib.nvim.types) deprecatedSingleOrListOf diagnostics; inherit (lib.nvim.types) deprecatedSingleOrListOf;
inherit (lib.trivial) warn; inherit (lib.trivial) warn;
cfg = config.vim.languages.python; cfg = config.vim.languages.python;
@ -112,13 +112,7 @@
}; };
}; };
defaultDiagnosticsProvider = ["mypy"]; defaultDiagnosticsProvider = ["mypy"];
diagnosticsProviders = { diagnosticsProviders = ["mypy"];
mypy = {
config = {
cmd = getExe' pkgs.mypy "mypy";
};
};
};
in { in {
options.vim.languages.python = { options.vim.languages.python = {
enable = mkEnableOption "Python language support"; enable = mkEnableOption "Python language support";
@ -200,10 +194,10 @@ in {
default = config.vim.languages.enableExtraDiagnostics; default = config.vim.languages.enableExtraDiagnostics;
defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics"; defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics";
}; };
types = diagnostics { types = mkOption {
langDesc = "Python"; type = listOf (enum diagnosticsProviders);
inherit diagnosticsProviders; default = defaultDiagnosticsProvider;
inherit defaultDiagnosticsProvider; description = "extra Python diagnostics providers";
}; };
}; };
}; };
@ -261,12 +255,12 @@ in {
}) })
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;});
linters_by_ft.python = cfg.extraDiagnostics.types; nvim-lint = {
linters = enable = true;
mkMerge (map (name: {${name} = diagnosticsProviders.${name}.config;}) linters_by_ft.python = cfg.extraDiagnostics.types;
cfg.extraDiagnostics.types); };
}; };
}) })
]); ]);

View file

@ -9,7 +9,7 @@
inherit (lib) genAttrs; inherit (lib) genAttrs;
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.nvim.types) mkGrammarOption diagnostics deprecatedSingleOrListOf enumWithRename; inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf enumWithRename;
inherit (lib.types) enum listOf; inherit (lib.types) enum listOf;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
@ -28,11 +28,7 @@
}; };
defaultDiagnosticsProvider = ["rubocop"]; defaultDiagnosticsProvider = ["rubocop"];
diagnosticsProviders = { diagnosticsProviders = ["rubocop"];
rubocop = {
package = pkgs.rubyPackages.rubocop;
};
};
in { in {
options.vim.languages.ruby = { options.vim.languages.ruby = {
enable = mkEnableOption "Ruby language support"; enable = mkEnableOption "Ruby language support";
@ -82,10 +78,10 @@ in {
mkEnableOption "Ruby extra diagnostics support" mkEnableOption "Ruby extra diagnostics support"
// {default = config.vim.languages.enableExtraDiagnostics;}; // {default = config.vim.languages.enableExtraDiagnostics;};
types = diagnostics { types = mkOption {
langDesc = "Ruby"; type = listOf (enum diagnosticsProviders);
inherit diagnosticsProviders; default = defaultDiagnosticsProvider;
inherit defaultDiagnosticsProvider; description = "extra Ruby diagnostics providers";
}; };
}; };
}; };
@ -121,13 +117,15 @@ in {
}) })
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;});
linters_by_ft.ruby = cfg.extraDiagnostics.types; nvim-lint = {
linters = mkMerge (map (name: { enable = true;
${name}.cmd = getExe diagnosticsProviders.${name}.package; linters_by_ft = {
}) ruby = cfg.extraDiagnostics.types;
cfg.extraDiagnostics.types); eruby = cfg.extraDiagnostics.types;
};
};
}; };
}) })
]); ]);

View file

@ -10,7 +10,7 @@
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.types) enum listOf; inherit (lib.types) enum listOf;
inherit (lib.nvim.types) mkGrammarOption diagnostics; inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
cfg = config.vim.languages.scss; cfg = config.vim.languages.scss;
@ -30,13 +30,7 @@
}; };
defaultDiagnosticsProvider = ["stylelint"]; defaultDiagnosticsProvider = ["stylelint"];
diagnosticsProviders = { diagnosticsProviders = ["stylelint"];
stylelint = {
config = {
cmd = getExe pkgs.stylelint;
};
};
};
in { in {
options.vim.languages.scss = { options.vim.languages.scss = {
enable = mkEnableOption "SCSS/SASS language support"; enable = mkEnableOption "SCSS/SASS language support";
@ -87,10 +81,10 @@ in {
default = config.vim.languages.enableExtraDiagnostics; default = config.vim.languages.enableExtraDiagnostics;
defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics"; defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics";
}; };
types = diagnostics { types = mkOption {
langDesc = "SCSS"; type = listOf (enum diagnosticsProviders);
inherit diagnosticsProviders; default = defaultDiagnosticsProvider;
inherit defaultDiagnosticsProvider; description = "extra SCSS/SASS diagnostics providers";
}; };
}; };
}; };
@ -130,13 +124,15 @@ in {
}) })
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;});
linters_by_ft.scss = cfg.extraDiagnostics.types; nvim-lint = {
linters_by_ft.sass = cfg.extraDiagnostics.types; enable = true;
linters = linters_by_ft = {
mkMerge (map (name: {${name} = diagnosticsProviders.${name}.config;}) scss = cfg.extraDiagnostics.types;
cfg.extraDiagnostics.types); sass = cfg.extraDiagnostics.types;
};
};
}; };
}) })
]); ]);

View file

@ -10,7 +10,7 @@
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.types) enum package str listOf; inherit (lib.types) enum package str listOf;
inherit (lib.nvim.types) diagnostics deprecatedSingleOrListOf; inherit (lib.nvim.types) deprecatedSingleOrListOf;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
cfg = config.vim.languages.sql; cfg = config.vim.languages.sql;
@ -33,22 +33,7 @@
}; };
defaultDiagnosticsProvider = ["sqlfluff"]; defaultDiagnosticsProvider = ["sqlfluff"];
diagnosticsProviders = { diagnosticsProviders = ["sqlfluff" "sqruff"];
sqlfluff = {
package = sqlfluffDefault;
config = {
cmd = getExe sqlfluffDefault;
args = ["lint" "--format=json" "--dialect=${cfg.dialect}"];
};
};
sqruff = {
package = sqruffDefault;
config = {
cmd = getExe sqruffDefault;
args = ["lint" "--format=json" "--dialect=${cfg.dialect}" "-"];
};
};
};
in { in {
options.vim.languages.sql = { options.vim.languages.sql = {
enable = mkEnableOption "SQL language support"; enable = mkEnableOption "SQL language support";
@ -112,10 +97,10 @@ in {
defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics"; defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics";
}; };
types = diagnostics { types = mkOption {
langDesc = "SQL"; type = listOf (enum diagnosticsProviders);
inherit diagnosticsProviders; default = defaultDiagnosticsProvider;
inherit defaultDiagnosticsProvider; description = "extra SQL diagnostics providers";
}; };
}; };
}; };
@ -153,12 +138,15 @@ in {
}) })
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {
linters_by_ft.sql = cfg.extraDiagnostics.types; enable = true;
linters = dialect = cfg.dialect;
mkMerge (map (name: {${name} = diagnosticsProviders.${name}.config;}) });
cfg.extraDiagnostics.types); nvim-lint = {
enable = true;
linters_by_ft.sql = cfg.extraDiagnostics.types;
};
}; };
}) })
]); ]);

View file

@ -11,7 +11,7 @@
inherit (lib) genAttrs; inherit (lib) genAttrs;
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
inherit (lib.types) enum coercedTo listOf; inherit (lib.types) enum coercedTo listOf;
inherit (lib.nvim.types) mkGrammarOption diagnostics deprecatedSingleOrListOf; inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
cfg = config.vim.languages.svelte; cfg = config.vim.languages.svelte;
@ -35,26 +35,8 @@
}; };
}; };
# TODO: specify packages
defaultDiagnosticsProvider = ["eslint_d"]; defaultDiagnosticsProvider = ["eslint_d"];
diagnosticsProviders = { diagnosticsProviders = ["eslint_d"];
eslint_d = let
pkg = pkgs.eslint_d;
in {
package = pkg;
config = {
cmd = getExe pkg;
required_files = [
"eslint.config.js"
"eslint.config.mjs"
".eslintrc"
".eslintrc.json"
".eslintrc.js"
".eslintrc.yml"
];
};
};
};
formatType = formatType =
deprecatedSingleOrListOf deprecatedSingleOrListOf
@ -117,10 +99,10 @@ in {
defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics"; defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics";
}; };
types = diagnostics { types = mkOption {
langDesc = "Svelte"; type = listOf (enum diagnosticsProviders);
inherit diagnosticsProviders; default = defaultDiagnosticsProvider;
inherit defaultDiagnosticsProvider; description = "extra Svelte diagnostics providers";
}; };
}; };
}; };
@ -156,12 +138,12 @@ in {
}) })
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;});
linters_by_ft.svelte = cfg.extraDiagnostics.types; nvim-lint = {
linters = enable = true;
mkMerge (map (name: {${name} = diagnosticsProviders.${name}.config;}) linters_by_ft.svelte = cfg.extraDiagnostics.types;
cfg.extraDiagnostics.types); };
}; };
}) })
]); ]);

View file

@ -10,7 +10,7 @@
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.options) mkEnableOption mkOption literalExpression; inherit (lib.options) mkEnableOption mkOption literalExpression;
inherit (lib.types) enum listOf; inherit (lib.types) enum listOf;
inherit (lib.nvim.types) diagnostics mkGrammarOption deprecatedSingleOrListOf; inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
cfg = config.vim.languages.toml; cfg = config.vim.languages.toml;
@ -39,12 +39,7 @@
}; };
}; };
defaultDiagnosticsProvider = ["tombi"]; defaultDiagnosticsProvider = ["tombi"];
diagnosticsProviders = { diagnosticsProviders = ["tombi" "taplo"];
tombi = {
package = pkgs.tombi;
args = ["lint"];
};
};
in { in {
options.vim.languages.toml = { options.vim.languages.toml = {
enable = mkEnableOption "TOML configuration language support"; enable = mkEnableOption "TOML configuration language support";
@ -96,10 +91,10 @@ in {
default = config.vim.languages.enableExtraDiagnostics; default = config.vim.languages.enableExtraDiagnostics;
defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics"; defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics";
}; };
types = diagnostics { types = mkOption {
langDesc = "TOML"; type = listOf (enum diagnosticsProviders);
inherit diagnosticsProviders; default = defaultDiagnosticsProvider;
inherit defaultDiagnosticsProvider; description = "extra TOML diagnostics providers";
}; };
}; };
}; };
@ -137,15 +132,12 @@ in {
}) })
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;});
linters_by_ft.toml = cfg.extraDiagnostics.types; nvim-lint = {
linters = mkMerge ( enable = true;
map (name: { linters_by_ft.toml = cfg.extraDiagnostics.types;
${name}.cmd = getExe diagnosticsProviders.${name}.package; };
})
cfg.extraDiagnostics.types
);
}; };
}) })
]); ]);

View file

@ -10,7 +10,7 @@
inherit (lib) genAttrs; inherit (lib) genAttrs;
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
inherit (lib.types) listOf enum; inherit (lib.types) listOf enum;
inherit (lib.nvim.types) mkGrammarOption diagnostics; inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
cfg = config.vim.languages.twig; cfg = config.vim.languages.twig;
@ -26,14 +26,8 @@
# TODO: if twig-cs-fixer gets packaged for nix, add it and default to it. # TODO: if twig-cs-fixer gets packaged for nix, add it and default to it.
}; };
defaultDiagnosticsProvider = ["djlint"]; defaultDiagnosticsProvider = ["djlint"];
diagnosticsProviders = { # TODO: if curlylint gets packaged for nix, add it.
djlint = { diagnosticsProviders = ["djlint"];
config = {
cmd = getExe pkgs.djlint;
};
};
# TODO: if curlylint gets packaged for nix, add it.
};
in { in {
options.vim.languages.twig = { options.vim.languages.twig = {
enable = mkEnableOption "Twig templating language support"; enable = mkEnableOption "Twig templating language support";
@ -83,10 +77,10 @@ in {
default = config.vim.languages.enableExtraDiagnostics; default = config.vim.languages.enableExtraDiagnostics;
defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics"; defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics";
}; };
types = diagnostics { types = mkOption {
langDesc = "Twig"; type = listOf (enum diagnosticsProviders);
inherit diagnosticsProviders; default = defaultDiagnosticsProvider;
inherit defaultDiagnosticsProvider; description = "extra Twig diagnostics providers";
}; };
}; };
}; };
@ -122,12 +116,12 @@ in {
}) })
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;});
linters_by_ft.twig = cfg.extraDiagnostics.types; nvim-lint = {
linters = enable = true;
mkMerge (map (name: {${name} = diagnosticsProviders.${name}.config;}) linters_by_ft.twig = cfg.extraDiagnostics.types;
cfg.extraDiagnostics.types); };
}; };
}) })
]); ]);

View file

@ -12,7 +12,7 @@
inherit (lib.types) enum bool listOf; inherit (lib.types) enum bool listOf;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
inherit (lib.nvim.lua) toLuaObject; inherit (lib.nvim.lua) toLuaObject;
inherit (lib.nvim.types) mkGrammarOption diagnostics mkPluginSetupOption enumWithRename; inherit (lib.nvim.types) mkGrammarOption mkPluginSetupOption enumWithRename;
inherit (lib.nvim.dag) entryAnywhere; inherit (lib.nvim.dag) entryAnywhere;
cfg = config.vim.languages.typescript; cfg = config.vim.languages.typescript;
@ -44,35 +44,8 @@
}; };
}; };
# TODO: specify packages
defaultDiagnosticsProvider = ["eslint_d"]; defaultDiagnosticsProvider = ["eslint_d"];
diagnosticsProviders = { diagnosticsProviders = ["eslint_d" "biomejs"];
eslint_d = let
pkg = pkgs.eslint_d;
in {
package = pkg;
config = {
cmd = getExe pkg;
required_files = [
"eslint.config.js"
"eslint.config.mjs"
".eslintrc"
".eslintrc.cjs"
".eslintrc.json"
".eslintrc.js"
".eslintrc.yml"
];
};
};
biomejs = let
pkg = pkgs.biome;
in {
package = pkg;
config = {
cmd = getExe pkg;
};
};
};
in { in {
options.vim.languages.typescript = { options.vim.languages.typescript = {
enable = mkEnableOption "Typescript/Javascript language support"; enable = mkEnableOption "Typescript/Javascript language support";
@ -129,10 +102,10 @@ in {
extraDiagnostics = { extraDiagnostics = {
enable = mkEnableOption "extra Typescript/Javascript diagnostics" // {default = config.vim.languages.enableExtraDiagnostics;}; enable = mkEnableOption "extra Typescript/Javascript diagnostics" // {default = config.vim.languages.enableExtraDiagnostics;};
types = diagnostics { types = mkOption {
langDesc = "Typescript/Javascript"; type = listOf (enum diagnosticsProviders);
inherit diagnosticsProviders; default = defaultDiagnosticsProvider;
inherit defaultDiagnosticsProvider; description = "extra Typescript/Javascript diagnostics providers";
}; };
}; };
@ -206,14 +179,15 @@ in {
}) })
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;});
linters_by_ft.typescript = cfg.extraDiagnostics.types; nvim-lint = {
linters_by_ft.typescriptreact = cfg.extraDiagnostics.types; enable = true;
linters_by_ft = {
linters = typescript = cfg.extraDiagnostics.types;
mkMerge (map (name: {${name} = diagnosticsProviders.${name}.config;}) typescriptreact = cfg.extraDiagnostics.types;
cfg.extraDiagnostics.types); };
};
}; };
}) })

View file

@ -10,7 +10,7 @@
inherit (lib) genAttrs; inherit (lib) genAttrs;
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
inherit (lib.types) enum listOf; inherit (lib.types) enum listOf;
inherit (lib.nvim.types) mkGrammarOption diagnostics; inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
cfg = config.vim.languages.vue; cfg = config.vim.languages.vue;
@ -34,16 +34,7 @@
}; };
defaultDiagnosticsProvider = ["biomejs"]; defaultDiagnosticsProvider = ["biomejs"];
diagnosticsProviders = { diagnosticsProviders = ["biomejs"];
biomejs = let
pkg = pkgs.biome;
in {
package = pkg;
config = {
cmd = getExe pkg;
};
};
};
in { in {
options.vim.languages.vue = { options.vim.languages.vue = {
enable = mkEnableOption "Vue.js language support"; enable = mkEnableOption "Vue.js language support";
@ -97,10 +88,10 @@ in {
defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics"; defaultText = literalExpression "config.vim.languages.enableExtraDiagnostics";
}; };
types = diagnostics { types = mkOption {
langDesc = "Vue.js"; type = listOf (enum diagnosticsProviders);
inherit diagnosticsProviders; default = defaultDiagnosticsProvider;
inherit defaultDiagnosticsProvider; description = "extra Vue.js diagnostics providers";
}; };
}; };
}; };
@ -136,15 +127,12 @@ in {
}) })
(mkIf cfg.extraDiagnostics.enable { (mkIf cfg.extraDiagnostics.enable {
vim.diagnostics.nvim-lint = { vim.diagnostics = {
enable = true; presets = genAttrs cfg.extraDiagnostics.types (_: {enable = true;});
linters_by_ft.vue = cfg.extraDiagnostics.types; nvim-lint = {
linters = mkMerge ( enable = true;
map (name: { linters_by_ft.vue = cfg.extraDiagnostics.types;
${name}.cmd = getExe diagnosticsProviders.${name}.package; };
})
cfg.extraDiagnostics.types
);
}; };
}) })
]); ]);