treewide: set git pager for specific commands, not for core.pager

Setting `core.pager` may result in issues like swallowed `git grep` results. 
To avoid this, apply pagers to specific commands where we expect `diff`-ish output only. 
Use a common helper to set pager for all modules that configure it.
This commit is contained in:
Ihar Hrachyshka 2026-04-14 12:31:44 -04:00 committed by GitHub
parent 8a423e444b
commit 3c7524c683
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 55 additions and 28 deletions

View file

@ -9,6 +9,7 @@ rec {
darwin = import ./darwin.nix { inherit lib; };
deprecations = import ./deprecations.nix { inherit lib; };
generators = import ./generators.nix { inherit lib; };
git = import ./git.nix { inherit lib; };
gvariant = import ./gvariant.nix { inherit lib; };
maintainers = import ./maintainers.nix;
strings = import ./strings.nix { inherit lib; };

11
modules/lib/git.nix Normal file
View file

@ -0,0 +1,11 @@
{ lib }:
{
diffPagerConfig = pagerCommand: {
pager = lib.genAttrs [
"diff"
"log"
"show"
] (_: pagerCommand);
};
}

View file

@ -60,7 +60,9 @@ in
description = ''
Whether to enable git integration for delta.
When enabled, delta will be configured as git's pager and diff filter.
When enabled, delta will be configured as git's pager for
{command}`diff`, {command}`log`, and {command}`show`, and as git's diff
filter for interactive staging.
'';
};
@ -127,8 +129,8 @@ in
let
deltaCommand = lib.getExe cfg.package;
in
{
core.pager = deltaCommand;
lib.hm.git.diffPagerConfig deltaCommand
// {
interactive.diffFilter = "${deltaCommand} --color-only";
delta = cfg.options;
};

View file

@ -55,7 +55,9 @@ in
description = ''
Whether to enable git integration for diff-highlight.
When enabled, diff-highlight will be configured as git's pager and diff filter.
When enabled, diff-highlight will be configured as git's pager for
{command}`diff`, {command}`log`, and {command}`show`, and as git's diff
filter for interactive staging.
'';
};
};
@ -96,9 +98,10 @@ in
let
gitPackage = config.programs.git.package;
dhCommand = "${gitPackage}/share/git/contrib/diff-highlight/diff-highlight";
pagerCommand = "${dhCommand} | ${lib.getExe pkgs.less} ${lib.escapeShellArgs cfg.pagerOpts}";
in
{
core.pager = "${dhCommand} | ${lib.getExe pkgs.less} ${lib.escapeShellArgs cfg.pagerOpts}";
lib.hm.git.diffPagerConfig pagerCommand
// {
interactive.diffFilter = dhCommand;
};
};

View file

@ -101,7 +101,9 @@ in
description = ''
Whether to enable git integration for diff-so-fancy.
When enabled, diff-so-fancy will be configured as git's pager and diff filter.
When enabled, diff-so-fancy will be configured as git's pager for
{command}`diff`, {command}`log`, and {command}`show`, and as git's diff
filter for interactive staging.
'';
};
};
@ -133,9 +135,10 @@ in
iniContent =
let
dsfCommand = "${pkgs.diff-so-fancy}/bin/diff-so-fancy";
pagerCommand = "${dsfCommand} | ${pkgs.less}/bin/less ${lib.escapeShellArgs cfg.pagerOpts}";
in
{
core.pager = "${dsfCommand} | ${pkgs.less}/bin/less ${lib.escapeShellArgs cfg.pagerOpts}";
lib.hm.git.diffPagerConfig pagerCommand
// {
interactive.diffFilter = "${dsfCommand} --patch";
diff-so-fancy = cfg.settings;
};

View file

@ -92,13 +92,8 @@ in
let
riffExe = baseNameOf (lib.getExe cfg.package);
in
{
pager = {
diff = riffExe;
log = riffExe;
show = riffExe;
};
lib.hm.git.diffPagerConfig riffExe
// {
interactive.diffFilter = "${riffExe} --color=on";
};
};

View file

@ -30,8 +30,10 @@
nmt.script = ''
# Git config should contain delta configuration (backward compatibility)
assertFileExists home-files/.config/git/config
assertFileContains home-files/.config/git/config '[core]'
assertFileRegex home-files/.config/git/config 'pager = .*/bin/delta'
assertFileContains home-files/.config/git/config '[pager]'
assertFileRegex home-files/.config/git/config 'diff = .*/bin/delta'
assertFileRegex home-files/.config/git/config 'log = .*/bin/delta'
assertFileRegex home-files/.config/git/config 'show = .*/bin/delta'
assertFileContains home-files/.config/git/config '[interactive]'
assertFileRegex home-files/.config/git/config 'diffFilter = .*/bin/delta --color-only'
assertFileContains home-files/.config/git/config '[delta]'

View file

@ -17,8 +17,10 @@
nmt.script = ''
assertFileExists home-files/.config/git/config
assertFileContains home-files/.config/git/config '[core]'
assertFileRegex home-files/.config/git/config 'pager = .*/bin/delta'
assertFileContains home-files/.config/git/config '[pager]'
assertFileRegex home-files/.config/git/config 'diff = .*/bin/delta'
assertFileRegex home-files/.config/git/config 'log = .*/bin/delta'
assertFileRegex home-files/.config/git/config 'show = .*/bin/delta'
assertFileContains home-files/.config/git/config '[interactive]'
assertFileRegex home-files/.config/git/config 'diffFilter = .*/bin/delta --color-only'
assertFileContains home-files/.config/git/config '[delta]'

View file

@ -25,8 +25,10 @@
nmt.script = ''
# Git config should contain diff-highlight configuration (backward compatibility)
assertFileExists home-files/.config/git/config
assertFileContains home-files/.config/git/config '[core]'
assertFileRegex home-files/.config/git/config 'pager = .*/diff-highlight.*less'
assertFileContains home-files/.config/git/config '[pager]'
assertFileRegex home-files/.config/git/config 'diff = .*/diff-highlight.*less'
assertFileRegex home-files/.config/git/config 'log = .*/diff-highlight.*less'
assertFileRegex home-files/.config/git/config 'show = .*/diff-highlight.*less'
assertFileContains home-files/.config/git/config '[interactive]'
assertFileRegex home-files/.config/git/config 'diffFilter = .*/diff-highlight'
'';

View file

@ -12,8 +12,10 @@
nmt.script = ''
assertFileExists home-files/.config/git/config
assertFileContains home-files/.config/git/config '[core]'
assertFileRegex home-files/.config/git/config 'pager = .*/diff-highlight.*less'
assertFileContains home-files/.config/git/config '[pager]'
assertFileRegex home-files/.config/git/config 'diff = .*/diff-highlight.*less'
assertFileRegex home-files/.config/git/config 'log = .*/diff-highlight.*less'
assertFileRegex home-files/.config/git/config 'show = .*/diff-highlight.*less'
assertFileContains home-files/.config/git/config '[interactive]'
assertFileRegex home-files/.config/git/config 'diffFilter = .*/diff-highlight'
'';

View file

@ -24,8 +24,10 @@
nmt.script = ''
# Git config should contain diff-so-fancy configuration (backward compatibility)
assertFileExists home-files/.config/git/config
assertFileContains home-files/.config/git/config '[core]'
assertFileRegex home-files/.config/git/config 'pager = .*/diff-so-fancy.*less'
assertFileContains home-files/.config/git/config '[pager]'
assertFileRegex home-files/.config/git/config 'diff = .*/diff-so-fancy.*less'
assertFileRegex home-files/.config/git/config 'log = .*/diff-so-fancy.*less'
assertFileRegex home-files/.config/git/config 'show = .*/diff-so-fancy.*less'
assertFileContains home-files/.config/git/config '[interactive]'
assertFileRegex home-files/.config/git/config 'diffFilter = .*/diff-so-fancy --patch'
assertFileContains home-files/.config/git/config '[diff-so-fancy]'

View file

@ -13,8 +13,10 @@
nmt.script = ''
assertFileExists home-files/.config/git/config
assertFileContains home-files/.config/git/config '[core]'
assertFileRegex home-files/.config/git/config 'pager = .*/diff-so-fancy.*less'
assertFileContains home-files/.config/git/config '[pager]'
assertFileRegex home-files/.config/git/config 'diff = .*/diff-so-fancy.*less'
assertFileRegex home-files/.config/git/config 'log = .*/diff-so-fancy.*less'
assertFileRegex home-files/.config/git/config 'show = .*/diff-so-fancy.*less'
assertFileContains home-files/.config/git/config '[interactive]'
assertFileRegex home-files/.config/git/config 'diffFilter = .*/diff-so-fancy --patch'
assertFileContains home-files/.config/git/config '[diff-so-fancy]'