Compare commits

..

No commits in common. "c743bca93f34d8830ef4e61502ff90797b82a6b3" and "7afe8674d4ecadf884e80e4490f059fb85eae82d" have entirely different histories.

2 changed files with 59 additions and 60 deletions

View file

@ -6,34 +6,32 @@
}: let }: let
inherit (builtins) attrNames; inherit (builtins) attrNames;
inherit (lib.options) mkEnableOption mkOption; inherit (lib.options) mkEnableOption mkOption;
inherit (lib.meta) getExe'; inherit (lib.meta) getExe;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.types) enum listOf package; inherit (lib.lists) isList;
inherit (lib.types) enum either listOf package str;
inherit (lib.nvim.types) mkGrammarOption; inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.generators) mkLuaInline; inherit (lib.nvim.lua) expToLua;
inherit (lib.nvim.attrsets) mapListToAttrs;
cfg = config.vim.languages.nim; cfg = config.vim.languages.nim;
defaultServers = ["nimlsp"]; defaultServer = "nimlsp";
servers = { servers = {
nimlsp = { nimlsp = {
enable = true; package = pkgs.nimlsp;
cmd = [(getExe' pkgs.nimlsp "nimlsp")]; lspConfig = ''
filetypes = ["nim"]; lspconfig.nimls.setup{
root_dir = capabilities = capabilities;
mkLuaInline on_attach = default_on_attach;
/* cmd = ${
lua if isList cfg.lsp.package
*/ then expToLua cfg.lsp.package
'' else ''
function(bufnr, on_dir) {"${cfg.lsp.package}/bin/nimlsp"}
local fname = vim.api.nvim_buf_get_name(bufnr) ''
on_dir( };
util.root_pattern '*.nimble'(fname) or vim.fs.dirname(vim.fs.find('.git', { path = fname, upward = true })[1]) }
) '';
end
'';
}; };
}; };
@ -57,11 +55,17 @@ in {
lsp = { lsp = {
enable = mkEnableOption "Nim LSP support" // {default = config.vim.lsp.enable;}; enable = mkEnableOption "Nim LSP support" // {default = config.vim.lsp.enable;};
server = mkOption {
servers = mkOption {
description = "Nim LSP server to use"; description = "Nim LSP server to use";
type = listOf (enum (attrNames servers)); type = str;
default = defaultServers; default = defaultServer;
};
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);
default = servers.${cfg.lsp.server}.package;
}; };
}; };
@ -97,12 +101,8 @@ in {
}) })
(mkIf cfg.lsp.enable { (mkIf cfg.lsp.enable {
vim.lsp.servers = vim.lsp.lspconfig.enable = true;
mapListToAttrs (n: { vim.lsp.lspconfig.sources.nim-lsp = servers.${cfg.lsp.server}.lspConfig;
name = n;
value = servers.${n};
})
cfg.lsp.servers;
}) })
(mkIf cfg.format.enable { (mkIf cfg.format.enable {

View file

@ -5,30 +5,27 @@
... ...
}: let }: let
inherit (lib.options) mkEnableOption mkOption; inherit (lib.options) mkEnableOption mkOption;
inherit (lib.types) enum listOf; inherit (lib.types) str either package listOf;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.nvim.lua) expToLua;
inherit (lib.nvim.types) mkGrammarOption; inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.meta) getExe; inherit (builtins) isList;
inherit (lib.generators) mkLuaInline;
inherit (lib.nvim.attrsets) mapListToAttrs;
inherit (builtins) attrNames;
defaultServers = ["nushell"]; defaultServer = "nushell";
servers = { servers = {
nushell = { nushell = {
enable = true; package = pkgs.nushell;
cmd = [(getExe pkgs.nushell) "--no-config-file" "--lsp"]; lspConfig = ''
filetypes = ["nu"]; lspconfig.nushell.setup{
root_dir = capabilities = capabilities,
mkLuaInline on_attach = default_on_attach,
/* cmd = ${
lua if isList cfg.lsp.package
*/ then expToLua cfg.lsp.package
'' else ''{"${cfg.lsp.package}/bin/nu", "--no-config-file", "--lsp"}''
function(bufnr, on_dir) }
on_dir(vim.fs.root(bufnr, { '.git' }) or vim.fs.dirname(vim.api.nvim_buf_get_name(bufnr))) }
end '';
'';
}; };
}; };
@ -44,11 +41,17 @@ in {
lsp = { lsp = {
enable = mkEnableOption "Nu LSP support" // {default = config.vim.lsp.enable;}; enable = mkEnableOption "Nu LSP support" // {default = config.vim.lsp.enable;};
server = mkOption {
servers = mkOption { type = str;
default = defaultServer;
description = "Nu LSP server to use"; description = "Nu LSP server to use";
type = listOf (enum (attrNames servers)); };
default = defaultServers;
package = mkOption {
type = either package (listOf str);
default = servers.${cfg.lsp.server}.package;
example = ''[(lib.getExe pkgs.nushell) "--lsp"]'';
description = "Nu LSP server package, or the command to run as a list of strings";
}; };
}; };
}; };
@ -60,12 +63,8 @@ in {
}) })
(mkIf cfg.lsp.enable { (mkIf cfg.lsp.enable {
vim.lsp.servers = vim.lsp.lspconfig.enable = true;
mapListToAttrs (n: { vim.lsp.lspconfig.sources.nu-lsp = servers.${cfg.lsp.server}.lspConfig;
name = n;
value = servers.${n};
})
cfg.lsp.servers;
}) })
]); ]);
} }