nix-community.nixvim/plugins/by-name/neogit/settings-options.nix
Austin Horstman 09e857bfdd
plugins/neogit: options -> settings-options
To ignore file from list-plugins
2025-02-01 22:00:32 -06:00

431 lines
12 KiB
Nix

{ 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.");
}