diff --git a/modules/plugins/languages/css.nix b/modules/plugins/languages/css.nix index 1075bbc7..1b0376ad 100644 --- a/modules/plugins/languages/css.nix +++ b/modules/plugins/languages/css.nix @@ -8,34 +8,25 @@ inherit (lib.options) mkEnableOption mkOption; inherit (lib.meta) getExe; inherit (lib.modules) mkIf mkMerge; - inherit (lib.lists) isList; - inherit (lib.types) enum either listOf package str; + inherit (lib.types) enum listOf package; inherit (lib.nvim.types) mkGrammarOption; - inherit (lib.nvim.lua) expToLua; + inherit (lib.nvim.attrsets) mapListToAttrs; cfg = config.vim.languages.css; - defaultServer = "vscode-langservers-extracted"; + defaultServer = ["cssls"]; servers = { - vscode-langservers-extracted = { - package = pkgs.vscode-langservers-extracted; - lspConfig = '' - -- enable (broadcasting) snippet capability for completion - -- see - local css_capabilities = vim.lsp.protocol.make_client_capabilities() - css_capabilities.textDocument.completion.completionItem.snippetSupport = true - - -- cssls setup - lspconfig.cssls.setup { - capabilities = css_capabilities; - on_attach = default_on_attach; - cmd = ${ - if isList cfg.lsp.package - then expToLua cfg.lsp.package - else ''{"${cfg.lsp.package}/bin/vscode-css-language-server", "--stdio"}'' - } - } - ''; + cssls = { + cmd = ["${pkgs.vscode-langservers-extracted}/bin/vscode-css-language-server" "--stdio"]; + filetypes = ["css" "scss" "less"]; + # needed to enable formatting + init_options = {provideFormatter = true;}; + root_markers = [".git" "package.json"]; + settings = { + css.validate = true; + scss.validate = true; + less.validate = true; + }; }; }; @@ -82,17 +73,10 @@ in { lsp = { enable = mkEnableOption "CSS LSP support" // {default = config.vim.lsp.enable;}; - server = mkOption { - description = "CSS LSP server to use"; - type = enum (attrNames servers); + servers = mkOption { + type = singleOrListOf (enum (attrNames servers)); default = defaultServer; - }; - - package = mkOption { - description = "CSS LSP server package, or the command to run as a list of strings"; - example = ''[lib.getExe pkgs.jdt-language-server " - data " " ~/.cache/jdtls/workspace "]''; - type = either package (listOf str); - default = servers.${cfg.lsp.server}.package; + description = "CSS LSP server to use"; }; }; @@ -120,8 +104,12 @@ in { }) (mkIf cfg.lsp.enable { - vim.lsp.lspconfig.enable = true; - vim.lsp.lspconfig.sources.css-lsp = servers.${cfg.lsp.server}.lspConfig; + vim.lsp.servers = + mapListToAttrs (name: { + inherit name; + value = servers.${name}; + }) + cfg.lsp.servers; }) (mkIf cfg.format.enable {