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:
parent
8a423e444b
commit
3c7524c683
12 changed files with 55 additions and 28 deletions
|
|
@ -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
11
modules/lib/git.nix
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{ lib }:
|
||||
|
||||
{
|
||||
diffPagerConfig = pagerCommand: {
|
||||
pager = lib.genAttrs [
|
||||
"diff"
|
||||
"log"
|
||||
"show"
|
||||
] (_: pagerCommand);
|
||||
};
|
||||
}
|
||||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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]'
|
||||
|
|
|
|||
|
|
@ -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]'
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
'';
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
'';
|
||||
|
|
|
|||
|
|
@ -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]'
|
||||
|
|
|
|||
|
|
@ -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]'
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue