mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 00:25:42 +02:00
plugins/git: move to by-name
This commit is contained in:
parent
d016b139fc
commit
2a91b89445
29 changed files with 0 additions and 15 deletions
134
plugins/by-name/neogit/default.nix
Normal file
134
plugins/by-name/neogit/default.nix
Normal file
|
@ -0,0 +1,134 @@
|
|||
{
|
||||
lib,
|
||||
helpers,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
helpers.neovim-plugin.mkNeovimPlugin {
|
||||
name = "neogit";
|
||||
|
||||
maintainers = [ maintainers.GaetanLepage ];
|
||||
|
||||
# TODO introduced 2024-02-29: remove 2024-04-29
|
||||
deprecateExtraOptions = true;
|
||||
imports =
|
||||
map
|
||||
(
|
||||
optionPath:
|
||||
mkRemovedOptionModule
|
||||
(
|
||||
[
|
||||
"plugins"
|
||||
"neogit"
|
||||
]
|
||||
++ optionPath
|
||||
)
|
||||
"This option has been removed upstream. Please refer to the plugin documentation to update your configuration."
|
||||
)
|
||||
[
|
||||
[ "disableCommitConfirmation" ]
|
||||
[ "disableBuiltinNotifications" ]
|
||||
[ "useMagitKeybindings " ]
|
||||
[ "commitPopup" ]
|
||||
[
|
||||
"sections"
|
||||
"unmerged"
|
||||
]
|
||||
[
|
||||
"sections"
|
||||
"unpulled"
|
||||
]
|
||||
];
|
||||
optionsRenamedToSettings = [
|
||||
"disableSigns"
|
||||
"disableHint"
|
||||
"disableContextHighlighting"
|
||||
"autoRefresh"
|
||||
"graphStyle"
|
||||
"kind"
|
||||
"signs"
|
||||
"integrations"
|
||||
[
|
||||
"sections"
|
||||
"untracked"
|
||||
]
|
||||
[
|
||||
"sections"
|
||||
"unstaged"
|
||||
]
|
||||
[
|
||||
"sections"
|
||||
"staged"
|
||||
]
|
||||
[
|
||||
"sections"
|
||||
"stashes"
|
||||
]
|
||||
[
|
||||
"sections"
|
||||
"recent"
|
||||
]
|
||||
"mappings"
|
||||
];
|
||||
|
||||
settingsOptions = import ./options.nix { inherit lib helpers; };
|
||||
|
||||
settingsExample = {
|
||||
kind = "floating";
|
||||
commit_popup.kind = "floating";
|
||||
preview_buffer.kind = "floating";
|
||||
popup.kind = "floating";
|
||||
integrations.diffview = false;
|
||||
disable_commit_confirmation = true;
|
||||
disable_builtin_notifications = true;
|
||||
sections = {
|
||||
untracked.folded = false;
|
||||
unstaged.folded = false;
|
||||
staged.folded = false;
|
||||
stashes.folded = false;
|
||||
unpulled.folded = false;
|
||||
unmerged.folded = true;
|
||||
recent.folded = true;
|
||||
};
|
||||
mappings = {
|
||||
status = {
|
||||
l = "Toggle";
|
||||
a = "Stage";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
extraOptions = {
|
||||
gitPackage = lib.mkPackageOption pkgs "git" {
|
||||
nullable = true;
|
||||
};
|
||||
};
|
||||
|
||||
extraConfig = cfg: {
|
||||
assertions =
|
||||
map
|
||||
(name: {
|
||||
assertion =
|
||||
let
|
||||
enabled = cfg.settings.integrations.${name};
|
||||
isEnabled = (isBool enabled) && enabled;
|
||||
in
|
||||
isEnabled -> config.plugins.${name}.enable;
|
||||
message = ''
|
||||
Nixvim (plugins.neogit): You have enabled the `${name}` integration, but `plugins.${name}.enable` is `false`.
|
||||
'';
|
||||
})
|
||||
[
|
||||
"telescope"
|
||||
"diffview"
|
||||
"fzf-lua"
|
||||
];
|
||||
|
||||
extraPackages = [
|
||||
cfg.gitPackage
|
||||
] ++ optional (hasInfix "which" (cfg.settings.commit_view.verify_commit.__raw or "")) pkgs.which;
|
||||
|
||||
};
|
||||
}
|
429
plugins/by-name/neogit/options.nix
Normal file
429
plugins/by-name/neogit/options.nix
Normal file
|
@ -0,0 +1,429 @@
|
|||
{ lib, helpers }:
|
||||
with lib;
|
||||
let
|
||||
mkKindOption = helpers.defaultNullOpts.mkEnum [
|
||||
"split"
|
||||
"vsplit"
|
||||
"split_above"
|
||||
"tab"
|
||||
"floating"
|
||||
"replace"
|
||||
"auto"
|
||||
];
|
||||
in
|
||||
{
|
||||
filewatcher = {
|
||||
enabled = helpers.defaultNullOpts.mkBool true ''
|
||||
When enabled, will watch the `.git/` directory for changes and refresh the status buffer
|
||||
in response to filesystem events.
|
||||
'';
|
||||
};
|
||||
|
||||
graph_style =
|
||||
helpers.defaultNullOpts.mkEnumFirstDefault
|
||||
[
|
||||
"ascii"
|
||||
"unicode"
|
||||
]
|
||||
''
|
||||
- "ascii" is the graph the git CLI generates
|
||||
- "unicode" is the graph like https://github.com/rbong/vim-flog
|
||||
'';
|
||||
|
||||
disable_hint = helpers.defaultNullOpts.mkBool false ''
|
||||
Hides the hints at the top of the status buffer.
|
||||
'';
|
||||
|
||||
disable_context_highlighting = helpers.defaultNullOpts.mkBool false ''
|
||||
Disables changing the buffer highlights based on where the cursor is.
|
||||
'';
|
||||
|
||||
disable_signs = helpers.defaultNullOpts.mkBool false ''
|
||||
Disables signs for sections/items/hunks.
|
||||
'';
|
||||
|
||||
git_services = helpers.defaultNullOpts.mkAttrsOf types.str {
|
||||
"github.com" = "https://github.com/$\{owner}/$\{repository}/compare/$\{branch_name}?expand=1";
|
||||
"bitbucket.org" = "https://bitbucket.org/$\{owner}/$\{repository}/pull-requests/new?source=$\{branch_name}&t=1";
|
||||
"gitlab.com" = "https://gitlab.com/$\{owner}/$\{repository}/merge_requests/new?merge_request[source_branch]=$\{branch_name}";
|
||||
} "Used to generate URL's for branch popup action 'pull request'.";
|
||||
|
||||
fetch_after_checkout = helpers.defaultNullOpts.mkBool false ''
|
||||
Perform a fetch if the newly checked out branch has an upstream or pushRemote set.
|
||||
'';
|
||||
|
||||
telescope_sorter = helpers.mkNullOrLuaFn ''
|
||||
Allows a different telescope sorter.
|
||||
Defaults to 'fuzzy_with_index_bias'.
|
||||
The example below will use the native fzf sorter instead.
|
||||
By default, this function returns `nil`.
|
||||
|
||||
Example:
|
||||
```lua
|
||||
require("telescope").extensions.fzf.native_fzf_sorter
|
||||
```
|
||||
'';
|
||||
|
||||
disable_insert_on_commit =
|
||||
helpers.defaultNullOpts.mkNullable (with types; either bool (enum [ "auto" ])) "auto"
|
||||
''
|
||||
Changes what mode the Commit Editor starts in.
|
||||
`true` will leave nvim in normal mode, `false` will change nvim to insert mode, and `"auto"`
|
||||
will change nvim to insert mode IF the commit message is empty, otherwise leaving it in normal
|
||||
mode.
|
||||
'';
|
||||
|
||||
use_per_project_settings = helpers.defaultNullOpts.mkBool true ''
|
||||
Scope persisted settings on a per-project basis.
|
||||
'';
|
||||
|
||||
remember_settings = helpers.defaultNullOpts.mkBool true ''
|
||||
Persist the values of switches/options within and across sessions.
|
||||
'';
|
||||
|
||||
auto_refresh = helpers.defaultNullOpts.mkBool true ''
|
||||
Neogit refreshes its internal state after specific events, which can be expensive depending on
|
||||
the repository size.
|
||||
Disabling `auto_refresh` will make it so you have to manually refresh the status after you open
|
||||
it.
|
||||
'';
|
||||
|
||||
sort_branches = helpers.defaultNullOpts.mkStr "-committerdate" ''
|
||||
Value used for `--sort` option for `git branch` command.
|
||||
By default, branches will be sorted by commit date descending.
|
||||
Flag description: https://git-scm.com/docs/git-branch#Documentation/git-branch.txt---sortltkeygt
|
||||
Sorting keys: https://git-scm.com/docs/git-for-each-ref#_options
|
||||
'';
|
||||
|
||||
kind = mkKindOption "tab" ''
|
||||
Change the default way of opening neogit.
|
||||
'';
|
||||
|
||||
disable_line_numbers = helpers.defaultNullOpts.mkBool true ''
|
||||
Disable line numbers and relative line numbers.
|
||||
'';
|
||||
|
||||
console_timeout = helpers.defaultNullOpts.mkUnsignedInt 2000 ''
|
||||
The time after which an output console is shown for slow running commands.
|
||||
'';
|
||||
|
||||
auto_show_console = helpers.defaultNullOpts.mkBool true ''
|
||||
Automatically show console if a command takes more than `consoleTimeout` milliseconds.
|
||||
'';
|
||||
|
||||
status = {
|
||||
recent_commit_count = helpers.defaultNullOpts.mkUnsignedInt 10 ''
|
||||
Recent commit count in the status buffer.
|
||||
'';
|
||||
};
|
||||
|
||||
commit_editor = {
|
||||
kind = mkKindOption "auto" "The type of window that should be opened.";
|
||||
};
|
||||
|
||||
commit_select_view = {
|
||||
kind = mkKindOption "tab" "The type of window that should be opened.";
|
||||
};
|
||||
|
||||
commit_view = {
|
||||
kind = mkKindOption "vsplit" "The type of window that should be opened.";
|
||||
|
||||
verify_commit = helpers.mkNullOrStrLuaOr types.bool ''
|
||||
Show commit signature information in the buffer.
|
||||
Can be set to true or false, otherwise we try to find the binary.
|
||||
|
||||
Default: "os.execute('which gpg') == 0"
|
||||
'';
|
||||
};
|
||||
|
||||
log_view = {
|
||||
kind = mkKindOption "tab" "The type of window that should be opened.";
|
||||
};
|
||||
|
||||
rebase_editor = {
|
||||
kind = mkKindOption "auto" "The type of window that should be opened.";
|
||||
};
|
||||
|
||||
reflog_view = {
|
||||
kind = mkKindOption "tab" "The type of window that should be opened.";
|
||||
};
|
||||
|
||||
merge_editor = {
|
||||
kind = mkKindOption "auto" "The type of window that should be opened.";
|
||||
};
|
||||
|
||||
description_editor = {
|
||||
kind = mkKindOption "auto" "The type of window that should be opened.";
|
||||
};
|
||||
|
||||
tag_editor = {
|
||||
kind = mkKindOption "auto" "The type of window that should be opened.";
|
||||
};
|
||||
|
||||
preview_buffer = {
|
||||
kind = mkKindOption "split" "The type of window that should be opened.";
|
||||
};
|
||||
|
||||
popup = {
|
||||
kind = mkKindOption "split" "The type of window that should be opened.";
|
||||
};
|
||||
|
||||
signs =
|
||||
mapAttrs
|
||||
(
|
||||
n: v:
|
||||
helpers.defaultNullOpts.mkListOf types.str
|
||||
[
|
||||
"${v.closed}"
|
||||
"${v.opened}"
|
||||
]
|
||||
''
|
||||
The icons to use for open and closed ${n}s.
|
||||
''
|
||||
)
|
||||
{
|
||||
hunk = {
|
||||
closed = "";
|
||||
opened = "";
|
||||
};
|
||||
item = {
|
||||
closed = ">";
|
||||
opened = "v";
|
||||
};
|
||||
section = {
|
||||
closed = ">";
|
||||
opened = "v";
|
||||
};
|
||||
};
|
||||
|
||||
integrations = {
|
||||
telescope = helpers.mkNullOrOption types.bool ''
|
||||
If enabled, use telescope for menu selection rather than `vim.ui.select`.
|
||||
Allows multi-select and some things that `vim.ui.select` doesn't.
|
||||
'';
|
||||
|
||||
diffview = helpers.mkNullOrOption types.bool ''
|
||||
Neogit only provides inline diffs.
|
||||
If you want a more traditional way to look at diffs, you can use `diffview`.
|
||||
The diffview integration enables the diff popup.
|
||||
'';
|
||||
|
||||
fzf-lua = helpers.mkNullOrOption types.bool ''
|
||||
If enabled, uses fzf-lua for menu selection.
|
||||
If the telescope integration is also selected then telescope is used instead.
|
||||
'';
|
||||
};
|
||||
|
||||
sections =
|
||||
mapAttrs
|
||||
(
|
||||
name: default:
|
||||
mkOption {
|
||||
type =
|
||||
with types;
|
||||
nullOr (submodule {
|
||||
options = {
|
||||
folded = mkOption {
|
||||
type = types.bool;
|
||||
description = "Whether or not this section should be open or closed by default.";
|
||||
};
|
||||
|
||||
hidden = mkOption {
|
||||
type = types.bool;
|
||||
description = "Whether or not this section should be shown.";
|
||||
};
|
||||
};
|
||||
});
|
||||
inherit default;
|
||||
description = "Settings for the ${name} section";
|
||||
}
|
||||
)
|
||||
{
|
||||
sequencer = {
|
||||
folded = false;
|
||||
hidden = false;
|
||||
};
|
||||
untracked = {
|
||||
folded = false;
|
||||
hidden = false;
|
||||
};
|
||||
unstaged = {
|
||||
folded = false;
|
||||
hidden = false;
|
||||
};
|
||||
staged = {
|
||||
folded = false;
|
||||
hidden = false;
|
||||
};
|
||||
stashes = {
|
||||
folded = true;
|
||||
hidden = false;
|
||||
};
|
||||
unpulled_upstream = {
|
||||
folded = true;
|
||||
hidden = false;
|
||||
};
|
||||
unmerged_upstream = {
|
||||
folded = false;
|
||||
hidden = false;
|
||||
};
|
||||
unpulled_pushRemote = {
|
||||
folded = true;
|
||||
hidden = false;
|
||||
};
|
||||
unmerged_pushRemote = {
|
||||
folded = false;
|
||||
hidden = false;
|
||||
};
|
||||
recent = {
|
||||
folded = true;
|
||||
hidden = false;
|
||||
};
|
||||
rebase = {
|
||||
folded = true;
|
||||
hidden = false;
|
||||
};
|
||||
};
|
||||
|
||||
ignored_settings =
|
||||
helpers.defaultNullOpts.mkListOf types.str
|
||||
[
|
||||
"NeogitPushPopup--force-with-lease"
|
||||
"NeogitPushPopup--force"
|
||||
"NeogitPullPopup--rebase"
|
||||
"NeogitCommitPopup--allow-empty"
|
||||
"NeogitRevertPopup--no-edit"
|
||||
]
|
||||
''
|
||||
Table of settings to never persist.
|
||||
Uses format "Filetype--cli-value".
|
||||
'';
|
||||
|
||||
mappings =
|
||||
let
|
||||
mkMappingOption = helpers.defaultNullOpts.mkAttrsOf (with types; either str (enum [ false ]));
|
||||
in
|
||||
{
|
||||
commit_editor = mkMappingOption {
|
||||
q = "Close";
|
||||
"<c-c><c-c>" = "Submit";
|
||||
"<c-c><c-k>" = "Abort";
|
||||
"<m-p>" = "PrevMessage";
|
||||
"<m-n>" = "NextMessage";
|
||||
"<m-r>" = "ResetMessage";
|
||||
} "Mappings for the commit editor.";
|
||||
|
||||
commit_editor_I = mkMappingOption {
|
||||
"<c-c><c-c>" = "Submit";
|
||||
"<c-c><c-k>" = "Abort";
|
||||
} "Mappings for the commit editor (insert mode)";
|
||||
|
||||
rebase_editor = mkMappingOption {
|
||||
p = "Pick";
|
||||
r = "Reword";
|
||||
e = "Edit";
|
||||
s = "Squash";
|
||||
f = "Fixup";
|
||||
x = "Execute";
|
||||
d = "Drop";
|
||||
b = "Break";
|
||||
q = "Close";
|
||||
"<cr>" = "OpenCommit";
|
||||
gk = "MoveUp";
|
||||
gj = "MoveDown";
|
||||
"<c-c><c-c>" = "Submit";
|
||||
"<c-c><c-k>" = "Abort";
|
||||
"[c" = "OpenOrScrollUp";
|
||||
"]c" = "OpenOrScrollDown";
|
||||
} "Mappings for the rebase editor.";
|
||||
|
||||
rebase_editor_I = mkMappingOption {
|
||||
"<c-c><c-c>" = "Submit";
|
||||
"<c-c><c-k>" = "Abort";
|
||||
} "Mappings for the rebase editor (insert mode).";
|
||||
|
||||
finder = mkMappingOption {
|
||||
"<cr>" = "Select";
|
||||
"<c-c>" = "Close";
|
||||
"<esc>" = "Close";
|
||||
"<c-n>" = "Next";
|
||||
"<c-p>" = "Previous";
|
||||
"<down>" = "Next";
|
||||
"<up>" = "Previous";
|
||||
"<tab>" = "MultiselectToggleNext";
|
||||
"<s-tab>" = "MultiselectTogglePrevious";
|
||||
"<c-j>" = "NOP";
|
||||
"<ScrollWheelDown>" = "ScrollWheelDown";
|
||||
"<ScrollWheelUp>" = "ScrollWheelUp";
|
||||
"<ScrollWheelLeft>" = "NOP";
|
||||
"<ScrollWheelRight>" = "NOP";
|
||||
"<LeftMouse>" = "MouseClick";
|
||||
"<2-LeftMouse>" = "NOP";
|
||||
} "Mappings for the finder.";
|
||||
|
||||
popup = mkMappingOption {
|
||||
"?" = "HelpPopup";
|
||||
A = "CherryPickPopup";
|
||||
d = "DiffPopup";
|
||||
M = "RemotePopup";
|
||||
P = "PushPopup";
|
||||
X = "ResetPopup";
|
||||
Z = "StashPopup";
|
||||
i = "IgnorePopup";
|
||||
t = "TagPopup";
|
||||
b = "BranchPopup";
|
||||
B = "BisectPopup";
|
||||
w = "WorktreePopup";
|
||||
c = "CommitPopup";
|
||||
f = "FetchPopup";
|
||||
l = "LogPopup";
|
||||
m = "MergePopup";
|
||||
p = "PullPopup";
|
||||
r = "RebasePopup";
|
||||
v = "RevertPopup";
|
||||
} "Mappings for popups.";
|
||||
|
||||
status = mkMappingOption {
|
||||
q = "Close";
|
||||
I = "InitRepo";
|
||||
"1" = "Depth1";
|
||||
"2" = "Depth2";
|
||||
"3" = "Depth3";
|
||||
"4" = "Depth4";
|
||||
"<tab>" = "Toggle";
|
||||
x = "Discard";
|
||||
s = "Stage";
|
||||
S = "StageUnstaged";
|
||||
"<c-s>" = "StageAll";
|
||||
u = "Unstage";
|
||||
K = "Untrack";
|
||||
U = "UnstageStaged";
|
||||
y = "ShowRefs";
|
||||
"$" = "CommandHistory";
|
||||
Y = "YankSelected";
|
||||
"<c-r>" = "RefreshBuffer";
|
||||
"<cr>" = "GoToFile";
|
||||
"<c-v>" = "VSplitOpen";
|
||||
"<c-x>" = "SplitOpen";
|
||||
"<c-t>" = "TabOpen";
|
||||
"{" = "GoToPreviousHunkHeader";
|
||||
"}" = "GoToNextHunkHeader";
|
||||
"[c" = "OpenOrScrollUp";
|
||||
"]c" = "OpenOrScrollDown";
|
||||
} "Mappings for status.";
|
||||
};
|
||||
|
||||
notification_icon = helpers.defaultNullOpts.mkStr "" ''
|
||||
Icon for notifications.
|
||||
'';
|
||||
|
||||
use_default_keymaps = helpers.defaultNullOpts.mkBool true ''
|
||||
Set to false if you want to be responsible for creating _ALL_ keymappings.
|
||||
'';
|
||||
|
||||
highlight = genAttrs [
|
||||
"italic"
|
||||
"bold"
|
||||
"underline"
|
||||
] (n: helpers.defaultNullOpts.mkBool true "Set the ${n} property of the highlight group.");
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue