nix-community.nixvim/plugins/by-name/gitsigns/default.nix

116 lines
2.7 KiB
Nix

{
lib,
config,
...
}:
let
inherit (lib) flatten mapAttrsToList mkRemovedOptionModule;
inherit (lib.nixvim) mkDeprecatedSubOptionModule;
in
lib.nixvim.plugins.mkNeovimPlugin {
name = "gitsigns";
packPathName = "gitsigns.nvim";
package = "gitsigns-nvim";
maintainers = [ lib.maintainers.GaetanLepage ];
# TODO: introduced 2024-03-12, remove on 2024-05-12
deprecateExtraOptions = true;
optionsRenamedToSettings = import ./renamed-options.nix;
imports =
let
basePluginPaths = [
"plugins"
"gitsigns"
];
settingsPath = basePluginPaths ++ [ "settings" ];
highlights = {
add = "Add";
change = "Change";
delete = "Delete";
topdelete = "Topdelete";
changedelete = "Changedelete";
untracked = "Untracked";
};
subHighlights = {
hl = "";
linehl = "Ln";
numhl = "Nr";
};
highlightRemovals = flatten (
mapAttrsToList (
opt: hlg:
mapAttrsToList (subOpt: subHlg: {
optionPath = settingsPath ++ [
"signs"
opt
subOpt
];
hlg = "GitSigns${hlg}${subHlg}";
}) subHighlights
) highlights
);
in
(map (
{ optionPath, hlg }:
mkDeprecatedSubOptionModule optionPath "Please define the `${hlg}` highlight group instead."
) highlightRemovals)
++ [
(mkRemovedOptionModule (
basePluginPaths
++ [
"watchGitDir"
"interval"
]
) "The option has been removed from upstream.")
(mkDeprecatedSubOptionModule (
settingsPath
++ [
"yadm"
"enable"
]
) "yadm support was removed upstream.")
# TODO: added 2025-04-06, remove after 25.05
(lib.nixvim.mkRemovedPackageOptionModule {
plugin = "gitsigns";
packageName = "git";
})
];
dependencies = [ "git" ];
settingsOptions = import ./settings-options.nix lib;
settingsExample = {
signs = {
add.text = "";
change.text = "";
delete.text = "_";
topdelete.text = "";
changedelete.text = "~";
untracked.text = "";
};
signcolumn = true;
watch_gitdir.follow_files = true;
current_line_blame = false;
current_line_blame_opts = {
virt_text = true;
virt_text_pos = "eol";
};
};
extraConfig = cfg: {
warnings = lib.nixvim.mkWarnings "plugins.gitsigns" {
when = (cfg.settings.trouble == true) && !config.plugins.trouble.enable;
message = ''
You have enabled `plugins.gitsigns.settings.trouble` but `plugins.trouble.enable` is `false`.
You should maybe enable the `trouble` plugin.
'';
};
};
}