diff --git a/configuration.nix b/configuration.nix index b5683ea..a3ab7bf 100644 --- a/configuration.nix +++ b/configuration.nix @@ -73,6 +73,7 @@ isMaximal: { }; csharp.enable = isMaximal; julia.enable = isMaximal; + vala.enable = isMaximal; }; visuals = { diff --git a/docs/release-notes/rl-0.7.md b/docs/release-notes/rl-0.7.md index 351a0dc..87df91e 100644 --- a/docs/release-notes/rl-0.7.md +++ b/docs/release-notes/rl-0.7.md @@ -292,6 +292,7 @@ To migrate to `nixfmt`, simply change `vim.languages.nix.format.type` to - Add LSP, diagnostics, formatter and Treesitter support for Kotlin under `vim.languages.kotlin` - changed default keybinds for leap.nvim to avoid altering expected behavior +- Add LSP, formatter and Treesitter support for Vala under `vim.languages.vala` [Bloxx12](https://github.com/Bloxx12) diff --git a/modules/plugins/languages/default.nix b/modules/plugins/languages/default.nix index a0a5791..1ec2b68 100644 --- a/modules/plugins/languages/default.nix +++ b/modules/plugins/languages/default.nix @@ -14,6 +14,7 @@ in { ./lua.nix ./markdown.nix ./nim.nix + ./vala.nix ./nix.nix ./ocaml.nix ./php.nix diff --git a/modules/plugins/languages/vala.nix b/modules/plugins/languages/vala.nix new file mode 100644 index 0000000..da65a37 --- /dev/null +++ b/modules/plugins/languages/vala.nix @@ -0,0 +1,79 @@ +{ + config, + pkgs, + lib, + ... +}: let + inherit (builtins) attrNames; + inherit (lib.options) mkEnableOption mkOption; + inherit (lib.modules) mkIf mkMerge; + inherit (lib.lists) isList; + inherit (lib.types) enum either listOf package str; + inherit (lib.nvim.types) mkGrammarOption; + inherit (lib.nvim.lua) expToLua; + + cfg = config.vim.languages.vala; + + defaultServer = "vala_ls"; + servers = { + vala_ls = { + package = pkgs.symlinkJoin { + name = "vala-language-server-wrapper"; + paths = [pkgs.vala-language-server]; + buildInputs = [pkgs.makeBinaryWrapper]; + postBuild = '' + wrapProgram $out/bin/vala-language-server \ + --prefix PATH : ${pkgs.uncrustify}/bin + ''; + }; + internalFormatter = true; + lspConfig = '' + lspconfig.vala_ls.setup { + capabilities = capabilities; + on_attach = default_on_attach; + cmd = ${ + if isList cfg.lsp.package + then expToLua cfg.lsp.package + else ''{"${cfg.lsp.package}/bin/vala-language-server"}'' + }, + } + ''; + }; + }; +in { + options.vim.languages.vala = { + enable = mkEnableOption "Vala language support"; + + treesitter = { + enable = mkEnableOption "Vala treesitter" // {default = config.vim.languages.enableTreesitter;}; + package = mkGrammarOption pkgs "vala"; + }; + + lsp = { + enable = mkEnableOption "Vala LSP support" // {default = config.vim.languages.enableLSP;}; + server = mkOption { + description = "Vala LSP server to use"; + type = enum (attrNames servers); + default = defaultServer; + }; + + package = mkOption { + description = "Vala LSP server package, or the command to run as a list of strings"; + type = either package (listOf str); + default = servers.${cfg.lsp.server}.package; + }; + }; + }; + + 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.lspconfig.enable = true; + vim.lsp.lspconfig.sources.vala_ls = servers.${cfg.lsp.server}.lspConfig; + }) + ]); +}