From 85c7ba8227f3f69c175f0c667ba757c766b8804b Mon Sep 17 00:00:00 2001 From: Snoweuph Date: Fri, 19 Jun 2026 22:38:21 +0200 Subject: [PATCH] lsp/preset/gitlab-ci-ls: init --- docs/manual/release-notes/rl-0.9.md | 2 ++ modules/plugins/languages/docker.nix | 22 ++++++------------ modules/plugins/languages/yaml.nix | 16 ++++++++++--- modules/plugins/lsp/presets/default.nix | 3 ++- modules/plugins/lsp/presets/gitlab-ci-ls.nix | 24 ++++++++++++++++++++ 5 files changed, 48 insertions(+), 19 deletions(-) create mode 100644 modules/plugins/lsp/presets/gitlab-ci-ls.nix diff --git a/docs/manual/release-notes/rl-0.9.md b/docs/manual/release-notes/rl-0.9.md index 5be8fdb2..d738ba4a 100644 --- a/docs/manual/release-notes/rl-0.9.md +++ b/docs/manual/release-notes/rl-0.9.md @@ -348,6 +348,8 @@ - Add `emmet-ls` to the supported LSPs for all languages it supports. +- Added `gitlab-ci-ls`. + - Added `phpantom` LSP preset and into `languages.php`. - Moved extra diagnostic modules under `diagnostics.presets.` this will diff --git a/modules/plugins/languages/docker.nix b/modules/plugins/languages/docker.nix index 8d7f3494..e0fe0064 100644 --- a/modules/plugins/languages/docker.nix +++ b/modules/plugins/languages/docker.nix @@ -86,21 +86,13 @@ in { config = mkIf cfg.enable (mkMerge [ { - vim.autocmds = [ - # Without this the LSP doesn't understand them correctly - # and there are conflicts with the YAML LSP - { - desc = "Set Docker Compose filetype"; - event = ["BufRead" "BufNewFile"]; - pattern = [ - "compose.yml" - "compose.yaml" - "docker-compose.yml" - "docker-compose.yaml" - ]; - command = "set filetype=dockercompose"; - } - ]; + # Without this the LSP doesn't understand them correctly + # and there are conflicts with the YAML LSP, + # thus this module is "stealing" those files. + vim.filetype.pattern = { + "compose%.ya?ml" = "dockercompose"; + "docker%-compose%.ya?ml" = "dockercompose"; + }; } (mkIf cfg.treesitter.enable { diff --git a/modules/plugins/languages/yaml.nix b/modules/plugins/languages/yaml.nix index db84d346..095016ea 100644 --- a/modules/plugins/languages/yaml.nix +++ b/modules/plugins/languages/yaml.nix @@ -13,7 +13,7 @@ cfg = config.vim.languages.yaml; defaultServers = ["yaml-language-server"]; - servers = ["yaml-language-server"]; + servers = ["yaml-language-server" "gitlab-ci-ls"]; in { options.vim.languages.yaml = { enable = mkEnableOption "YAML language support"; @@ -45,11 +45,21 @@ in { }; config = mkIf cfg.enable (mkMerge [ + { + # The GitLab CI LSP ignores all filetypes which aren't `yaml.gitlab`. + vim.filetype.pattern = { + "%.gitlab%-ci%.ya?ml" = "yaml.gitlab"; + "%.gitlab/.*%.ya?ml" = "yaml.gitlab"; + "templates/.*%.ya?ml" = "yaml.gitlab"; + "templates/.*/template%.ya?ml" = "yaml.gitlab"; + }; + } + (mkIf cfg.treesitter.enable { vim.treesitter = { enable = true; grammars = [cfg.treesitter.package]; - filetypeMappings.yaml = ["yml"]; + filetypeMappings.yaml = ["yml" "yaml.gitlab"]; }; }) @@ -57,7 +67,7 @@ in { vim.lsp = { presets = genAttrs cfg.lsp.servers (_: {enable = true;}); servers = genAttrs cfg.lsp.servers (_: { - filetypes = ["yaml"]; + filetypes = ["yaml" "yaml.gitlab"]; }); }; }) diff --git a/modules/plugins/lsp/presets/default.nix b/modules/plugins/lsp/presets/default.nix index 193a1ef1..e57ca87e 100644 --- a/modules/plugins/lsp/presets/default.nix +++ b/modules/plugins/lsp/presets/default.nix @@ -19,12 +19,13 @@ ./emmet-ls.nix ./fish-lsp.nix ./fsautocomplete.nix + ./gitlab-ci-ls.nix ./gleam.nix ./glsl_analyzer.nix ./gopls.nix ./harper.nix - ./helm-ls.nix ./haskell-language-server.nix + ./helm-ls.nix ./intelephense.nix ./jdt-language-server.nix ./jinja-lsp.nix diff --git a/modules/plugins/lsp/presets/gitlab-ci-ls.nix b/modules/plugins/lsp/presets/gitlab-ci-ls.nix new file mode 100644 index 00000000..8a952c45 --- /dev/null +++ b/modules/plugins/lsp/presets/gitlab-ci-ls.nix @@ -0,0 +1,24 @@ +{ + config, + lib, + pkgs, + ... +}: let + inherit (lib.meta) getExe; + inherit (lib.modules) mkIf; + inherit (lib.nvim.types) mkLspPresetEnableOption; + + cfg = config.vim.lsp.presets.gitlab-ci-ls; +in { + options.vim.lsp.presets.gitlab-ci-ls = { + enable = mkLspPresetEnableOption "gitlab-ci-ls" "GitLab CI" []; + }; + + config = mkIf cfg.enable { + vim.lsp.servers.gitlab-ci-ls = { + enable = true; + cmd = [(getExe pkgs.gitlab-ci-ls)]; + root_markers = [".git" ".gitlab"]; + }; + }; +}