From 9f8ce75653d0c0a6d0175166e6dd0286a58fe5ef Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Wed, 16 Aug 2023 12:17:19 +0200 Subject: [PATCH] plugins/instant: init + test --- plugins/default.nix | 1 + plugins/utils/indent-blankline.nix | 8 +- plugins/utils/instant.nix | 110 +++++++++++++++++++ tests/test-sources/plugins/utils/instant.nix | 28 +++++ 4 files changed, 144 insertions(+), 3 deletions(-) create mode 100644 plugins/utils/instant.nix create mode 100644 tests/test-sources/plugins/utils/instant.nix diff --git a/plugins/default.nix b/plugins/default.nix index 63158f02..bd1ff33f 100644 --- a/plugins/default.nix +++ b/plugins/default.nix @@ -98,6 +98,7 @@ ./utils/harpoon.nix ./utils/illuminate.nix ./utils/indent-blankline.nix + ./utils/instant.nix ./utils/intellitab.nix ./utils/lastplace.nix ./utils/leap.nix diff --git a/plugins/utils/indent-blankline.nix b/plugins/utils/indent-blankline.nix index e465ae8a..35a9c3f8 100644 --- a/plugins/utils/indent-blankline.nix +++ b/plugins/utils/indent-blankline.nix @@ -253,9 +253,11 @@ in { description = '' Extra configuration options for indent-blankline without the 'indent_blankline_' prefix. Example: To set 'indent_blankline_foobar' to 1, write - extraConfig = { - foobar = true; - }; + ```nix + extraConfig = { + foobar = true; + }; + ``` ''; }; }; diff --git a/plugins/utils/instant.nix b/plugins/utils/instant.nix new file mode 100644 index 00000000..cbb350bb --- /dev/null +++ b/plugins/utils/instant.nix @@ -0,0 +1,110 @@ +{ + lib, + pkgs, + config, + ... +} @ args: +with lib; let + helpers = import ../helpers.nix args; +in { + options.plugins.instant = { + enable = mkEnableOption "instant.nvim"; + + package = helpers.mkPackageOption "instant" pkgs.vimPlugins.instant-nvim; + + username = mkOption { + type = with types; nullOr str; + description = '' + Username. + Explicitly set to `null` if you do not want this option to be set. + ''; + }; + + onlyCwd = helpers.defaultNullOpts.mkBool true '' + Choose whether to share files only in the current working directory in session mode. + ''; + + cursorHlGroupUser1 = helpers.defaultNullOpts.mkStr "Cursor" '' + Cursor highlight group for user 1. + ''; + + cursorHlGroupUser2 = helpers.defaultNullOpts.mkStr "Cursor" '' + Cursor highlight group for user 2. + ''; + + cursorHlGroupUser3 = helpers.defaultNullOpts.mkStr "Cursor" '' + Cursor highlight group for user 3. + ''; + + cursorHlGroupUser4 = helpers.defaultNullOpts.mkStr "Cursor" '' + Cursor highlight group for user 4. + ''; + + cursorHlGroupDefault = helpers.defaultNullOpts.mkStr "Cursor" '' + Cursor highlight group for any other userr. + ''; + + nameHlGroupUser1 = helpers.defaultNullOpts.mkStr "CursorLineNr" '' + Virtual text highlight group for user 1. + ''; + + nameHlGroupUser2 = helpers.defaultNullOpts.mkStr "CursorLineNr" '' + Virtual text highlight group for user 2. + ''; + + nameHlGroupUser3 = helpers.defaultNullOpts.mkStr "CursorLineNr" '' + Virtual text highlight group for user 3. + ''; + + nameHlGroupUser4 = helpers.defaultNullOpts.mkStr "CursorLineNr" '' + Virtual text highlight group for user 4. + ''; + + nameHlGroupDefault = helpers.defaultNullOpts.mkStr "CursorLineNr" '' + Virtual text highlight group for any other user. + ''; + + extraOptions = mkOption { + type = types.attrs; + default = {}; + description = '' + Extra configuration options for instant without the 'instant_' prefix. + Example: To set 'instant_foobar' to 1, write + ```nix + extraConfig = { + foobar = true; + }; + ``` + ''; + }; + }; + + config = let + cfg = config.plugins.instant; + in + mkIf cfg.enable { + extraPlugins = [cfg.package]; + + globals = + mapAttrs' + (name: nameValuePair ("instant_" + name)) + ( + with cfg; + { + inherit username; + only_cwd = onlyCwd; + cursor_hl_group_user_1 = cursorHlGroupUser1; + cursor_hl_group_user_2 = cursorHlGroupUser2; + cursor_hl_group_user_3 = cursorHlGroupUser3; + cursor_hl_group_user_4 = cursorHlGroupUser4; + cursor_hl_group_default = cursorHlGroupDefault; + name_hl_group_user_1 = nameHlGroupUser1; + name_hl_group_user_2 = nameHlGroupUser2; + name_hl_group_user_3 = nameHlGroupUser3; + name_hl_group_user_4 = nameHlGroupUser4; + name_hl_group_default = nameHlGroupDefault; + } + // extraOptions + ); + }; +} diff --git a/tests/test-sources/plugins/utils/instant.nix b/tests/test-sources/plugins/utils/instant.nix new file mode 100644 index 00000000..be98b5f1 --- /dev/null +++ b/tests/test-sources/plugins/utils/instant.nix @@ -0,0 +1,28 @@ +{ + empty = { + plugins.instant = { + enable = true; + username = null; + }; + }; + + example = { + plugins.instant = { + enable = true; + + username = "Joe"; + onlyCwd = true; + cursorHlGroupUser1 = "Cursor"; + cursorHlGroupUser2 = "Cursor"; + cursorHlGroupUser3 = "Cursor"; + cursorHlGroupUser4 = "Cursor"; + cursorHlGroupDefault = "Cursor"; + nameHlGroupUser1 = "CursorLineNr"; + nameHlGroupUser2 = "CursorLineNr"; + nameHlGroupUser3 = "CursorLineNr"; + nameHlGroupUser4 = "CursorLineNr"; + nameHlGroupDefault = "CursorLineNr"; + extraOptions = {}; + }; + }; +}