From d7967f3ffd2e4dc1bc6af59e1cacad34dd64b0b9 Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Thu, 6 Apr 2023 16:11:40 +0200 Subject: [PATCH] plugins/treesitter-rainbow: add plugin + test --- plugins/default.nix | 1 + .../treesitter/treesitter-rainbow.nix | 66 +++++++++++++++++++ .../treesitter/treesitter-rainbow.nix | 30 +++++++++ 3 files changed, 97 insertions(+) create mode 100644 plugins/languages/treesitter/treesitter-rainbow.nix create mode 100644 tests/test-sources/plugins/languages/treesitter/treesitter-rainbow.nix diff --git a/plugins/default.nix b/plugins/default.nix index 7e6ff848..fd2d1280 100644 --- a/plugins/default.nix +++ b/plugins/default.nix @@ -39,6 +39,7 @@ ./languages/treesitter/treesitter.nix ./languages/treesitter/treesitter-context.nix ./languages/treesitter/treesitter-playground.nix + ./languages/treesitter/treesitter-rainbow.nix ./languages/treesitter/treesitter-refactor.nix ./languages/vimtex.nix ./languages/zig.nix diff --git a/plugins/languages/treesitter/treesitter-rainbow.nix b/plugins/languages/treesitter/treesitter-rainbow.nix new file mode 100644 index 00000000..808caef7 --- /dev/null +++ b/plugins/languages/treesitter/treesitter-rainbow.nix @@ -0,0 +1,66 @@ +{ + pkgs, + lib, + config, + ... +}: +with lib; let + helpers = import ../../helpers.nix {inherit lib;}; +in { + options.plugins.treesitter-rainbow = + helpers.extraOptionsOptions + // { + enable = mkEnableOption "treesitter-rainbow"; + + package = helpers.mkPackageOption "treesitter-rainbow" pkgs.vimPlugins.nvim-ts-rainbow2; + + disable = + helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" + "List of languages you want to disable the plugin for."; + + query = + helpers.defaultNullOpts.mkStr "rainbow-parens" + "The query to use for finding delimiters."; + + strategy = + helpers.defaultNullOpts.mkStr "require('ts-rainbow').strategy.global" + "The query to use for finding delimiters. Directly provide lua code."; + + hlgroups = + helpers.defaultNullOpts.mkNullable (types.listOf types.str) + '' + [ + "TSRainbowRed" + "TSRainbowYellow" + "TSRainbowBlue" + "TSRainbowOrange" + "TSRainbowGreen" + "TSRainbowViolet" + "TSRainbowCyan" + ] + '' + "The list of highlight groups to apply."; + }; + + config = let + cfg = config.plugins.treesitter-rainbow; + in + mkIf cfg.enable { + warnings = mkIf (!config.plugins.treesitter.enable) [ + "Nixvim: treesitter-rainbow needs treesitter to function as intended" + ]; + + extraPlugins = [cfg.package]; + + plugins.treesitter.moduleConfig.rainbow = + { + enable = true; + + inherit (cfg) disable; + inherit (cfg) query; + strategy = helpers.ifNonNull' cfg.strategy (helpers.mkRaw cfg.strategy); + inherit (cfg) hlgroups; + } + // cfg.extraOptions; + }; +} diff --git a/tests/test-sources/plugins/languages/treesitter/treesitter-rainbow.nix b/tests/test-sources/plugins/languages/treesitter/treesitter-rainbow.nix new file mode 100644 index 00000000..2686a7b5 --- /dev/null +++ b/tests/test-sources/plugins/languages/treesitter/treesitter-rainbow.nix @@ -0,0 +1,30 @@ +{pkgs}: { + empty = { + plugins = { + treesitter.enable = true; + treesitter-rainbow.enable = true; + }; + }; + + default = { + plugins = { + treesitter.enable = true; + treesitter-rainbow = { + enable = true; + + disable = []; + query = "rainbow-parens"; + strategy = "require('ts-rainbow').strategy.global"; + hlgroups = [ + "TSRainbowRed" + "TSRainbowYellow" + "TSRainbowBlue" + "TSRainbowOrange" + "TSRainbowGreen" + "TSRainbowViolet" + "TSRainbowCyan" + ]; + }; + }; + }; +}