nix-community.nixvim/plugins/git/neogit/default.nix
2024-03-01 08:16:43 +01:00

104 lines
2.6 KiB
Nix

{
lib,
helpers,
config,
pkgs,
...
}:
with lib;
helpers.neovim-plugin.mkNeovimPlugin config {
name = "neogit";
defaultPackage = pkgs.vimPlugins.neogit;
extraPackages = [pkgs.git];
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";
};
};
};
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 =
optional
(hasInfix "which" (cfg.settings.commit_view.verify_commit.__raw or ""))
pkgs.which;
};
}