less: improve default settings (#139988)

* less: enable by default and set LESS=-R via lesskey

* since we set PAGER=less, programs.less.enable should default to
true.

* some programs, notably git, set a custom LESS environment if none is
present. using the lesskey mechanism to set LESS=-R lets such
programs continue to run less as they see fit.

This reverts commit 0e7b4e60a846af1d4487ebe1218f8e07fffaa89b.

* less: remove use of deprecated lesskey binary format

* less: enable in environment.nix rather than less.nix

per discussion in #139988

Changed files
+12 -6
nixos
modules
+5 -1
nixos/modules/programs/environment.nix
···
environment.variables =
{ NIXPKGS_CONFIG = "/etc/nix/nixpkgs-config.nix";
+
# note: many programs exec() this directly, so default options for less must not
+
# be specified here; do so in the default value of programs.less.envVariables instead
PAGER = mkDefault "less";
-
LESS = mkDefault "-R";
EDITOR = mkDefault "nano";
XDG_CONFIG_DIRS = [ "/etc/xdg" ]; # needs to be before profile-relative paths to allow changes through environment.etc
};
+
+
# since we set PAGER to this above, make sure it's installed
+
programs.less.enable = true;
environment.profiles = mkAfter
[ "/nix/var/nix/profiles/default"
+7 -5
nixos/modules/programs/less.nix
···
}
'';
-
lessKey = pkgs.runCommand "lesskey"
-
{ src = pkgs.writeText "lessconfig" configText; preferLocalBuild = true; }
-
"${pkgs.less}/bin/lesskey -o $out $src";
+
lessKey = pkgs.writeText "lessconfig" configText;
in
···
programs.less = {
+
# note that environment.nix sets PAGER=less, and
+
# therefore also enables this module
enable = mkEnableOption "less";
configFile = mkOption {
···
envVariables = mkOption {
type = types.attrsOf types.str;
-
default = {};
+
default = {
+
LESS = "-R";
+
};
example = {
LESS = "--quit-if-one-screen";
};
···
environment.systemPackages = [ pkgs.less ];
environment.variables = {
-
LESSKEY_SYSTEM = toString lessKey;
+
LESSKEYIN_SYSTEM = toString lessKey;
} // optionalAttrs (cfg.lessopen != null) {
LESSOPEN = cfg.lessopen;
} // optionalAttrs (cfg.lessclose != null) {