From ac54848ecd25a55b03d9839fe2eec1bf9caa9489 Mon Sep 17 00:00:00 2001 From: sjcobb Date: Thu, 5 Jun 2025 09:46:45 +0100 Subject: [PATCH] convert gleam module --- modules/plugins/languages/gleam.nix | 41 +++++++++++------------------ 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/modules/plugins/languages/gleam.nix b/modules/plugins/languages/gleam.nix index 272ef51e..3397a469 100644 --- a/modules/plugins/languages/gleam.nix +++ b/modules/plugins/languages/gleam.nix @@ -8,27 +8,21 @@ inherit (lib.options) mkEnableOption mkOption; inherit (lib.modules) mkIf mkMerge; inherit (lib.lists) isList; + inherit (lib.meta) getExe; inherit (lib.types) enum either listOf package str; inherit (lib.nvim.lua) expToLua; inherit (lib.nvim.types) mkGrammarOption; + inherit (lib.nvim.attrsets) mapListToAttrs; cfg = config.vim.languages.gleam; - defaultServer = "gleam"; + defaultServers = ["gleam"]; servers = { gleam = { - package = pkgs.gleam; - lspConfig = '' - lspconfig.gleam.setup{ - capabilities = capabilities, - on_attach = default_on_attach, - cmd = ${ - if isList cfg.lsp.package - then expToLua cfg.lsp.package - else ''{"${cfg.lsp.package}/bin/gleam", "lsp"}'' - } - } - ''; + enable = true; + cmd = [(getExe pkgs.gleam) "lsp"]; + filetypes = ["gleam"]; + root_markers = [ "gleam.toml" ".git" ]; }; }; in { @@ -42,17 +36,10 @@ in { lsp = { enable = mkEnableOption "Gleam LSP support" // {default = config.vim.lsp.enable;}; - - server = mkOption { - type = enum (attrNames servers); - default = defaultServer; + servers = mkOption { description = "Gleam LSP server to use"; - }; - - package = mkOption { - type = either package (listOf str); - default = servers.${cfg.lsp.server}.package; - description = "Gleam LSP server package, or the command to run as a list of strings"; + type = listOf (enum (attrNames servers)); + default = defaultServers; }; }; }; @@ -64,8 +51,12 @@ in { }) (mkIf cfg.lsp.enable { - vim.lsp.lspconfig.enable = true; - vim.lsp.lspconfig.sources.gleam-lsp = servers.${cfg.lsp.server}.lspConfig; + vim.lsp.servers = + mapListToAttrs (n: { + name = n; + value = servers.${n}; + }) + cfg.lsp.servers; }) ]); }