diff --git a/modules/plugins/languages/wgsl.nix b/modules/plugins/languages/wgsl.nix index f374543e..3b278a27 100644 --- a/modules/plugins/languages/wgsl.nix +++ b/modules/plugins/languages/wgsl.nix @@ -5,31 +5,23 @@ ... }: let inherit (builtins) attrNames; - inherit (lib.lists) isList; inherit (lib.modules) mkIf mkMerge; - inherit (lib.nvim.lua) expToLua; inherit (lib.nvim.types) mkGrammarOption; - inherit (lib.options) literalExpression mkEnableOption mkOption; - inherit (lib.types) either enum listOf package str; + inherit (lib.options) mkEnableOption mkOption; + inherit (lib.types) enum listOf; + inherit (lib.meta) getExe; + inherit (lib.nvim.attrsets) mapListToAttrs; cfg = config.vim.languages.wgsl; - defaultServer = "wgsl-analyzer"; + defaultServers = ["wgsl_analyzer"]; servers = { - wgsl-analyzer = { - package = pkgs.wgsl-analyzer; - internalFormatter = true; - lspConfig = '' - lspconfig.wgsl_analyzer.setup { - capabilities = capabilities, - on_attach = default_on_attach, - cmd = ${ - if isList cfg.lsp.package - then expToLua cfg.lsp.package - else "{'${cfg.lsp.package}/bin/wgsl_analyzer'}" - } - } - ''; + wgsl_analyzer = { + enable = true; + cmd = [(getExe pkgs.wgsl-analyzer)]; + filetypes = ["wgsl"]; + root_markers = [".git"]; + settings = {}; }; }; in { @@ -44,18 +36,11 @@ in { lsp = { enable = mkEnableOption "WGSL LSP support" // {default = config.vim.lsp.enable;}; - server = mkOption { - type = enum (attrNames servers); - default = defaultServer; + servers = mkOption { + type = listOf (enum (attrNames servers)); + default = defaultServers; description = "WGSL LSP server to use"; }; - - 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); - default = pkgs.wgsl-analyzer; - }; }; }; @@ -68,12 +53,12 @@ in { }) (mkIf cfg.lsp.enable { - vim = { - lsp.lspconfig = { - enable = true; - sources.wgsl_analyzer = servers.${cfg.lsp.server}.lspConfig; - }; - }; + vim.lsp.servers = + mapListToAttrs (n: { + name = n; + value = servers.${n}; + }) + cfg.lsp.servers; }) ]); }