git: add diff-highlight diff pager option

This adds a new diff-highlight option to make use of the simple
included git diff highlighter that comes with canonical git.

For more info, see https://github.com/git/git/blob/master/contrib/diff-highlight/README
This commit is contained in:
Ayman Bagabas 2024-09-11 20:25:31 -04:00 committed by Robert Helgesson
parent 503af483e1
commit 43845d04f8
No known key found for this signature in database
GPG key ID: 96E745BD17AA17ED

View file

@ -214,6 +214,24 @@ in {
};
};
diff-highlight = {
enable = mkEnableOption "" // {
description = ''
Enable the contrib {command}`diff-highlight` syntax highlighter.
See <https://github.com/git/git/blob/master/contrib/diff-highlight/README>,
'';
};
pagerOpts = mkOption {
type = types.listOf types.str;
default = [ ];
example = [ "--tabs=4" "-RFX" ];
description = ''
Arguments to be passed to {command}`less`.
'';
};
};
difftastic = {
enable = mkEnableOption "" // {
description = ''
@ -360,11 +378,15 @@ in {
home.packages = [ cfg.package ];
assertions = [{
assertion = let
enabled =
[ cfg.delta.enable cfg.diff-so-fancy.enable cfg.difftastic.enable ];
enabled = [
cfg.delta.enable
cfg.diff-so-fancy.enable
cfg.difftastic.enable
cfg.diff-highlight.enable
];
in count id enabled <= 1;
message =
"Only one of 'programs.git.delta.enable' or 'programs.git.difftastic.enable' or 'programs.git.diff-so-fancy.enable' can be set to true at the same time.";
"Only one of 'programs.git.delta.enable' or 'programs.git.difftastic.enable' or 'programs.git.diff-so-fancy.enable' or 'programs.git.diff-highlight' can be set to true at the same time.";
}];
programs.git.iniContent.user = {
@ -479,6 +501,18 @@ in {
};
})
(mkIf cfg.diff-highlight.enable {
programs.git.iniContent = let
dhCommand =
"${cfg.package}/share/git/contrib/diff-highlight/diff-highlight";
in {
core.pager = "${dhCommand} | ${getExe pkgs.less} ${
escapeShellArgs cfg.diff-highlight.pagerOpts
}";
interactive.diffFilter = dhCommand;
};
})
(mkIf cfg.difftastic.enable {
home.packages = [ cfg.difftastic.package ];