languages: convert language modules M-Z

This commit is contained in:
raf 2025-04-06 02:19:29 +03:00
commit 64fbc41f29
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF
22 changed files with 341 additions and 445 deletions

View file

@ -4,14 +4,14 @@
lib, lib,
... ...
}: let }: let
inherit (builtins) attrNames; inherit (builtins) attrNames isList;
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.options) mkEnableOption mkOption; inherit (lib.options) mkEnableOption mkOption;
inherit (lib.lists) isList;
inherit (lib.types) bool enum either package listOf str; inherit (lib.types) bool enum either package listOf str;
inherit (lib.nvim.lua) expToLua toLuaObject; inherit (lib.nvim.lua) toLuaObject;
inherit (lib.nvim.types) diagnostics mkGrammarOption mkPluginSetupOption; inherit (lib.nvim.types) diagnostics mkGrammarOption mkPluginSetupOption;
inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.dag) entryAnywhere; inherit (lib.nvim.dag) entryAnywhere;
cfg = config.vim.languages.markdown; cfg = config.vim.languages.markdown;
@ -19,33 +19,23 @@
servers = { servers = {
marksman = { marksman = {
package = pkgs.marksman; package = pkgs.marksman;
lspConfig = '' options = {
lspconfig.marksman.setup{ cmd =
capabilities = capabilities;
on_attach = default_on_attach;
cmd = ${
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then toLuaObject cfg.lsp.package
else ''{"${cfg.lsp.package}/bin/marksman", "server"}'' else ''{"${cfg.lsp.package}/bin/marksman", "server"}'';
}, };
}
'';
}; };
}; };
defaultFormat = "deno_fmt"; defaultFormat = "deno_fmt";
formats = { formats = {
# for backwards compatibility # for backwards compatibility
denofmt = { denofmt.package = pkgs.deno;
package = pkgs.deno; deno_fmt.package = pkgs.deno;
}; prettierd.package = pkgs.prettierd;
deno_fmt = {
package = pkgs.deno;
};
prettierd = {
package = pkgs.prettierd;
};
}; };
defaultDiagnosticsProvider = ["markdownlint-cli2"]; defaultDiagnosticsProvider = ["markdownlint-cli2"];
diagnosticsProviders = { diagnosticsProviders = {
markdownlint-cli2 = { markdownlint-cli2 = {
@ -57,35 +47,29 @@ in {
enable = mkEnableOption "Markdown markup language support"; enable = mkEnableOption "Markdown markup language support";
treesitter = { treesitter = {
enable = mkOption { enable = mkEnableOption "Markdown treesitter" // {default = config.vim.languages.enableTreesitter;};
type = bool;
default = config.vim.languages.enableTreesitter;
description = "Enable Markdown treesitter";
};
mdPackage = mkGrammarOption pkgs "markdown"; mdPackage = mkGrammarOption pkgs "markdown";
mdInlinePackage = mkGrammarOption pkgs "markdown-inline"; mdInlinePackage = mkGrammarOption pkgs "markdown-inline";
}; };
lsp = { lsp = {
enable = mkEnableOption "Enable Markdown LSP support" // {default = config.vim.languages.enableLSP;}; enable = mkEnableOption "Markdown LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption { server = mkOption {
type = enum (attrNames servers); type = listOf (enum (attrNames servers));
default = defaultServer; default = [defaultServer];
description = "Markdown LSP server to use"; description = "Markdown LSP server to use";
}; };
package = mkOption { package = mkOption {
type = either package (listOf str); type = either package (listOf str);
default = servers.${cfg.lsp.server}.package; default = servers.${cfg.lsp.server}.package;
example = ''[lib.getExe pkgs.jdt-language-server " - data " " ~/.cache/jdtls/workspace "]''; example = ''["marksman"]'';
description = "Markdown LSP server package, or the command to run as a list of strings"; description = "Markdown LSP server package, or the command to run as a list of strings";
}; };
}; };
format = { format = {
enable = mkEnableOption "Markdown formatting" // {default = config.vim.languages.enableFormat;}; enable = mkEnableOption "Markdown formatting" // {default = config.vim.languages.enableFormat;};
type = mkOption { type = mkOption {
type = enum (attrNames formats); type = enum (attrNames formats);
default = defaultFormat; default = defaultFormat;

View file

@ -12,6 +12,7 @@
inherit (lib.types) enum either listOf package str; inherit (lib.types) enum either listOf package str;
inherit (lib.nvim.types) mkGrammarOption; inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.lua) expToLua; inherit (lib.nvim.lua) expToLua;
inherit (lib.nvim.languages) lspOptions;
cfg = config.vim.languages.nim; cfg = config.vim.languages.nim;
@ -19,19 +20,14 @@
servers = { servers = {
nimlsp = { nimlsp = {
package = pkgs.nimlsp; package = pkgs.nimlsp;
lspConfig = '' options = {
lspconfig.nimls.setup{ cmd =
capabilities = capabilities;
on_attach = default_on_attach;
cmd = ${
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then expToLua cfg.lsp.package
else '' else ''
{"${cfg.lsp.package}/bin/nimlsp"} {"${cfg.lsp.package}/bin/nimlsp"}
'' '';
}; };
}
'';
}; };
}; };
@ -56,31 +52,31 @@ in {
lsp = { lsp = {
enable = mkEnableOption "Nim LSP support" // {default = config.vim.languages.enableLSP;}; enable = mkEnableOption "Nim LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption { server = mkOption {
type = listOf (enum (attrNames servers));
default = [defaultServer];
description = "Nim LSP server to use"; description = "Nim LSP server to use";
type = str;
default = defaultServer;
}; };
package = mkOption { package = mkOption {
description = "Nim LSP server package, or the command to run as a list of strings";
example = ''[lib.getExe pkgs.nimlsp]'';
type = either package (listOf str); type = either package (listOf str);
default = servers.${cfg.lsp.server}.package; default = servers.${cfg.lsp.server}.package;
example = ''[lib.getExe pkgs.nimlsp]'';
description = "Nim LSP server package, or the command to run as a list of strings";
}; };
}; };
format = { format = {
enable = mkEnableOption "Nim formatting" // {default = config.vim.languages.enableFormat;}; enable = mkEnableOption "Nim formatting" // {default = config.vim.languages.enableFormat;};
type = mkOption { type = mkOption {
description = "Nim formatter to use";
type = enum (attrNames formats); type = enum (attrNames formats);
default = defaultFormat; default = defaultFormat;
description = "Nim formatter to use";
}; };
package = mkOption { package = mkOption {
description = "Nim formatter package";
type = package; type = package;
default = formats.${cfg.format.type}.package; default = formats.${cfg.format.type}.package;
description = "Nim formatter package";
}; };
}; };
}; };

View file

@ -12,6 +12,7 @@
inherit (lib.lists) isList; inherit (lib.lists) isList;
inherit (lib.strings) optionalString; inherit (lib.strings) optionalString;
inherit (lib.types) anything attrsOf enum either listOf nullOr package str; inherit (lib.types) anything attrsOf enum either listOf nullOr package str;
inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.types) mkGrammarOption diagnostics; inherit (lib.nvim.types) mkGrammarOption diagnostics;
inherit (lib.nvim.lua) expToLua toLuaObject; inherit (lib.nvim.lua) expToLua toLuaObject;
@ -20,11 +21,12 @@
useFormat = "on_attach = default_on_attach"; useFormat = "on_attach = default_on_attach";
noFormat = "on_attach = attach_keymaps"; noFormat = "on_attach = attach_keymaps";
defaultServer = "nil";
packageToCmd = package: defaultCmd: packageToCmd = package: defaultCmd:
if isList package if isList package
then expToLua package then expToLua package
else ''{"${package}/bin/${defaultCmd}"}''; else ''{"${package}/bin/${defaultCmd}"}'';
defaultServer = "nil";
servers = { servers = {
nil = { nil = {
package = pkgs.nil; package = pkgs.nil;
@ -145,9 +147,9 @@ in {
lsp = { lsp = {
enable = mkEnableOption "Nix LSP support" // {default = config.vim.languages.enableLSP;}; enable = mkEnableOption "Nix LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption { server = mkOption {
type = listOf (enum (attrNames servers));
default = [defaultServer];
description = "Nix LSP server to use"; description = "Nix LSP server to use";
type = enum (attrNames servers);
default = defaultServer;
}; };
package = mkOption { package = mkOption {
@ -156,12 +158,6 @@ in {
type = either package (listOf str); type = either package (listOf str);
default = servers.${cfg.lsp.server}.package; default = servers.${cfg.lsp.server}.package;
}; };
options = mkOption {
type = nullOr (attrsOf anything);
default = null;
description = "Options to pass to nixd LSP server";
};
}; };
format = { format = {

View file

@ -4,28 +4,25 @@
config, config,
... ...
}: let }: let
inherit (lib.options) mkEnableOption mkOption; inherit (builtins) isList attrNames;
inherit (lib.types) str either package listOf;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.nvim.lua) expToLua; inherit (lib.options) mkOption mkEnableOption;
inherit (lib.types) str either package listOf enum;
inherit (lib.meta) getExe;
inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.lua) toLuaObject;
inherit (lib.nvim.types) mkGrammarOption; inherit (lib.nvim.types) mkGrammarOption;
inherit (builtins) isList;
defaultServer = "nushell"; defaultServer = "nushell";
servers = { servers = {
nushell = { nushell = {
package = pkgs.nushell; package = pkgs.nushell;
lspConfig = '' options = {
lspconfig.nushell.setup{ cmd =
capabilities = capabilities,
on_attach = default_on_attach,
cmd = ${
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then toLuaObject cfg.lsp.package
else ''{"${cfg.lsp.package}/bin/nu", "--no-config-file", "--lsp"}'' else ''{"${getExe cfg.lsp.package}", "--no-config-file", "--lsp"}'';
} };
}
'';
}; };
}; };
@ -42,8 +39,8 @@ in {
lsp = { lsp = {
enable = mkEnableOption "Nu LSP support" // {default = config.vim.languages.enableLSP;}; enable = mkEnableOption "Nu LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption { server = mkOption {
type = str; type = listOf (enum (attrNames servers));
default = defaultServer; default = [defaultServer];
description = "Nu LSP server to use"; description = "Nu LSP server to use";
}; };

View file

@ -4,12 +4,12 @@
lib, lib,
... ...
}: let }: let
inherit (builtins) attrNames; inherit (builtins) isList attrNames;
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.meta) getExe; inherit (lib.options) mkOption mkEnableOption;
inherit (lib.lists) isList;
inherit (lib.types) either enum listOf package str; inherit (lib.types) either enum listOf package str;
inherit (lib.meta) getExe;
inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.types) mkGrammarOption; inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.lua) expToLua; inherit (lib.nvim.lua) expToLua;
@ -19,17 +19,12 @@
servers = { servers = {
ocaml-lsp = { ocaml-lsp = {
package = pkgs.ocamlPackages.ocaml-lsp; package = pkgs.ocamlPackages.ocaml-lsp;
lspConfig = '' options = {
lspconfig.ocamllsp.setup { cmd =
capabilities = capabilities,
on_attach = default_on_attach,
cmd = ${
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then expToLua cfg.lsp.package
else ''{"${getExe cfg.lsp.package}"}'' else ''{"${getExe cfg.lsp.package}"}'';
}; };
}
'';
}; };
}; };
@ -49,30 +44,31 @@ in {
}; };
lsp = { lsp = {
enable = mkEnableOption "OCaml LSP support (ocaml-lsp)" // {default = config.vim.languages.enableLSP;}; enable = mkEnableOption "OCaml LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption { server = mkOption {
description = "OCaml LSP server to user"; type = listOf (enum (attrNames servers));
type = enum (attrNames servers);
default = defaultServer; default = defaultServer;
description = "OCaml LSP server to user";
}; };
package = mkOption { package = mkOption {
description = "OCaml language server package, or the command to run as a list of strings";
type = either package (listOf str); type = either package (listOf str);
default = servers.${cfg.lsp.server}.package; default = servers.${cfg.lsp.server}.package;
description = "OCaml language server package, or the command to run as a list of strings";
}; };
}; };
format = { format = {
enable = mkEnableOption "OCaml formatting support (ocamlformat)" // {default = config.vim.languages.enableFormat;}; enable = mkEnableOption "OCaml formatting support" // {default = config.vim.languages.enableFormat;};
type = mkOption { type = mkOption {
description = "OCaml formatter to use";
type = enum (attrNames formats); type = enum (attrNames formats);
default = defaultFormat; default = defaultFormat;
description = "OCaml formatter to use";
}; };
package = mkOption { package = mkOption {
description = "OCaml formatter package";
type = package; type = package;
default = formats.${cfg.format.type}.package; default = formats.${cfg.format.type}.package;
description = "OCaml formatter package";
}; };
}; };
}; };

View file

@ -4,11 +4,12 @@
lib, lib,
... ...
}: let }: let
inherit (builtins) attrNames; inherit (builtins) isList attrNames;
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.lists) isList; inherit (lib.options) mkOption mkEnableOption;
inherit (lib.types) either listOf package str enum; inherit (lib.types) either listOf package str enum;
inherit (lib.meta) getExe;
inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.lua) expToLua; inherit (lib.nvim.lua) expToLua;
inherit (lib.nvim.types) mkGrammarOption; inherit (lib.nvim.types) mkGrammarOption;
@ -16,17 +17,12 @@
servers = { servers = {
ols = { ols = {
package = pkgs.ols; package = pkgs.ols;
lspConfig = '' options = {
lspconfig.ols.setup { cmd =
capabilities = capabilities,
on_attach = default_on_attach,
cmd = ${
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then expToLua cfg.lsp.package
else "{'${cfg.lsp.package}/bin/ols'}" else "{'${getExe cfg.lsp.package}'}";
} };
}
'';
}; };
}; };
@ -42,7 +38,6 @@ in {
lsp = { lsp = {
enable = mkEnableOption "Odin LSP support" // {default = config.vim.languages.enableLSP;}; enable = mkEnableOption "Odin LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption { server = mkOption {
type = enum (attrNames servers); type = enum (attrNames servers);
default = defaultServer; default = defaultServer;
@ -50,9 +45,9 @@ in {
}; };
package = mkOption { package = mkOption {
description = "Ols package, or the command to run as a list of strings";
type = either package (listOf str); type = either package (listOf str);
default = pkgs.ols; default = pkgs.ols;
description = "Ols package, or the command to run as a list of strings";
}; };
}; };
}; };

View file

@ -4,12 +4,13 @@
lib, lib,
... ...
}: let }: let
inherit (builtins) attrNames; inherit (builtins) isList attrNames;
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.lists) isList;
inherit (lib.options) mkOption mkEnableOption;
inherit (lib.types) enum either listOf package str; inherit (lib.types) enum either listOf package str;
inherit (lib.meta) getExe;
inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.types) mkGrammarOption; inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.lua) expToLua; inherit (lib.nvim.lua) expToLua;
@ -19,31 +20,18 @@
servers = { servers = {
phpactor = { phpactor = {
package = pkgs.phpactor; package = pkgs.phpactor;
lspConfig = '' options = {
lspconfig.phpactor.setup{ cmd =
capabilities = capabilities,
on_attach = default_on_attach,
cmd = ${
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then expToLua cfg.lsp.package
else '' else ''{"${getExe cfg.lsp.package}", "language-server"}'';
{ };
"${getExe cfg.lsp.package}",
"language-server"
},
''
}
}
'';
}; };
phan = { phan = {
package = pkgs.php81Packages.phan; package = pkgs.php83Packages.phan;
lspConfig = '' options = {
lspconfig.phan.setup{ cmd =
capabilities = capabilities,
on_attach = default_on_attach,
cmd = ${
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then expToLua cfg.lsp.package
else '' else ''
@ -59,30 +47,18 @@
"--language-server-on-stdin", "--language-server-on-stdin",
"--allow-polyfill-parser" "--allow-polyfill-parser"
}, },
'' '';
} };
}
'';
}; };
intelephense = { intelephense = {
package = pkgs.intelephense; package = pkgs.intelephense;
lspConfig = '' options = {
lspconfig.intelephense.setup{ cmd =
capabilities = capabilities,
on_attach = default_on_attach,
cmd = ${
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then expToLua cfg.lsp.package
else '' else ''{"${getExe cfg.lsp.package}", "--stdio"'';
{ };
"${getExe cfg.lsp.package}",
"--stdio"
},
''
}
}
'';
}; };
}; };
in { in {
@ -98,16 +74,16 @@ in {
enable = mkEnableOption "PHP LSP support" // {default = config.vim.languages.enableLSP;}; enable = mkEnableOption "PHP LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption { server = mkOption {
description = "PHP LSP server to use"; type = listOf (enum (attrNames servers));
type = enum (attrNames servers);
default = defaultServer; default = defaultServer;
description = "PHP LSP server to use";
}; };
package = mkOption { package = mkOption {
description = "PHP LSP server package, or the command to run as a list of strings";
example = ''[lib.getExe pkgs.jdt-language-server " - data " " ~/.cache/jdtls/workspace "]'';
type = either package (listOf str); type = either package (listOf str);
default = servers.${cfg.lsp.server}.package; default = servers.${cfg.lsp.server}.package;
example = ''[lib.getExe pkgs.jdt-language-server " - data " " ~/.cache/jdtls/workspace "]'';
description = "PHP LSP server package, or the command to run as a list of strings";
}; };
}; };
}; };
@ -117,6 +93,7 @@ in {
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 {
vim.lsp.lspconfig = { vim.lsp.lspconfig = {
enable = true; enable = true;

View file

@ -4,12 +4,13 @@
lib, lib,
... ...
}: let }: let
inherit (builtins) attrNames; inherit (builtins) isList attrNames;
inherit (lib.options) mkEnableOption mkOption literalExpression;
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.lists) isList; inherit (lib.options) mkOption mkEnableOption literalExpression;
inherit (lib.types) enum either listOf package str bool; inherit (lib.types) enum either listOf package str bool;
inherit (lib.meta) getExe;
inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.lua) expToLua; inherit (lib.nvim.lua) expToLua;
cfg = config.vim.languages.python; cfg = config.vim.languages.python;
@ -18,47 +19,32 @@
servers = { servers = {
pyright = { pyright = {
package = pkgs.pyright; package = pkgs.pyright;
lspConfig = '' options = {
lspconfig.pyright.setup{ cmd =
capabilities = capabilities;
on_attach = default_on_attach;
cmd = ${
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then expToLua cfg.lsp.package
else ''{"${cfg.lsp.package}/bin/pyright-langserver", "--stdio"}'' else ''{"${cfg.lsp.package}/bin/pyright-langserver", "--stdio"}'';
} };
}
'';
}; };
basedpyright = { basedpyright = {
package = pkgs.basedpyright; package = pkgs.basedpyright;
lspConfig = '' options = {
lspconfig.basedpyright.setup{ cmd =
capabilities = capabilities;
on_attach = default_on_attach;
cmd = ${
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then expToLua cfg.lsp.package
else ''{"${cfg.lsp.package}/bin/basedpyright-langserver", "--stdio"}'' else ''{"${cfg.lsp.package}/bin/basedpyright-langserver", "--stdio"}'';
} };
}
'';
}; };
python-lsp-server = { python-lsp-server = {
package = pkgs.python3Packages.python-lsp-server; package = pkgs.python3Packages.python-lsp-server;
lspConfig = '' options = {
lspconfig.pylsp.setup{ cmd =
capabilities = capabilities;
on_attach = default_on_attach;
cmd = ${
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then expToLua cfg.lsp.package
else ''{"${cfg.lsp.package}/bin/pylsp"}'' else ''{"${cfg.lsp.package}/bin/pylsp"}'';
} };
}
'';
}; };
}; };
@ -161,27 +147,22 @@ in {
treesitter = { treesitter = {
enable = mkEnableOption "Python treesitter" // {default = config.vim.languages.enableTreesitter;}; enable = mkEnableOption "Python treesitter" // {default = config.vim.languages.enableTreesitter;};
package = mkOption { package = mkGrammarOption pkgs "python";
description = "Python treesitter grammar to use";
type = package;
default = pkgs.vimPlugins.nvim-treesitter.builtGrammars.python;
};
}; };
lsp = { lsp = {
enable = mkEnableOption "Python LSP support" // {default = config.vim.languages.enableLSP;}; enable = mkEnableOption "Python LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption { server = mkOption {
description = "Python LSP server to use"; type = listOf (enum (attrNames servers));
type = enum (attrNames servers);
default = defaultServer; default = defaultServer;
description = "Python LSP server to use";
}; };
package = mkOption { package = mkOption {
description = "python LSP server package, or the command to run as a list of strings";
example = ''[lib.getExe pkgs.jdt-language-server "-data" "~/.cache/jdtls/workspace"]'';
type = either package (listOf str); type = either package (listOf str);
default = servers.${cfg.lsp.server}.package; default = servers.${cfg.lsp.server}.package;
example = ''[lib.getExe pkgs.jdt-language-server "-data" "~/.cache/jdtls/workspace"]'';
description = "Python LSP server package, or the command to run as a list of strings";
}; };
}; };

View file

@ -4,12 +4,13 @@
lib, lib,
... ...
}: let }: let
inherit (builtins) attrNames; inherit (builtins) isList attrNames;
inherit (lib.options) mkEnableOption mkOption literalExpression;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.lists) isList; inherit (lib.options) mkOption mkEnableOption literalExpression;
inherit (lib.types) enum either listOf package str; inherit (lib.types) enum either listOf package str;
inherit (lib.nvim.lua) expToLua; inherit (lib.meta) getExe;
inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.lua) toLuaObject;
inherit (lib.nvim.types) mkGrammarOption; inherit (lib.nvim.types) mkGrammarOption;
cfg = config.vim.languages.r; cfg = config.vim.languages.r;
@ -56,17 +57,12 @@
package = pkgs.writeShellScriptBin "r_lsp" '' package = pkgs.writeShellScriptBin "r_lsp" ''
${r-with-languageserver}/bin/R --slave -e "languageserver::run()" ${r-with-languageserver}/bin/R --slave -e "languageserver::run()"
''; '';
lspConfig = '' options = {
lspconfig.r_language_server.setup{ cmd =
capabilities = capabilities;
on_attach = default_on_attach;
cmd = ${
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then toLuaObject cfg.lsp.package
else ''{"${lib.getExe cfg.lsp.package}"}'' else ''{"${getExe cfg.lsp.package}"}'';
} };
}
'';
}; };
}; };
in { in {
@ -82,16 +78,16 @@ in {
enable = mkEnableOption "R LSP support" // {default = config.vim.languages.enableLSP;}; enable = mkEnableOption "R LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption { server = mkOption {
description = "R LSP server to use"; type = listOf (enum (attrNames servers));
type = enum (attrNames servers);
default = defaultServer; default = defaultServer;
description = "R LSP server to use";
}; };
package = mkOption { package = mkOption {
description = "R LSP server package, or the command to run as a list of strings";
example = literalExpression "[ (lib.getExe pkgs.jdt-language-server) \"-data\" \"~/.cache/jdtls/workspace\" ]";
type = either package (listOf str); type = either package (listOf str);
default = servers.${cfg.lsp.server}.package; default = servers.${cfg.lsp.server}.package;
example = literalExpression "[ (lib.getExe pkgs.jdt-language-server) \"-data\" \"~/.cache/jdtls/workspace\" ]";
description = "R LSP server package, or the command to run as a list of strings";
}; };
}; };
@ -118,6 +114,11 @@ in {
vim.treesitter.grammars = [cfg.treesitter.package]; vim.treesitter.grammars = [cfg.treesitter.package];
}) })
(mkIf cfg.lsp.enable {
vim.lsp.lspconfig.enable = true;
vim.lsp.lspconfig.sources.r-lsp = servers.${cfg.lsp.server}.lspConfig;
})
(mkIf cfg.format.enable { (mkIf cfg.format.enable {
vim.formatter.conform-nvim = { vim.formatter.conform-nvim = {
enable = true; enable = true;
@ -125,10 +126,5 @@ in {
setupOpts.formatters.${cfg.format.type} = formats.${cfg.format.type}.config; setupOpts.formatters.${cfg.format.type} = formats.${cfg.format.type}.config;
}; };
}) })
(mkIf cfg.lsp.enable {
vim.lsp.lspconfig.enable = true;
vim.lsp.lspconfig.sources.r-lsp = servers.${cfg.lsp.server}.lspConfig;
})
]); ]);
} }

View file

@ -4,34 +4,35 @@
lib, lib,
... ...
}: let }: let
inherit (builtins) attrNames; inherit (builtins) isList attrNames;
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.nvim.types) mkGrammarOption diagnostics; inherit (lib.options) mkEnableOption mkOption;
inherit (lib.types) either listOf package str enum; inherit (lib.types) either listOf package str enum;
inherit (lib.meta) getExe;
inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.types) mkGrammarOption diagnostics;
inherit (lib.nvim.lua) toLuaObject;
cfg = config.vim.languages.ruby; cfg = config.vim.languages.ruby;
defaultServer = "rubyserver"; defaultServer = "solargraph";
servers = { servers = {
rubyserver = { solargraph = {
package = pkgs.rubyPackages.solargraph; package = pkgs.rubyPackages.solargraph;
lspConfig = '' options = {
lspconfig.solargraph.setup { cmd =
capabilities = capabilities, if isList cfg.lsp.package
on_attach = attach_keymaps, then toLuaObject cfg.lsp.package
flags = { else ''{"${getExe cfg.lsp.package}", "stdio"}'';
debounce_text_changes = 150,
}, flags = {
cmd = { "${pkgs.solargraph}/bin/solargraph", "stdio" } debounce_text_changes = 150;
} };
''; };
}; };
}; };
# testing
defaultFormat = "rubocop"; defaultFormat = "rubocop";
formats = { formats = {
rubocop = { rubocop = {
@ -58,9 +59,8 @@ in {
lsp = { lsp = {
enable = mkEnableOption "Ruby LSP support" // {default = config.vim.languages.enableLSP;}; enable = mkEnableOption "Ruby LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption { server = mkOption {
type = enum (attrNames servers); type = listOf (enum (attrNames servers));
default = defaultServer; default = defaultServer;
description = "Ruby LSP server to use"; description = "Ruby LSP server to use";
}; };
@ -74,7 +74,6 @@ in {
format = { format = {
enable = mkEnableOption "Ruby formatter support" // {default = config.vim.languages.enableFormat;}; enable = mkEnableOption "Ruby formatter support" // {default = config.vim.languages.enableFormat;};
type = mkOption { type = mkOption {
type = enum (attrNames formats); type = enum (attrNames formats);
default = defaultFormat; default = defaultFormat;
@ -89,10 +88,7 @@ in {
}; };
extraDiagnostics = { extraDiagnostics = {
enable = enable = mkEnableOption "extra Ruby diagnostics" // {default = config.vim.languages.enableExtraDiagnostics;};
mkEnableOption "Ruby extra diagnostics support"
// {default = config.vim.languages.enableExtraDiagnostics;};
types = diagnostics { types = diagnostics {
langDesc = "Ruby"; langDesc = "Ruby";
inherit diagnosticsProviders; inherit diagnosticsProviders;

View file

@ -12,6 +12,7 @@
inherit (lib.trivial) boolToString; inherit (lib.trivial) boolToString;
inherit (lib.lists) isList; inherit (lib.lists) isList;
inherit (lib.types) bool package str listOf either enum; inherit (lib.types) bool package str listOf either enum;
inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.types) mkGrammarOption; inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.lua) expToLua; inherit (lib.nvim.lua) expToLua;
inherit (lib.nvim.dag) entryAfter entryAnywhere; inherit (lib.nvim.dag) entryAfter entryAnywhere;

View file

@ -6,13 +6,15 @@
}: let }: let
inherit (lib.generators) mkLuaInline; inherit (lib.generators) mkLuaInline;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.options) mkOption mkEnableOption mkPackageOption;
inherit (lib.strings) optionalString;
inherit (lib.types) attrsOf anything bool;
inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.binds) mkMappingOption; inherit (lib.nvim.binds) mkMappingOption;
inherit (lib.nvim.dag) entryAfter; inherit (lib.nvim.dag) entryAfter;
inherit (lib.nvim.lua) toLuaObject; inherit (lib.nvim.lua) toLuaObject;
inherit (lib.nvim.types) mkGrammarOption luaInline; inherit (lib.nvim.types) mkGrammarOption luaInline;
inherit (lib.options) mkOption mkEnableOption mkPackageOption;
inherit (lib.strings) optionalString;
inherit (lib.types) attrsOf anything bool;
listCommandsAction = listCommandsAction =
if config.vim.telescope.enable if config.vim.telescope.enable

View file

@ -4,14 +4,15 @@
lib, lib,
... ...
}: let }: let
inherit (builtins) attrNames; inherit (builtins) isList attrNames;
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.lists) isList; inherit (lib.options) mkOption mkEnableOption;
inherit (lib.types) enum either listOf package str; inherit (lib.types) enum either listOf package str;
inherit (lib.nvim.lua) expToLua; inherit (lib.meta) getExe;
inherit (lib.nvim.types) diagnostics; inherit (lib.generators) mkLuaInline;
inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.lua) toLuaObject;
inherit (lib.nvim.types) diagnostics mkGrammarOption;
cfg = config.vim.languages.sql; cfg = config.vim.languages.sql;
sqlfluffDefault = pkgs.sqlfluff; sqlfluffDefault = pkgs.sqlfluff;
@ -20,20 +21,20 @@
servers = { servers = {
sqls = { sqls = {
package = pkgs.sqls; package = pkgs.sqls;
lspConfig = '' options = {
lspconfig.sqls.setup { on_attach = mkLuaInline ''
on_attach = function(client) function(client)
client.server_capabilities.execute_command = true
on_attach_keymaps(client, bufnr) on_attach_keymaps(client, bufnr)
require'sqls'.setup{} client.server_capabilities.execute_command = true
require('sqls').setup()
end, end,
cmd = ${ '';
cmd =
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then toLuaObject cfg.lsp.package
else ''{ "${cfg.lsp.package}/bin/sqls", "-config", string.format("%s/config.yml", vim.fn.getcwd()) }'' else ''{ "${cfg.lsp.package}/bin/sqls", "-config", string.format("%s/config.yml", vim.fn.getcwd()) }'';
} };
}
'';
}; };
}; };
@ -70,50 +71,42 @@ in {
treesitter = { treesitter = {
enable = mkEnableOption "SQL treesitter" // {default = config.vim.languages.enableTreesitter;}; enable = mkEnableOption "SQL treesitter" // {default = config.vim.languages.enableTreesitter;};
package = mkGrammarOption "sql";
package = mkOption {
description = "SQL treesitter grammar to use";
type = package;
default = pkgs.vimPlugins.nvim-treesitter.builtGrammars.sql;
};
}; };
lsp = { lsp = {
enable = mkEnableOption "SQL LSP support" // {default = config.vim.languages.enableLSP;}; enable = mkEnableOption "SQL LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption { server = mkOption {
description = "SQL LSP server to use"; type = listOf (enum (attrNames servers));
type = enum (attrNames servers);
default = defaultServer; default = defaultServer;
description = "SQL LSP server to use";
}; };
package = mkOption { package = mkOption {
description = "SQL LSP server package, or the command to run as a list of strings";
example = ''[lib.getExe pkgs.jdt-language-server "-data" "~/.cache/jdtls/workspace"]'';
type = either package (listOf str); type = either package (listOf str);
example = ''[lib.getExe pkgs.jdt-language-server "-data" "~/.cache/jdtls/workspace"]'';
default = servers.${cfg.lsp.server}.package; default = servers.${cfg.lsp.server}.package;
description = "SQL LSP server package, or the command to run as a list of strings";
}; };
}; };
format = { format = {
enable = mkEnableOption "SQL formatting" // {default = config.vim.languages.enableFormat;}; enable = mkEnableOption "SQL formatting" // {default = config.vim.languages.enableFormat;};
type = mkOption { type = mkOption {
description = "SQL formatter to use";
type = enum (attrNames formats); type = enum (attrNames formats);
default = defaultFormat; default = defaultFormat;
description = "SQL formatter to use";
}; };
package = mkOption { package = mkOption {
description = "SQL formatter package";
type = package; type = package;
default = formats.${cfg.format.type}.package; default = formats.${cfg.format.type}.package;
description = "SQL formatter package";
}; };
}; };
extraDiagnostics = { extraDiagnostics = {
enable = mkEnableOption "extra SQL diagnostics" // {default = config.vim.languages.enableExtraDiagnostics;}; enable = mkEnableOption "extra SQL diagnostics" // {default = config.vim.languages.enableExtraDiagnostics;};
types = diagnostics { types = diagnostics {
langDesc = "SQL"; langDesc = "SQL";
inherit diagnosticsProviders; inherit diagnosticsProviders;

View file

@ -4,14 +4,15 @@
lib, lib,
... ...
}: let }: let
inherit (builtins) attrNames; inherit (builtins) isList attrNames;
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.types) enum either listOf package str;
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
inherit (lib.generators) mkLuaInline; inherit (lib.generators) mkLuaInline;
inherit (lib.types) enum either listOf package str; inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.lua) expToLua; inherit (lib.nvim.lua) toLuaObject;
inherit (lib.nvim.types) mkGrammarOption diagnostics; inherit (lib.nvim.types) mkGrammarOption diagnostics;
cfg = config.vim.languages.svelte; cfg = config.vim.languages.svelte;
@ -20,17 +21,12 @@
servers = { servers = {
svelte = { svelte = {
package = pkgs.nodePackages.svelte-language-server; package = pkgs.nodePackages.svelte-language-server;
lspConfig = '' options = {
lspconfig.svelte.setup { cmd =
capabilities = capabilities;
on_attach = attach_keymaps,
cmd = ${
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then toLuaObject cfg.lsp.package
else ''{"${cfg.lsp.package}/bin/svelteserver", "--stdio"}'' else ''{"${cfg.lsp.package}/bin/svelteserver", "--stdio"}'';
} };
}
'';
}; };
}; };
@ -79,7 +75,6 @@ in {
treesitter = { treesitter = {
enable = mkEnableOption "Svelte treesitter" // {default = config.vim.languages.enableTreesitter;}; enable = mkEnableOption "Svelte treesitter" // {default = config.vim.languages.enableTreesitter;};
sveltePackage = mkGrammarOption pkgs "svelte"; sveltePackage = mkGrammarOption pkgs "svelte";
}; };
@ -88,15 +83,15 @@ in {
server = mkOption { server = mkOption {
description = "Svelte LSP server to use"; description = "Svelte LSP server to use";
type = enum (attrNames servers); type = listOf (enum (attrNames servers));
default = defaultServer; default = defaultServer;
}; };
package = mkOption { package = mkOption {
description = "Svelte LSP server package, or the command to run as a list of strings";
example = ''[lib.getExe pkgs.jdt-language-server "-data" "~/.cache/jdtls/workspace"]'';
type = either package (listOf str); type = either package (listOf str);
default = servers.${cfg.lsp.server}.package; default = servers.${cfg.lsp.server}.package;
example = ''[lib.getExe pkgs.jdt-language-server "-data" "~/.cache/jdtls/workspace"]'';
description = "Svelte LSP server package, or the command to run as a list of strings";
}; };
}; };

View file

@ -9,7 +9,8 @@
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.lists) isList; inherit (lib.lists) isList;
inherit (lib.types) enum either listOf package str; inherit (lib.types) enum either listOf package str;
inherit (lib.nvim.lua) expToLua; inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.lua) toLuaObject;
cfg = config.vim.languages.tailwind; cfg = config.vim.languages.tailwind;
@ -17,17 +18,12 @@
servers = { servers = {
tailwindcss-language-server = { tailwindcss-language-server = {
package = pkgs.tailwindcss-language-server; package = pkgs.tailwindcss-language-server;
lspConfig = '' options = {
lspconfig.tailwindcss.setup { cmd =
capabilities = capabilities;
on_attach = default_on_attach;
cmd = ${
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then toLuaObject cfg.lsp.package
else ''{"${cfg.lsp.package}/bin/tailwindcss-language-server", "--stdio"}'' else ''{"${cfg.lsp.package}/bin/tailwindcss-language-server", "--stdio"}'';
} };
}
'';
}; };
}; };
in { in {
@ -36,11 +32,10 @@ in {
lsp = { lsp = {
enable = mkEnableOption "Tailwindcss LSP support" // {default = config.vim.languages.enableLSP;}; enable = mkEnableOption "Tailwindcss LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption { server = mkOption {
description = "Tailwindcss LSP server to use"; type = listOf (enum (attrNames servers));
type = enum (attrNames servers);
default = defaultServer; default = defaultServer;
description = "Tailwindcss LSP server to use";
}; };
package = mkOption { package = mkOption {

View file

@ -4,12 +4,28 @@
lib, lib,
... ...
}: let }: let
inherit (lib.options) mkEnableOption mkOption; inherit (builtins) isList attrNames;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.types) package; inherit (lib.options) mkOption mkEnableOption;
inherit (lib.types) either package enum listOf str;
inherit (lib.meta) getExe;
inherit (lib.nvim.lua) toLuaObject;
inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.types) mkGrammarOption; inherit (lib.nvim.types) mkGrammarOption;
cfg = config.vim.languages.terraform; cfg = config.vim.languages.terraform;
defaultServer = "terraform-ls";
servers = {
terraform-ls = {
package = pkgs.terraform-ls;
options = {
cmd =
if isList cfg.lsp.package
then toLuaObject cfg.lsp.package
else ''{"${getExe cfg.lsp.package}", "serve"}'';
};
};
};
in { in {
options.vim.languages.terraform = { options.vim.languages.terraform = {
enable = mkEnableOption "Terraform/HCL support"; enable = mkEnableOption "Terraform/HCL support";
@ -20,12 +36,18 @@ in {
}; };
lsp = { lsp = {
enable = mkEnableOption "Terraform LSP support (terraform-ls)" // {default = config.vim.languages.enableLSP;}; enable = mkEnableOption "Terraform LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption {
type = listOf (enum (attrNames servers));
default = defaultServer;
description = "Terraform LSP server to use";
};
package = mkOption { package = mkOption {
description = "terraform-ls package"; type = either package (listOf str);
type = package; default = servers.${cfg.lsp.server}.package;
default = pkgs.terraform-ls; example = ''[lib.getExe pkgs.jdt-language-server "-data" "~/.cache/jdtls/workspace"]'';
description = "Terraform LSP server package, or the command to run as a list of strings";
}; };
}; };
}; };

View file

@ -4,14 +4,14 @@
lib, lib,
... ...
}: let }: let
inherit (builtins) attrNames; inherit (builtins) isList attrNames;
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.types) enum either listOf package str bool;
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
inherit (lib.generators) mkLuaInline; inherit (lib.generators) mkLuaInline;
inherit (lib.types) enum either listOf package str bool; inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.lua) expToLua toLuaObject; inherit (lib.nvim.lua) toLuaObject;
inherit (lib.nvim.types) mkGrammarOption diagnostics mkPluginSetupOption; inherit (lib.nvim.types) mkGrammarOption diagnostics mkPluginSetupOption;
inherit (lib.nvim.dag) entryAnywhere; inherit (lib.nvim.dag) entryAnywhere;
@ -21,36 +21,29 @@
servers = { servers = {
ts_ls = { ts_ls = {
package = pkgs.typescript-language-server; package = pkgs.typescript-language-server;
lspConfig = '' options = {
lspconfig.ts_ls.setup { on_attach = mkLuaInline ''
capabilities = capabilities, function(client, bufnr)
on_attach = function(client, bufnr)
attach_keymaps(client, bufnr); attach_keymaps(client, bufnr);
client.server_capabilities.documentFormattingProvider = false; client.server_capabilities.documentFormattingProvider = false;
end, end,
cmd = ${ '';
cmd =
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then toLuaObject cfg.lsp.package
else ''{"${cfg.lsp.package}/bin/typescript-language-server", "--stdio"}'' else ''{"${cfg.lsp.package}/bin/typescript-language-server", "--stdio"}'';
} };
}
'';
}; };
denols = { denols = {
package = pkgs.deno; package = pkgs.deno;
lspConfig = '' options = {
vim.g.markdown_fenced_languages = { "ts=typescript" } cmd =
lspconfig.denols.setup {
capabilities = capabilities;
on_attach = attach_keymaps,
cmd = ${
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then toLuaObject cfg.lsp.package
else ''{"${cfg.lsp.package}/bin/deno", "lsp"}'' else ''{"${cfg.lsp.package}/bin/deno", "lsp"}'';
} };
}
'';
}; };
# Here for backwards compatibility. Still consider tsserver a valid # Here for backwards compatibility. Still consider tsserver a valid
@ -58,17 +51,12 @@
# redirect the user to the correct server. # redirect the user to the correct server.
tsserver = { tsserver = {
package = pkgs.typescript-language-server; package = pkgs.typescript-language-server;
lspConfig = '' options = {
lspconfig.ts_ls.setup { cmd =
capabilities = capabilities;
on_attach = attach_keymaps,
cmd = ${
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then toLuaObject cfg.lsp.package
else ''{"${cfg.lsp.package}/bin/typescript-language-server", "--stdio"}'' else ''{"${cfg.lsp.package}/bin/typescript-language-server", "--stdio"}'';
} };
}
'';
}; };
}; };
@ -128,40 +116,37 @@ in {
lsp = { lsp = {
enable = mkEnableOption "Typescript/Javascript LSP support" // {default = config.vim.languages.enableLSP;}; enable = mkEnableOption "Typescript/Javascript LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption { server = mkOption {
description = "Typescript/Javascript LSP server to use"; type = listOf (enum (attrNames servers));
type = enum (attrNames servers);
default = defaultServer; default = defaultServer;
description = "Typescript/Javascript LSP server to use";
}; };
package = mkOption { package = mkOption {
description = "Typescript/Javascript LSP server package, or the command to run as a list of strings";
example = ''[lib.getExe pkgs.jdt-language-server "-data" "~/.cache/jdtls/workspace"]'';
type = either package (listOf str); type = either package (listOf str);
default = servers.${cfg.lsp.server}.package; default = servers.${cfg.lsp.server}.package;
example = ''[lib.getExe pkgs.jdt-language-server "-data" "~/.cache/jdtls/workspace"]'';
description = "Typescript/Javascript LSP server package, or the command to run as a list of strings";
}; };
}; };
format = { format = {
enable = mkEnableOption "Typescript/Javascript formatting" // {default = config.vim.languages.enableFormat;}; enable = mkEnableOption "Typescript/Javascript formatting" // {default = config.vim.languages.enableFormat;};
type = mkOption { type = mkOption {
description = "Typescript/Javascript formatter to use";
type = enum (attrNames formats); type = enum (attrNames formats);
default = defaultFormat; default = defaultFormat;
description = "Typescript/Javascript formatter to use";
}; };
package = mkOption { package = mkOption {
description = "Typescript/Javascript formatter package";
type = package; type = package;
default = formats.${cfg.format.type}.package; default = formats.${cfg.format.type}.package;
description = "Typescript/Javascript formatter package";
}; };
}; };
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 = diagnostics {
langDesc = "Typescript/Javascript"; langDesc = "Typescript/Javascript";
inherit diagnosticsProviders; inherit diagnosticsProviders;
@ -175,15 +160,14 @@ in {
[ts-error-translator.nvim]: https://github.com/dmmulroy/ts-error-translator.nvim [ts-error-translator.nvim]: https://github.com/dmmulroy/ts-error-translator.nvim
Typescript error translation with [ts-error-translator.nvim] Typescript error translation with [ts-error-translator.nvim]
''; '';
setupOpts = mkPluginSetupOption "ts-error-translator" { setupOpts = mkPluginSetupOption "ts-error-translator" {
# This is the default configuration behaviour. # This is the default configuration behaviour.
auto_override_publish_diagnostics = mkOption { auto_override_publish_diagnostics = mkOption {
description = "Automatically override the publish_diagnostics handler";
type = bool; type = bool;
default = true; default = true;
description = "Automatically override the publish_diagnostics handler";
}; };
}; };
}; };

View file

@ -4,12 +4,14 @@
lib, lib,
... ...
}: let }: let
inherit (lib.options) mkEnableOption mkOption; inherit (builtins) isList attrNames;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.lists) isList;
inherit (lib.options) mkOption mkEnableOption;
inherit (lib.types) nullOr enum either attrsOf listOf package str; inherit (lib.types) nullOr enum either attrsOf listOf package str;
inherit (lib.attrsets) attrNames;
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
inherit (lib.generators) mkLuaInline;
inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.lua) expToLua toLuaObject; inherit (lib.nvim.lua) expToLua toLuaObject;
inherit (lib.nvim.types) mkGrammarOption mkPluginSetupOption; inherit (lib.nvim.types) mkGrammarOption mkPluginSetupOption;
inherit (lib.nvim.dag) entryAnywhere; inherit (lib.nvim.dag) entryAnywhere;
@ -20,39 +22,38 @@
servers = { servers = {
typst-lsp = { typst-lsp = {
package = pkgs.typst-lsp; package = pkgs.typst-lsp;
lspConfig = '' options = {
lspconfig.typst_lsp.setup { on_attach = mkLuaInline ''
capabilities = capabilities, function(client, bufnr)
on_attach = function(client, bufnr) -- Disable semantic tokens as a workaround for a semantic token error
-- Disable semantic tokens as a workaround for a semantic token error when using non-english characters -- when using non-english characters
client.server_capabilities.semanticTokensProvider = nil client.server_capabilities.semanticTokensProvider = nil
end, end,
cmd = ${ '';
cmd =
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then expToLua cfg.lsp.package
else ''{"${cfg.lsp.package}/bin/typst-lsp"}'' else ''{"${getExe cfg.lsp.package}'';
}, };
}
'';
}; };
tinymist = { tinymist = {
package = pkgs.tinymist; package = pkgs.tinymist;
lspConfig = '' options = {
lspconfig.tinymist.setup { on_attach = mkLuaInline ''
capabilities = capabilities, function(client, bufnr)
single_file_support = true, -- Disable semantic tokens as a workaround for a semantic token error
on_attach = function(client, bufnr) -- when using non-english characters
-- Disable semantic tokens as a workaround for a semantic token error when using non-english characters
client.server_capabilities.semanticTokensProvider = nil client.server_capabilities.semanticTokensProvider = nil
end, end,
cmd = ${ '';
cmd =
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then expToLua cfg.lsp.package
else ''{"${cfg.lsp.package}/bin/tinymist"}'' else ''{"${cfg.lsp.package}/bin/tinymist"}'';
}, };
}
'';
}; };
}; };
@ -79,44 +80,46 @@ in {
enable = mkEnableOption "Typst LSP support (typst-lsp)" // {default = config.vim.languages.enableLSP;}; enable = mkEnableOption "Typst LSP support (typst-lsp)" // {default = config.vim.languages.enableLSP;};
server = mkOption { server = mkOption {
description = "Typst LSP server to use"; type = listOf (enum (attrNames servers));
type = enum (attrNames servers);
default = defaultServer; default = defaultServer;
description = "Typst LSP server to use";
}; };
package = mkOption { package = mkOption {
description = "typst-lsp package, or the command to run as a list of strings";
example = ''[lib.getExe pkgs.jdt-language-server "-data" "~/.cache/jdtls/workspace"]'';
type = either package (listOf str); type = either package (listOf str);
default = servers.${cfg.lsp.server}.package; default = servers.${cfg.lsp.server}.package;
example = ''[lib.getExe pkgs.jdt-language-server "-data" "~/.cache/jdtls/workspace"]'';
description = "typst-lsp package, or the command to run as a list of strings";
}; };
}; };
format = { format = {
enable = mkEnableOption "Typst document formatting" // {default = config.vim.languages.enableFormat;}; enable = mkEnableOption "Typst document formatting" // {default = config.vim.languages.enableFormat;};
type = mkOption { type = mkOption {
description = "Typst formatter to use";
type = enum (attrNames formats); type = enum (attrNames formats);
default = defaultFormat; default = defaultFormat;
description = "Typst formatter to use";
}; };
package = mkOption { package = mkOption {
description = "Typst formatter package";
type = package; type = package;
default = formats.${cfg.format.type}.package; default = formats.${cfg.format.type}.package;
description = "Typst formatter package";
}; };
}; };
extensions = { extensions = {
typst-preview-nvim = { typst-preview-nvim = {
enable = enable =
mkEnableOption '' mkEnableOption ""
[typst-preview.nvim]: https://github.com/chomosuke/typst-preview.nvim // {
default = true;
description = ''
[typst-preview.nvim]: https://github.com/chomosuke/typst-preview.nvim
Low latency typst preview for Neovim via [typst-preview.nvim] Low latency typst preview for Neovim via [typst-preview.nvim]
'' '';
// {default = true;}; };
setupOpts = mkPluginSetupOption "typst-preview-nvim" { setupOpts = mkPluginSetupOption "typst-preview-nvim" {
open_cmd = mkOption { open_cmd = mkOption {

View file

@ -9,6 +9,8 @@
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.lists) isList; inherit (lib.lists) isList;
inherit (lib.types) enum either listOf package str; inherit (lib.types) enum either listOf package str;
inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.types) mkGrammarOption; inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.lua) expToLua; inherit (lib.nvim.lua) expToLua;
@ -26,18 +28,13 @@
--prefix PATH : ${pkgs.uncrustify}/bin --prefix PATH : ${pkgs.uncrustify}/bin
''; '';
}; };
internalFormatter = true;
lspConfig = '' options = {
lspconfig.vala_ls.setup { cmd =
capabilities = capabilities;
on_attach = default_on_attach;
cmd = ${
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then expToLua cfg.lsp.package
else ''{"${cfg.lsp.package}/bin/vala-language-server"}'' else ''{"${cfg.lsp.package}/bin/vala-language-server"}'';
}, };
}
'';
}; };
}; };
in { in {
@ -52,15 +49,15 @@ in {
lsp = { lsp = {
enable = mkEnableOption "Vala LSP support" // {default = config.vim.languages.enableLSP;}; enable = mkEnableOption "Vala LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption { server = mkOption {
description = "Vala LSP server to use"; type = listOf (enum (attrNames servers));
type = enum (attrNames servers);
default = defaultServer; default = defaultServer;
description = "Vala LSP server to use";
}; };
package = mkOption { package = mkOption {
description = "Vala LSP server package, or the command to run as a list of strings";
type = either package (listOf str); type = either package (listOf str);
default = servers.${cfg.lsp.server}.package; default = servers.${cfg.lsp.server}.package;
description = "Vala LSP server package, or the command to run as a list of strings";
}; };
}; };
}; };

View file

@ -7,10 +7,11 @@
inherit (builtins) attrNames; inherit (builtins) attrNames;
inherit (lib.lists) isList; inherit (lib.lists) isList;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.nvim.lua) expToLua;
inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.options) literalExpression mkEnableOption mkOption; inherit (lib.options) literalExpression mkEnableOption mkOption;
inherit (lib.types) either enum listOf package str; inherit (lib.types) either enum listOf package str;
inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.lua) expToLua;
inherit (lib.nvim.types) mkGrammarOption;
cfg = config.vim.languages.wgsl; cfg = config.vim.languages.wgsl;
@ -19,17 +20,12 @@
wgsl-analyzer = { wgsl-analyzer = {
package = pkgs.wgsl-analyzer; package = pkgs.wgsl-analyzer;
internalFormatter = true; internalFormatter = true;
lspConfig = '' options = {
lspconfig.wgsl_analyzer.setup { cmd =
capabilities = capabilities,
on_attach = default_on_attach,
cmd = ${
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then expToLua cfg.lsp.package
else "{'${cfg.lsp.package}/bin/wgsl_analyzer'}" else "{'${cfg.lsp.package}/bin/wgsl_analyzer'}";
} };
}
'';
}; };
}; };
in { in {
@ -43,18 +39,17 @@ in {
lsp = { lsp = {
enable = mkEnableOption "WGSL LSP support" // {default = config.vim.languages.enableLSP;}; enable = mkEnableOption "WGSL LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption { server = mkOption {
type = enum (attrNames servers); type = listOf (enum (attrNames servers));
default = defaultServer; default = defaultServer;
description = "WGSL LSP server to use"; description = "WGSL LSP server to use";
}; };
package = mkOption { package = mkOption {
description = "wgsl-analyzer package, or the command to run as a list of strings";
example = literalExpression "[(lib.getExe pkgs.wgsl-analyzer)]";
type = either package (listOf str); type = either package (listOf str);
default = pkgs.wgsl-analyzer; default = pkgs.wgsl-analyzer;
example = literalExpression "[(lib.getExe pkgs.wgsl-analyzer)]";
description = "wgsl-analyzer package, or the command to run as a list of strings";
}; };
}; };
}; };

View file

@ -4,44 +4,39 @@
lib, lib,
... ...
}: let }: let
inherit (builtins) attrNames; inherit (builtins) isList attrNames;
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.lists) isList; inherit (lib.options) mkOption mkEnableOption;
inherit (lib.types) enum either listOf package str; inherit (lib.types) enum either listOf package str;
inherit (lib.generators) mkLuaInline;
inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.types) mkGrammarOption; inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.lua) expToLua; inherit (lib.nvim.lua) expToLua;
cfg = config.vim.languages.yaml; cfg = config.vim.languages.yaml;
onAttach = yamlOnAttach =
if config.vim.languages.helm.lsp.enable if config.vim.languages.helm.lsp.enable
then '' then ''
on_attach = function(client, bufnr) function(client, bufnr)
local filetype = vim.bo[bufnr].filetype local filetype = vim.bo[bufnr].filetype
if filetype == "helm" then if filetype == "helm" then
client.stop() client.stop()
end end
end'' end''
else "on_attach = default_on_attach"; else "default_on_attach";
defaultServer = "yaml-language-server"; defaultServer = "yaml-language-server";
servers = { servers = {
yaml-language-server = { yaml-language-server = {
package = pkgs.nodePackages.yaml-language-server; package = pkgs.nodePackages.yaml-language-server;
lspConfig = '' options = {
on_attach = mkLuaInline yamlOnAttach;
cmd =
lspconfig.yamlls.setup {
capabilities = capabilities,
${onAttach},
cmd = ${
if isList cfg.lsp.package if isList cfg.lsp.package
then expToLua cfg.lsp.package then expToLua cfg.lsp.package
else ''{"${cfg.lsp.package}/bin/yaml-language-server", "--stdio"}'' else ''{"${cfg.lsp.package}/bin/yaml-language-server", "--stdio"}'';
}, };
}
'';
}; };
}; };
in { in {
@ -58,7 +53,7 @@ in {
enable = mkEnableOption "YAML LSP support" // {default = config.vim.languages.enableLSP;}; enable = mkEnableOption "YAML LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption { server = mkOption {
type = enum (attrNames servers); type = listOf (enum (attrNames servers));
default = defaultServer; default = defaultServer;
description = "YAML LSP server to use"; description = "YAML LSP server to use";
}; };

View file

@ -9,6 +9,7 @@
inherit (lib.modules) mkIf mkMerge mkDefault; inherit (lib.modules) mkIf mkMerge mkDefault;
inherit (lib.lists) isList; inherit (lib.lists) isList;
inherit (lib.types) bool either listOf package str enum; inherit (lib.types) bool either listOf package str enum;
inherit (lib.nvim.languages) lspOptions;
inherit (lib.nvim.lua) expToLua; inherit (lib.nvim.lua) expToLua;
inherit (lib.nvim.types) mkGrammarOption; inherit (lib.nvim.types) mkGrammarOption;
@ -73,7 +74,6 @@ in {
lsp = { lsp = {
enable = mkEnableOption "Zig LSP support" // {default = config.vim.languages.enableLSP;}; enable = mkEnableOption "Zig LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption { server = mkOption {
type = enum (attrNames servers); type = enum (attrNames servers);
default = defaultServer; default = defaultServer;
@ -81,9 +81,9 @@ in {
}; };
package = mkOption { package = mkOption {
description = "ZLS package, or the command to run as a list of strings";
type = either package (listOf str); type = either package (listOf str);
default = pkgs.zls; default = pkgs.zls;
description = "ZLS package, or the command to run as a list of strings";
}; };
}; };