summaryrefslogtreecommitdiffstats
path: root/nixos
diff options
context:
space:
mode:
authorJörg Thalheim <Mic92@users.noreply.github.com>2018-01-30 10:41:39 +0000
committerGitHub <noreply@github.com>2018-01-30 10:41:39 +0000
commitadd22af0952cf71911f478c7636c4699b204e286 (patch)
tree078559d63e5f4dd7cdf9e68a7cabeee8cde33e69 /nixos
parentc6eb84b1c7004006553483d6f3fce776395016fa (diff)
parent288898d6f1dc532e1dfb8785a591a2d8ad55320b (diff)
Merge pull request #34381 from JohnAZoidberg/less
nixos/less configure less with module
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/module-list.nix1
-rw-r--r--nixos/modules/programs/less.nix118
2 files changed, 119 insertions, 0 deletions
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index e512881765e0..51f9917b192c 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -84,6 +84,7 @@
./programs/info.nix
./programs/java.nix
./programs/kbdlight.nix
+ ./programs/less.nix
./programs/light.nix
./programs/man.nix
./programs/mosh.nix
diff --git a/nixos/modules/programs/less.nix b/nixos/modules/programs/less.nix
new file mode 100644
index 000000000000..c0283c9e6862
--- /dev/null
+++ b/nixos/modules/programs/less.nix
@@ -0,0 +1,118 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ cfg = config.programs.less;
+
+ configFile = ''
+ #command
+ ${concatStringsSep "\n"
+ (mapAttrsToList (command: action: "${command} ${action}") cfg.commands)
+ }
+ ${if cfg.clearDefaultCommands then "#stop" else ""}
+
+ #line-edit
+ ${concatStringsSep "\n"
+ (mapAttrsToList (command: action: "${command} ${action}") cfg.lineEditingKeys)
+ }
+
+ #env
+ ${concatStringsSep "\n"
+ (mapAttrsToList (variable: values: "${variable}=${values}") cfg.envVariables)
+ }
+ '';
+
+ lessKey = pkgs.runCommand "lesskey"
+ { src = pkgs.writeText "lessconfig" configFile; }
+ "${pkgs.less}/bin/lesskey -o $out $src";
+
+in
+
+{
+ options = {
+
+ programs.less = {
+
+ enable = mkEnableOption "less";
+
+ commands = mkOption {
+ type = types.attrsOf types.str;
+ default = {};
+ example = {
+ "h" = "noaction 5\e(";
+ "l" = "noaction 5\e)";
+ };
+ description = "Defines new command keys.";
+ };
+
+ clearDefaultCommands = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Clear all default commands.
+ You should remember to set the quit key.
+ Otherwise you will not be able to leave less without killing it.
+ '';
+ };
+
+ lineEditingKeys = mkOption {
+ type = types.attrsOf types.str;
+ default = {};
+ example = {
+ "\e" = "abort";
+ };
+ description = "Defines new line-editing keys.";
+ };
+
+ envVariables = mkOption {
+ type = types.attrsOf types.str;
+ default = {};
+ example = {
+ LESS = "--quit-if-one-screen";
+ };
+ description = "Defines environment variables.";
+ };
+
+ lessopen = mkOption {
+ type = types.nullOr types.str;
+ default = "|${pkgs.lesspipe}/bin/lesspipe.sh %s";
+ description = ''
+ Before less opens a file, it first gives your input preprocessor a chance to modify the way the contents of the file are displayed.
+ '';
+ };
+
+ lessclose = mkOption {
+ type = types.nullOr types.str;
+ default = null;
+ description = ''
+ When less closes a file opened in such a way, it will call another program, called the input postprocessor, which may perform any desired clean-up action (such as deleting the replacement file created by LESSOPEN).
+ '';
+ };
+ };
+ };
+
+ config = mkIf cfg.enable {
+
+ environment.systemPackages = [ pkgs.less ];
+
+ environment.variables = {
+ "LESSKEY_SYSTEM" = toString lessKey;
+ } // optionalAttrs (cfg.lessopen != null) {
+ "LESSOPEN" = cfg.lessopen;
+ } // optionalAttrs (cfg.lessclose != null) {
+ "LESSCLOSE" = cfg.lessclose;
+ };
+
+ warnings = optional (
+ cfg.clearDefaultCommands && (all (x: x != "quit") (attrValues cfg.commands))
+ ) ''
+ config.programs.less.clearDefaultCommands clears all default commands of less but there is no alternative binding for exiting.
+ Consider adding a binding for 'quit'.
+ '';
+ };
+
+ meta.maintainers = with maintainers; [ johnazoidberg ];
+
+}