diff --git a/modules/plugins/languages/nim.nix b/modules/plugins/languages/nim.nix index 571f0761..d9a29e37 100644 --- a/modules/plugins/languages/nim.nix +++ b/modules/plugins/languages/nim.nix @@ -6,34 +6,32 @@ }: let inherit (builtins) attrNames; inherit (lib.options) mkEnableOption mkOption; - inherit (lib.meta) getExe'; + inherit (lib.meta) getExe; 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.generators) mkLuaInline; - inherit (lib.nvim.attrsets) mapListToAttrs; + inherit (lib.nvim.lua) expToLua; cfg = config.vim.languages.nim; - defaultServers = ["nimlsp"]; + defaultServer = "nimlsp"; servers = { nimlsp = { - enable = true; - cmd = [(getExe' pkgs.nimlsp "nimlsp")]; - filetypes = ["nim"]; - root_dir = - mkLuaInline - /* - lua - */ - '' - function(bufnr, on_dir) - 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 - ''; + package = pkgs.nimlsp; + lspConfig = '' + lspconfig.nimls.setup{ + capabilities = capabilities; + on_attach = default_on_attach; + cmd = ${ + if isList cfg.lsp.package + then expToLua cfg.lsp.package + else '' + {"${cfg.lsp.package}/bin/nimlsp"} + '' + }; + } + ''; }; }; @@ -57,11 +55,17 @@ in { lsp = { enable = mkEnableOption "Nim LSP support" // {default = config.vim.lsp.enable;}; - - servers = mkOption { + server = mkOption { description = "Nim LSP server to use"; - type = listOf (enum (attrNames servers)); - default = defaultServers; + type = str; + 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 { - vim.lsp.servers = - mapListToAttrs (n: { - name = n; - value = servers.${n}; - }) - cfg.lsp.servers; + vim.lsp.lspconfig.enable = true; + vim.lsp.lspconfig.sources.nim-lsp = servers.${cfg.lsp.server}.lspConfig; }) (mkIf cfg.format.enable { diff --git a/modules/plugins/languages/nu.nix b/modules/plugins/languages/nu.nix index 21acccb3..bd007fc8 100644 --- a/modules/plugins/languages/nu.nix +++ b/modules/plugins/languages/nu.nix @@ -5,30 +5,27 @@ ... }: let inherit (lib.options) mkEnableOption mkOption; - inherit (lib.types) enum listOf; + inherit (lib.types) str either package listOf; inherit (lib.modules) mkIf mkMerge; + inherit (lib.nvim.lua) expToLua; inherit (lib.nvim.types) mkGrammarOption; - inherit (lib.meta) getExe; - inherit (lib.generators) mkLuaInline; - inherit (lib.nvim.attrsets) mapListToAttrs; - inherit (builtins) attrNames; + inherit (builtins) isList; - defaultServers = ["nushell"]; + defaultServer = "nushell"; servers = { nushell = { - enable = true; - cmd = [(getExe pkgs.nushell) "--no-config-file" "--lsp"]; - filetypes = ["nu"]; - root_dir = - mkLuaInline - /* - lua - */ - '' - function(bufnr, on_dir) - on_dir(vim.fs.root(bufnr, { '.git' }) or vim.fs.dirname(vim.api.nvim_buf_get_name(bufnr))) - end - ''; + package = pkgs.nushell; + lspConfig = '' + lspconfig.nushell.setup{ + capabilities = capabilities, + on_attach = default_on_attach, + cmd = ${ + if isList cfg.lsp.package + then expToLua cfg.lsp.package + else ''{"${cfg.lsp.package}/bin/nu", "--no-config-file", "--lsp"}'' + } + } + ''; }; }; @@ -44,11 +41,17 @@ in { lsp = { enable = mkEnableOption "Nu LSP support" // {default = config.vim.lsp.enable;}; - - servers = mkOption { + server = mkOption { + type = str; + default = defaultServer; 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 { - vim.lsp.servers = - mapListToAttrs (n: { - name = n; - value = servers.${n}; - }) - cfg.lsp.servers; + vim.lsp.lspconfig.enable = true; + vim.lsp.lspconfig.sources.nu-lsp = servers.${cfg.lsp.server}.lspConfig; }) ]); }