Skip to content

Commit

Permalink
plugins/git-worktree: migrate to mkNeovimPlugin
Browse files Browse the repository at this point in the history
  • Loading branch information
khaneliman committed Jan 24, 2025
1 parent 4ae6136 commit c7a600c
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 63 deletions.
103 changes: 44 additions & 59 deletions plugins/by-name/git-worktree/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -5,64 +5,59 @@
...
}:
let
cfg = config.plugins.git-worktree;
inherit (lib.nixvim) defaultNullOpts;
in
{
options = {
plugins.git-worktree = {
enable = lib.mkEnableOption "git-worktree";
lib.nixvim.plugins.mkNeovimPlugin {
name = "git-worktree";
packPathName = "git-worktree.nvim";
package = "git-worktree-nvim";

maintainers = [ lib.maintainers.khaneliman ];

package = lib.mkPackageOption pkgs "git-worktree" {
default = [
"vimPlugins"
"git-worktree-nvim"
];
};
settingsOptions = {
change_directory_command = defaultNullOpts.mkStr "cd" ''
The vim command used to change to the new worktree directory.
Set this to `tcd` if you want to only change the `pwd` for the current vim Tab.
'';

gitPackage = lib.mkPackageOption pkgs "git" {
nullable = true;
};
update_on_change = defaultNullOpts.mkBool true ''
If set to true updates the current buffer to point to the new work tree if the file is found in the new project.
Otherwise, the following command will be run.
'';

enableTelescope = lib.mkEnableOption "telescope integration";
update_on_change_command = defaultNullOpts.mkStr "e ." ''
The vim command to run during the `update_on_change` event.
Note, that this command will only be run when the current file is not found in the new worktree.
This option defaults to `e .` which opens the root directory of the new worktree.
'';

changeDirectoryCommand = lib.nixvim.defaultNullOpts.mkStr "cd" ''
The vim command used to change to the new worktree directory.
Set this to `tcd` if you want to only change the `pwd` for the current vim Tab.
'';
clear_jumps_on_change = defaultNullOpts.mkBool true ''
If set to true every time you switch branches, your jumplist will be cleared so that you don't
accidentally go backward to a different branch and edit the wrong files.
'';

updateOnChange = lib.nixvim.defaultNullOpts.mkBool true ''
If set to true updates the current buffer to point to the new work tree if the file is found in the new project.
Otherwise, the following command will be run.
'';
autopush = defaultNullOpts.mkBool false ''
When creating a new worktree, it will push the branch to the upstream then perform a `git rebase`.
'';
};

updateOnChangeCommand = lib.nixvim.defaultNullOpts.mkStr "e ." ''
The vim command to run during the `update_on_change` event.
Note, that this command will only be run when the current file is not found in the new worktree.
This option defaults to `e .` which opens the root directory of the new worktree.
'';
settingsExample = {
change_directory_command = "z";
update_on_change = false;
clear_jumps_on_change = false;
autopush = true;
};

clearJumpsOnChange = lib.nixvim.defaultNullOpts.mkBool true ''
If set to true every time you switch branches, your jumplist will be cleared so that you don't
accidentally go backward to a different branch and edit the wrong files.
'';
extraOptions = {
enableTelescope = lib.mkEnableOption "telescope integration";

autopush = lib.nixvim.defaultNullOpts.mkBool false ''
When creating a new worktree, it will push the branch to the upstream then perform a `git rebase`.
'';
gitPackage = lib.mkPackageOption pkgs "git" {
nullable = true;
};
};

config =
let
setupOptions = with cfg; {
enabled = cfg.enable;
change_directory_command = cfg.changeDirectoryCommand;
update_on_change = cfg.updateOnChange;
update_on_change_command = cfg.updateOnChangeCommand;
clearjumps_on_change = cfg.clearJumpsOnChange;
inherit autopush;
};
in
extraConfig =
cfg:
lib.mkIf cfg.enable {
assertions = [
{
Expand All @@ -71,20 +66,10 @@ in
}
];

extraPlugins = with pkgs.vimPlugins; [
cfg.package
plenary-nvim
];

extraPackages = [ cfg.gitPackage ];

extraConfigLua =
let
telescopeCfg = ''require("telescope").load_extension("git_worktree")'';
in
''
require('git-worktree').setup(${lib.nixvim.toLuaObject setupOptions})
${if cfg.enableTelescope then telescopeCfg else ""}
'';
plugins.telescope.enabledExtensions = lib.mkIf cfg.enableTelescope [ "git_worktree" ];
};

inherit (import ./deprecations.nix) optionsRenamedToSettings;
}
9 changes: 9 additions & 0 deletions plugins/by-name/git-worktree/deprecations.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
optionsRenamedToSettings = [
"changeDirectoryCommand"
"updateOnChange"
"updateOnChangeCommand"
"clearJumpsOnChange"
"autopush"
];
}
11 changes: 7 additions & 4 deletions tests/test-sources/plugins/by-name/git-worktree/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,13 @@
enable = true;

enableTelescope = true;
changeDirectoryCommand = "tcd";
updateOnChange = true;
updateOnChangeCommand = "e .";
clearJumpsOnChange = true;

settings = {
change_directory_command = "tcd";
update_on_change = true;
update_on_change_command = "e .";
clear_jumps_on_change = true;
};
};

plugins.web-devicons.enable = true;
Expand Down

0 comments on commit c7a600c

Please sign in to comment.