diff --git a/modules/plugins/languages/asm.nix b/modules/plugins/languages/asm.nix index 2a5a2843..273cb9db 100644 --- a/modules/plugins/languages/asm.nix +++ b/modules/plugins/languages/asm.nix @@ -37,6 +37,7 @@ in { description = "Assembly LSP server to use"; type = listOf (enum (attrNames servers)); default = defaultServers; + example = ["asm-lsp"]; }; }; }; diff --git a/modules/plugins/languages/astro.nix b/modules/plugins/languages/astro.nix index 1f3f3003..b7a69bda 100644 --- a/modules/plugins/languages/astro.nix +++ b/modules/plugins/languages/astro.nix @@ -12,46 +12,25 @@ inherit (lib.types) enum either listOf package str; inherit (lib.generators) mkLuaInline; inherit (lib.nvim.lua) expToLua; - inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.types) mkGrammarOption diagnostics; cfg = config.vim.languages.astro; - defaultServers = ["astro"]; + defaultServer = "astro"; servers = { astro = { - enable = true; - cmd = [(getExe pkgs.astro-language-server) "--stdio"]; - filetypes = ["astro"]; - root_markers = ["package.json" "tsconfig.json" "jsconfig.json" ".git"]; - init_options = { - typescript = {}; - }; - before_init = - mkLuaInline - /* - lua - */ - '' - function(_, config) - -- TODO: Make this a shared util function - local get_typescript_server_path = function(root_dir) - local project_roots = vim.fs.find('node_modules', { path = root_dir, upward = true, limit = math.huge }) - for _, project_root in ipairs(project_roots) do - local typescript_path = project_root .. '/typescript' - local stat = vim.loop.fs_stat(typescript_path) - if stat and stat.type == 'directory' then - return typescript_path .. '/lib' - end - end - return ''' - end - - if config.init_options and config.init_options.typescript and not config.init_options.typescript.tsdk then - config.init_options.typescript.tsdk = get_typescript_server_path(config.root_dir) - end - end - ''; + package = pkgs.astro-language-server; + lspConfig = '' + lspconfig.astro.setup { + capabilities = capabilities, + on_attach = attach_keymaps, + cmd = ${ + if isList cfg.lsp.package + then expToLua cfg.lsp.package + else ''{"${cfg.lsp.package}/bin/astro-ls", "--stdio"}'' + } + } + ''; }; }; @@ -103,10 +82,18 @@ in { lsp = { enable = mkEnableOption "Astro LSP support" // {default = config.vim.lsp.enable;}; - servers = mkOption { + + server = mkOption { + type = enum (attrNames servers); + default = defaultServer; description = "Astro 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.astro-language-server "--minify" "--stdio"]''; + description = "Astro LSP server package, or the command to run as a list of strings"; }; }; @@ -144,12 +131,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.astro-lsp = servers.${cfg.lsp.server}.lspConfig; }) (mkIf cfg.format.enable { diff --git a/modules/plugins/languages/bash.nix b/modules/plugins/languages/bash.nix index 1072a0fe..e02596cf 100644 --- a/modules/plugins/languages/bash.nix +++ b/modules/plugins/languages/bash.nix @@ -10,24 +10,26 @@ inherit (lib.modules) mkIf mkMerge; inherit (lib.lists) isList; inherit (lib.types) enum either package listOf str bool; - inherit (lib.generators) mkLuaInline; inherit (lib.nvim.types) diagnostics mkGrammarOption; inherit (lib.nvim.lua) expToLua; cfg = config.vim.languages.bash; - defaultServers = ["bash-ls"]; + defaultServer = "bash-ls"; servers = { bash-ls = { - enable = true; - cmd = [(getExe pkgs.bash-language-server) "start"]; - filetypes = ["bash" "sh"]; - root_markers = [".git"]; - settings = { - basheIde = { - globPattern = mkLuaInline "vim.env.GLOB_PATTERN or '*@(.sh|.inc|.bash|.command)'"; + package = pkgs.bash-language-server; + lspConfig = '' + lspconfig.bashls.setup{ + capabilities = capabilities; + on_attach = default_on_attach; + cmd = ${ + if isList cfg.lsp.package + then expToLua cfg.lsp.package + else ''{"${cfg.lsp.package}/bin/bash-language-server", "start"}'' }; - }; + } + ''; }; }; @@ -54,11 +56,19 @@ in { }; lsp = { - enable = mkEnableOption "Bash LSP support" // {default = config.vim.lsp.enable;}; - servers = mkOption { + enable = mkEnableOption "Enable Bash LSP support" // {default = config.vim.lsp.enable;}; + + server = mkOption { description = "Bash LSP server to use"; - type = listOf (enum (attrNames servers)); - default = defaultServers; + type = enum (attrNames servers); + default = defaultServer; + }; + + package = mkOption { + description = "bash-language-server package, or the command to run as a list of strings"; + example = literalExpression ''[lib.getExe pkgs.nodePackages.bash-language-server "start"]''; + type = either package (listOf str); + default = pkgs.bash-language-server; }; }; @@ -98,12 +108,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.bash-lsp = servers.${cfg.lsp.server}.lspConfig; }) (mkIf cfg.format.enable { diff --git a/modules/plugins/languages/clojure.nix b/modules/plugins/languages/clojure.nix index cba3bcf7..0b932708 100644 --- a/modules/plugins/languages/clojure.nix +++ b/modules/plugins/languages/clojure.nix @@ -13,16 +13,6 @@ inherit (lib.nvim.lua) expToLua; cfg = config.vim.languages.clojure; - - defaultServers = ["clojure-lsp"]; - servers = { - clojure-lsp = { - enable = true; - cmd = [(getExe pkgs.clojure-lsp)]; - filetypes = ["clojure" "edn"]; - root_markers = ["project.clj" "deps.edn" "build.boot" "shadow-cljs.edn" ".git" "bb.edn"]; - }; - }; in { options.vim.languages.clojure = { enable = mkEnableOption "Clojure language support"; @@ -34,22 +24,28 @@ in { lsp = { enable = mkEnableOption "Clojure LSP support" // {default = config.vim.lsp.enable;}; - servers = mkOption { - description = "Clojure LSP server to use"; - type = listOf (enum (attrNames servers)); - default = defaultServers; + package = mkOption { + type = either package (listOf str); + default = pkgs.clojure-lsp; + description = "Clojure LSP"; }; }; }; config = mkIf cfg.enable (mkMerge [ (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.clojure-lsp = '' + lspconfig.clojure_lsp.setup { + capabilities = capabilities; + on_attach = default_on_attach; + cmd = ${ + if isList cfg.lsp.package + then expToLua cfg.lsp.package + else ''{"${getExe cfg.lsp.package}"}'' + }; + } + ''; }) (mkIf cfg.treesitter.enable { diff --git a/modules/plugins/languages/nix.nix b/modules/plugins/languages/nix.nix index 97272131..1efbdcf2 100644 --- a/modules/plugins/languages/nix.nix +++ b/modules/plugins/languages/nix.nix @@ -101,6 +101,7 @@ in { description = "Nix LSP server to use"; type = listOf (enum (attrNames servers)); default = defaultServers; + example = ["nixd"]; }; };