From 635bbcdd6f8e11799f31d004f933fdb9cd3fff5d Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Mon, 27 Feb 2023 13:04:46 +0100 Subject: [PATCH] modules/git: make options passed to `less(1)` for `diff-so-fancy` configurable (#3704) The `-X` prevents that screen is cleared when showing a diff that's larger than my screen. I.e. when running `git diff` and press `q`, the last thing I want to see is the prompt with `git diff` and *not* the part of the diff I browsed, to be clear $ git diff $ Considering that this is somewhat opinionated, I decided to build an option which allows you to pass arbitrary commands to the less invocation. --- modules/programs/git.nix | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/modules/programs/git.nix b/modules/programs/git.nix index 5bd828b30..0b5dae5bc 100644 --- a/modules/programs/git.nix +++ b/modules/programs/git.nix @@ -340,6 +340,14 @@ in { ''; }; + pagerOpts = mkOption { + type = types.listOf types.str; + default = [ "--tabs=4" "-RFX" ]; + description = '' + Arguments to be passed to less. + ''; + }; + markEmptyLines = mkOption { type = types.bool; default = true; @@ -547,7 +555,9 @@ in { programs.git.iniContent = let dsfCommand = "${pkgs.diff-so-fancy}/bin/diff-so-fancy"; in { - core.pager = "${dsfCommand} | ${pkgs.less}/bin/less --tabs=4 -RFX"; + core.pager = "${dsfCommand} | ${pkgs.less}/bin/less ${ + escapeShellArgs cfg.diff-so-fancy.pagerOpts + }"; interactive.diffFilter = "${dsfCommand} --patch"; diff-so-fancy = { markEmptyLines = cfg.diff-so-fancy.markEmptyLines;