diff --git a/modules/plugins/languages/asm.nix b/modules/plugins/languages/asm.nix index 9fe58a76..273cb9db 100644 --- a/modules/plugins/languages/asm.nix +++ b/modules/plugins/languages/asm.nix @@ -4,12 +4,24 @@ lib, ... }: let + inherit (builtins) attrNames; inherit (lib.options) mkEnableOption mkOption; inherit (lib.modules) mkIf mkMerge; - inherit (lib.types) package; + inherit (lib.types) package enum listOf; inherit (lib.nvim.types) mkGrammarOption; + inherit (lib.meta) getExe; + inherit (lib.nvim.attrsets) mapListToAttrs; cfg = config.vim.languages.assembly; + defaultServers = ["asm-lsp"]; + servers = { + asm-lsp = { + enable = true; + cmd = [(getExe pkgs.asm-lsp)]; + filetypes = ["asm" "vmasm"]; + root_markers = [".asm-lsp.toml" ".git"]; + }; + }; in { options.vim.languages.assembly = { enable = mkEnableOption "Assembly support"; @@ -20,12 +32,12 @@ in { }; lsp = { - enable = mkEnableOption "Assembly LSP support (asm-lsp)" // {default = config.vim.lsp.enable;}; - - package = mkOption { - type = package; - default = pkgs.asm-lsp; - description = "asm-lsp package"; + enable = mkEnableOption "Assembly LSP support" // {default = config.vim.lsp.enable;}; + servers = mkOption { + description = "Assembly LSP server to use"; + type = listOf (enum (attrNames servers)); + default = defaultServers; + example = ["asm-lsp"]; }; }; }; @@ -36,14 +48,12 @@ in { }) (mkIf cfg.lsp.enable { - vim.lsp.lspconfig.enable = true; - vim.lsp.lspconfig.sources.asm-lsp = '' - lspconfig.asm_lsp.setup { - capabilities = capabilities, - on_attach = default_on_attach, - cmd = {"${cfg.lsp.package}/bin/asm-lsp"}, - } - ''; + vim.lsp.servers = + mapListToAttrs (n: { + name = n; + value = servers.${n}; + }) + cfg.lsp.servers; }) ]); }