diff --git a/modules/plugins/languages/html.nix b/modules/plugins/languages/html.nix
index 0bef2767..749347c0 100644
--- a/modules/plugins/languages/html.nix
+++ b/modules/plugins/languages/html.nix
@@ -4,17 +4,54 @@
lib,
...
}: let
- inherit (lib.options) mkEnableOption mkOption;
+ inherit (builtins) attrNames;
+ inherit (lib.options) mkOption mkEnableOption;
inherit (lib.modules) mkIf mkMerge;
- inherit (lib.types) bool;
- inherit (lib.lists) optional;
+ inherit (lib.lists) optional isList;
+ inherit (lib.types) enum either package listOf str bool;
inherit (lib.nvim.types) mkGrammarOption;
+ inherit (lib.nvim.lua) expToLua;
inherit (lib.nvim.dag) entryAnywhere;
cfg = config.vim.languages.html;
+
+ defaultServer = "html";
+ servers = {
+ html = {
+ package = pkgs.vscode-langservers-extracted;
+ lspConfig = ''
+ lspconfig.html.setup{
+ capabilities = capabilities;
+ on_attach = default_on_attach;
+ cmd = ${
+ if isList cfg.lsp.package
+ then expToLua cfg.lsp.package
+ else ''{"${cfg.lsp.package}/bin/vscode-html-language-server", "--stdio"}''
+ };
+ }
+ '';
+ };
+ };
in {
options.vim.languages.html = {
enable = mkEnableOption "HTML language support";
+
+ lsp = {
+ enable = mkEnableOption "Enable HTML LSP support" // {default = config.vim.languages.enableLSP;};
+
+ server = mkOption {
+ type = enum (attrNames servers);
+ default = defaultServer;
+ description = "HTML LSP server to use";
+ };
+
+ package = mkOption {
+ type = either package (listOf str);
+ default = pkgs.vscode-langservers-extracted;
+ description = "html-language-server package, or the command to run as a list of strings";
+ };
+ };
+
treesitter = {
enable = mkEnableOption "HTML treesitter support" // {default = config.vim.languages.enableTreesitter;};
package = mkGrammarOption pkgs "html";
@@ -27,6 +64,11 @@ in {
};
config = mkIf cfg.enable (mkMerge [
+ (mkIf cfg.lsp.enable {
+ vim.lsp.lspconfig.enable = true;
+ vim.lsp.lspconfig.sources.html-lsp = servers.${cfg.lsp.server}.lspConfig;
+ })
+
(mkIf cfg.treesitter.enable {
vim = {
startPlugins = optional cfg.treesitter.autotagHtml "nvim-ts-autotag";