From 82c5119a8a9cf89949cde04310770e98077251cd Mon Sep 17 00:00:00 2001 From: Snoweuph Date: Sat, 24 Jan 2026 00:51:05 +0100 Subject: [PATCH] language/xml: syntax highlighting, formatting, lsp --- configuration.nix | 1 + docs/manual/release-notes/rl-0.9.md | 2 + modules/plugins/languages/default.nix | 1 + modules/plugins/languages/xml.nix | 62 +++++++++++++++++++++++++++ 4 files changed, 66 insertions(+) create mode 100644 modules/plugins/languages/xml.nix diff --git a/configuration.nix b/configuration.nix index b9e3b8ec..040a076e 100644 --- a/configuration.nix +++ b/configuration.nix @@ -72,6 +72,7 @@ isMaximal: { extensions.crates-nvim.enable = isMaximal; }; toml.enable = isMaximal; + xml.enable = isMaximal; # Language modules that are not as common. assembly.enable = false; diff --git a/docs/manual/release-notes/rl-0.9.md b/docs/manual/release-notes/rl-0.9.md index 7585c3b5..3df92a8f 100644 --- a/docs/manual/release-notes/rl-0.9.md +++ b/docs/manual/release-notes/rl-0.9.md @@ -151,6 +151,8 @@ - Added [Selenen](https://github.com/kampfkarren/selene) for more diagnostics in `languages.lua`. +- Added XML syntax highlighting, LSP support and formatting + [vagahbond](https://github.com/vagahbond): [codewindow.nvim]: https://github.com/gorbit99/codewindow.nvim diff --git a/modules/plugins/languages/default.nix b/modules/plugins/languages/default.nix index 9b0d241b..8b550c39 100644 --- a/modules/plugins/languages/default.nix +++ b/modules/plugins/languages/default.nix @@ -50,6 +50,7 @@ in { ./yaml.nix ./ruby.nix ./just.nix + ./xml.nix # This is now a hard deprecation. (mkRenamedOptionModule ["vim" "languages" "enableLSP"] ["vim" "lsp" "enable"]) diff --git a/modules/plugins/languages/xml.nix b/modules/plugins/languages/xml.nix new file mode 100644 index 00000000..351232a9 --- /dev/null +++ b/modules/plugins/languages/xml.nix @@ -0,0 +1,62 @@ +{ + config, + pkgs, + lib, + ... +}: let + inherit (builtins) attrNames; + inherit (lib.options) mkOption mkEnableOption; + inherit (lib.meta) getExe; + inherit (lib.modules) mkIf mkMerge; + inherit (lib.types) enum listOf; + inherit (lib.nvim.types) mkGrammarOption; + inherit (lib.nvim.attrsets) mapListToAttrs; + + cfg = config.vim.languages.xml; + + defaultServers = ["lemminx"]; + servers = { + lemminx = { + enable = true; + cmd = [ + (getExe pkgs.lemminx) + ]; + filetypes = ["xml"]; + root_markers = [".git"]; + }; + }; +in { + options.vim.languages.xml = { + enable = mkEnableOption "XML language support"; + + treesitter = { + enable = mkEnableOption "XML treesitter" // {default = config.vim.languages.enableTreesitter;}; + package = mkGrammarOption pkgs "xml"; + }; + + lsp = { + enable = mkEnableOption "XML LSP support" // {default = config.vim.lsp.enable;}; + servers = mkOption { + type = listOf (enum (attrNames servers)); + default = defaultServers; + description = "XML LSP server to use"; + }; + }; + }; + + config = mkIf cfg.enable (mkMerge [ + (mkIf cfg.treesitter.enable { + vim.treesitter.enable = true; + vim.treesitter.grammars = [cfg.treesitter.package]; + }) + + (mkIf cfg.lsp.enable { + vim.lsp.servers = + mapListToAttrs (name: { + inherit name; + value = servers.${name}; + }) + cfg.lsp.servers; + }) + ]); +}