Skip to content

Commit

Permalink
plugins/gitmessenger: migrate to mkVimPlugin
Browse files Browse the repository at this point in the history
  • Loading branch information
GaetanLepage committed Dec 16, 2024
1 parent ad87ec8 commit 9062a66
Show file tree
Hide file tree
Showing 3 changed files with 151 additions and 86 deletions.
1 change: 0 additions & 1 deletion flake-modules/dev/list-plugins/list-plugins.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ class State(Enum):
"plugins/by-name/chadtree/default.nix": (State.OLD, Kind.NEOVIM, False),
"plugins/by-name/coq-thirdparty/default.nix": (State.OLD, Kind.NEOVIM, False),
"plugins/by-name/dap/default.nix": (State.OLD, Kind.NEOVIM, False),
"plugins/by-name/gitmessenger/default.nix": (State.OLD, Kind.VIM, False),
"plugins/by-name/intellitab/default.nix": (
State.OLD,
Kind.VIM,
Expand Down
201 changes: 116 additions & 85 deletions plugins/by-name/gitmessenger/default.nix
Original file line number Diff line number Diff line change
@@ -1,127 +1,158 @@
{
lib,
helpers,
config,
pkgs,
...
}:
with lib;
{
meta.maintainers = [ maintainers.traxys ];
let
inherit (lib.nixvim) defaultNullOpts;
inherit (lib) types;
in
lib.nixvim.vim-plugin.mkVimPlugin {
name = "gitmessenger";
packPathName = "git-messenger.vim";
package = "git-messenger-vim";
globalPrefix = "git_messenger_";

options.plugins.gitmessenger = {
enable = mkEnableOption "gitmessenger";
maintainers = [ lib.maintainers.GaetanLepage ];

package = lib.mkPackageOption pkgs "git-messenger" {
default = [
"vimPlugins"
"git-messenger-vim"
];
extraOptions = {
gitPackage = lib.mkPackageOption pkgs "git" {
nullable = true;
};
};

extraConfig = cfg: {
extraPackages = [ cfg.gitPackage ];
};

# TODO: Added 2024-12-16; remove after 25.05
optionsRenamedToSettings = [
"closeOnCursorMoved"
"includeDiff"
"gitCommand"
"noDefaultMappings"
"intoPopupAfterShow"
"alwaysIntoPopup"
"extraBlameArgs"
"previewMods"
"maxPopupHeight"
"maxPopupWidth"
"dateFormat"
"concealWordDiffMarker"
"floatingWinOps"
"popupContentMargins"
];

closeOnCursorMoved = helpers.defaultNullOpts.mkBool true ''
settingsOptions = {
close_on_cursor_moved = defaultNullOpts.mkBool true ''
A popup window is no longer closed automatically when moving a cursor after the window is
shown up.
'';
includeDiff =
helpers.defaultNullOpts.mkEnumFirstDefault

include_diff =
defaultNullOpts.mkEnumFirstDefault
[
"none"
"current"
"all"
]
''
When this value is not set to "none", a popup window includes diff hunks of the commit at
showing up. "current" includes diff hunks of only current file in the commit. "all" includes
all diff hunks in the commit.
When this value is not set to `"none"`, a popup window includes diff hunks of the commit
at showing up.
`"current"` includes diff hunks of only current file in the commit.
`"all"` includes all diff hunks in the commit.
Please note that typing d/D or r/R in popup window toggle showing diff hunks even if this
value is set to "none".
Please note that typing `d`/`D` or `r`/`R` in popup window toggle showing diff hunks even
if this value is set to `"none"`.
'';
gitCommand = helpers.defaultNullOpts.mkStr "git" "git command to retrieve commit messages.";
noDefaultMappings = helpers.defaultNullOpts.mkBool false "When this value is set, it does not define any key mappings";
intoPopupAfterShow = helpers.defaultNullOpts.mkBool true ''
When this value is set to v:false, running :GitMessenger or <plug>(git-messenger) again after
showing a popup does not move the cursor in the window.

git_command = defaultNullOpts.mkStr "git" ''
`git` command to retrieve commit messages.
If your `git` executable is not in `$PATH` directories, please specify the path to the
executable.
'';

no_default_mappings = defaultNullOpts.mkBool false ''
When this value is set, it does not define any key mappings.
'';
alwaysIntoPopup = helpers.defaultNullOpts.mkBool false ''
When this value is set to v:true, the cursor goes into a popup window when running
:GitMessenger or <Plug>(git-messenger).

into_popup_after_show = defaultNullOpts.mkBool true ''
When this value is set to `false`, running `:GitMessenger` or `<plug>(git-messenger)` again
after showing a popup does not move the cursor in the window.
'';
extraBlameArgs = helpers.defaultNullOpts.mkStr "" ''

always_into_popup = defaultNullOpts.mkBool false ''
When this value is set to `true`, the cursor goes into a popup window when running
`:GitMessenger` or `<Plug>(git-messenger)`.
'';

extra_blame_args = defaultNullOpts.mkStr "" ''
When this variable is set the contents will be appended to the git blame command. Use it to
add options (like -w).
'';
previewMods = helpers.defaultNullOpts.mkStr "" ''

preview_mods = defaultNullOpts.mkStr "" ''
This variable is effective only when opening preview window (on Neovim (0.3.0 or earlier)
or Vim).
Command modifiers for opening preview window. The value will be passed as prefix of :pedit
command. For example, setting "botright" to the variable opens a preview window at bottom of
the current window. Please see :help <mods> for more details.
'';
Command modifiers for opening preview window.
The value will be passed as prefix of `:pedit` command.
maxPopupHeight = mkOption {
type = types.nullOr types.int;
default = null;
description = ''
Max lines of popup window in an integer value. Setting null means no limit.
'';
};
For example, setting `"botright"` to the variable opens a preview window at bottom of the
current window.
Please see `:help <mods>` for more details.
'';

maxPopupWidth = mkOption {
type = types.nullOr types.int;
default = null;
description = ''
Max characters of popup window in an integer value. Setting null means no limit.
'';
};
max_popup_height = defaultNullOpts.mkUnsignedInt null ''
Max lines of popup window in an integer value.
Setting `null` means no limit.
'';

dateFormat = helpers.defaultNullOpts.mkStr "%c" ''
String value to format dates in popup window. Please see :help strftime() to know the details
of the format.
max_popup_width = defaultNullOpts.mkUnsignedInt null ''
Max characters of popup window in an integer value.
Setting `null` means no limit.
'';

concealWordDiffMarker = helpers.defaultNullOpts.mkBool true ''
When this value is set to v:true, markers for word diffs like [-, -], {+, +} are concealed.
Set false when you don't want to hide them.
date_format = defaultNullOpts.mkStr "%c" ''
String value to format dates in popup window.
Note: Word diff is enabled by typing "r" in a popup window.
Please see `:help strftime()` to know the details of the format.
'';

floatingWinOps = helpers.defaultNullOpts.mkAttrsOf types.anything { } ''
Options passed to nvim_open_win() on opening a popup window. This is useful when you want to
override some window options.
'';
conceal_word_diff_marker = defaultNullOpts.mkBool true ''
When this value is set to `true`, markers for word diffs like `[-, -]`, `{+, +}` are
concealed.
Set `false` when you don't want to hide them.
popupContentMargins = helpers.defaultNullOpts.mkBool true ''
Setting true means adding margins in popup window. Blank lines at the top and bottom of popup
content are inserted. And every line is indented with one whitespace character. Setting false
to this variable removes all the margins.
Note: Word diff is enabled by typing `r` in a popup window.
'';
};

config =
let
cfg = config.plugins.gitmessenger;
in
mkIf cfg.enable {
extraPlugins = [ cfg.package ];
globals = {
git_messenger_close_on_cursor_moved = cfg.closeOnCursorMoved;
git_messenger_include_diff = cfg.includeDiff;
git_messenger_git_command = cfg.gitCommand;
git_messenger_no_default_mappings = cfg.noDefaultMappings;
git_messenger_into_popup_after_show = cfg.intoPopupAfterShow;
git_messenger_always_into_popup = cfg.alwaysIntoPopup;
git_messenger_extra_blame_args = cfg.extraBlameArgs;
git_messenger_preview_mods = cfg.previewMods;
git_messenger_max_popup_height = cfg.maxPopupHeight;
git_messenger_max_popup_width = cfg.maxPopupWidth;
git_messenger_date_format = cfg.dateFormat;
git_messenger_conceal_word_diff_marker = cfg.concealWordDiffMarker;
git_messenger_floating_win_opts = cfg.floatingWinOps;
git_messenger_popup_content_margins = cfg.popupContentMargins;
floating_win_opts = defaultNullOpts.mkAttrsOf' {
type = types.anything;
pluginDefault = { };
example = {
border = "single";
};
description = ''
Options passed to `nvim_open_win()` on opening a popup window.
This is useful when you want to override some window options.
'';
};

popup_content_margins = defaultNullOpts.mkBool true ''
Setting `true` means adding margins in popup window.
Blank lines at the top and bottom of popup content are inserted.
And every line is indented with one whitespace character.
Setting `false` to this variable removes all the margins.
'';
};

settingsExample = {
extra_blame_args = "-w";
include_diff = "current";
floating_win_opts.border = "single";
};
}
35 changes: 35 additions & 0 deletions tests/test-sources/plugins/by-name/gitmessenger/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,39 @@
empty = {
plugins.gitmessenger.enable = true;
};

defaults = {
plugins.gitmessenger = {
enable = true;

settings = {
close_on_cursor_moved = true;
include_diff = "none";
git_command = "git";
no_default_mappings = false;
into_popup_after_show = true;
always_into_popup = false;
extra_blame_args = "";
preview_mods = "";
max_popup_height = null;
max_popup_width = null;
date_format = "%c";
conceal_word_diff_marker = true;
floating_win_opts = { };
popup_content_margins = true;
};
};
};

example = {
plugins.gitmessenger = {
enable = true;

settings = {
extra_blame_args = "-w";
include_diff = "current";
floating_win_opts.border = "single";
};
};
};
}

0 comments on commit 9062a66

Please sign in to comment.