From e4f72ee69d4e35e8870a8c6041d39a51c3a30047 Mon Sep 17 00:00:00 2001 From: Benedikt Rips Date: Sun, 23 Nov 2025 15:17:49 +0100 Subject: [PATCH 1/2] less: enable options to be specified multiple times --- modules/programs/less.nix | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/modules/programs/less.nix b/modules/programs/less.nix index 1a8c5fb774cc..c9296928c2da 100644 --- a/modules/programs/less.nix +++ b/modules/programs/less.nix @@ -37,11 +37,14 @@ in options = lib.mkOption { type = with lib.types; - attrsOf (oneOf [ - bool - int - str - ]); + let + scalar = oneOf [ + bool + int + str + ]; + in + attrsOf (either scalar (listOf scalar)); default = { }; description = "GNU-style options to be set via {env}`$LESS`."; example = { From 9e9aca9f7199d2ba2629eb81126ac5df5633eb7b Mon Sep 17 00:00:00 2001 From: Benedikt Rips Date: Sun, 23 Nov 2025 15:42:16 +0100 Subject: [PATCH 2/2] less: list options in correct order --- modules/programs/less.nix | 26 ++++++++++++++++++- .../programs/less/correct-option-order.nix | 21 +++++++++++++++ tests/modules/programs/less/default.nix | 1 + 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 tests/modules/programs/less/correct-option-order.nix diff --git a/modules/programs/less.nix b/modules/programs/less.nix index c9296928c2da..3aee1e30e079 100644 --- a/modules/programs/less.nix +++ b/modules/programs/less.nix @@ -62,9 +62,33 @@ in xdg.configFile."lesskey" = lib.mkIf (cfg.config != "") { text = cfg.config; }; programs.less.config = lib.mkIf (cfg.options != { }) ( + let + color = lib.intersectAttrs { + color = null; + D = null; + } cfg.options; + prompt = lib.intersectAttrs { + prompt = null; + P = null; + } cfg.options; + otherOptions = lib.removeAttrs cfg.options [ + "color" + "D" + "P" + "prompt" + ]; + + toCommandLine = lib.cli.toGNUCommandLineShell { }; + + orderedOptions = lib.filter (x: x != { }) [ + otherOptions + color # colors need to come after `--use-color`. + prompt # the prompt has to be the last option. + ]; + in lib.mkBefore '' #env - LESS = ${lib.cli.toGNUCommandLineShell { } cfg.options} + LESS = ${lib.concatMapStringsSep " " toCommandLine orderedOptions} '' ); }; diff --git a/tests/modules/programs/less/correct-option-order.nix b/tests/modules/programs/less/correct-option-order.nix new file mode 100644 index 000000000000..7886ea641ca1 --- /dev/null +++ b/tests/modules/programs/less/correct-option-order.nix @@ -0,0 +1,21 @@ +{ + programs.less = { + enable = true; + options = { + color = [ + "HkK" # header: gray + "Mkb" # marks: blue + ]; + prompt = "s%f"; + quiet = true; + }; + }; + + nmt.script = '' + assertFileExists home-files/.config/lesskey + assertFileContent home-files/.config/lesskey ${builtins.toFile "lesskey.expected" '' + #env + LESS = --quiet --color HkK --color Mkb --prompt s%f + ''} + ''; +} diff --git a/tests/modules/programs/less/default.nix b/tests/modules/programs/less/default.nix index 675c1a6c24d0..08bd2e07d678 100644 --- a/tests/modules/programs/less/default.nix +++ b/tests/modules/programs/less/default.nix @@ -1,4 +1,5 @@ { + less-correct-option-order = ./correct-option-order.nix; less-custom-config = ./custom-config.nix; less-custom-options = ./custom-options.nix; less-custom-options-and-config = ./custom-options-and-config.nix;