-
-
Notifications
You must be signed in to change notification settings - Fork 293
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
plugins/gitmessenger: migrate to mkVimPlugin
- Loading branch information
1 parent
ad87ec8
commit 9062a66
Showing
3 changed files
with
151 additions
and
86 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"; | ||
}; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters