aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/programs/readline.nix25
-rw-r--r--tests/default.nix1
-rw-r--r--tests/modules/programs/readline/default.nix3
-rw-r--r--tests/modules/programs/readline/using-all-options.nix33
-rw-r--r--tests/modules/programs/readline/using-all-options.txt11
5 files changed, 72 insertions, 1 deletions
diff --git a/modules/programs/readline.nix b/modules/programs/readline.nix
index 250f44916ce..35cbab5f5fa 100644
--- a/modules/programs/readline.nix
+++ b/modules/programs/readline.nix
@@ -6,6 +6,19 @@ let
cfg = config.programs.readline;
+ mkSetVariableStr = n: v:
+ let
+ mkValueStr = v:
+ if v == true then "on"
+ else if v == false then "off"
+ else if isInt v then toString v
+ else if isString v then v
+ else abort ("values ${toPretty v} is of unsupported type");
+ in
+ "set ${n} ${mkValueStr v}";
+
+ mkBindingStr = k: v: "\"${k}\": ${v}";
+
in
{
@@ -19,6 +32,15 @@ in
description = "Readline bindings.";
};
+ variables = mkOption {
+ type = with types; attrsOf (either str (either int bool));
+ default = {};
+ example = { expand-tilde = true; };
+ description = ''
+ Readline customization variable assignments.
+ '';
+ };
+
includeSystemConfig = mkOption {
type = types.bool;
default = true;
@@ -40,7 +62,8 @@ in
let
configStr = concatStringsSep "\n" (
optional cfg.includeSystemConfig "$include /etc/inputrc"
- ++ mapAttrsToList (k: v: "\"${k}\": ${v}") cfg.bindings
+ ++ mapAttrsToList mkSetVariableStr cfg.variables
+ ++ mapAttrsToList mkBindingStr cfg.bindings
);
in
''
diff --git a/tests/default.nix b/tests/default.nix
index ecb98e14188..318e549b1b9 100644
--- a/tests/default.nix
+++ b/tests/default.nix
@@ -47,6 +47,7 @@ import nmt {
// import ./modules/programs/bash
// import ./modules/programs/gpg
// import ./modules/programs/newsboat
+ // import ./modules/programs/readline
// import ./modules/programs/ssh
// import ./modules/programs/tmux
// import ./modules/programs/zsh;
diff --git a/tests/modules/programs/readline/default.nix b/tests/modules/programs/readline/default.nix
new file mode 100644
index 00000000000..767d88bfa9d
--- /dev/null
+++ b/tests/modules/programs/readline/default.nix
@@ -0,0 +1,3 @@
+{
+ readline-using-all-options = ./using-all-options.nix;
+}
diff --git a/tests/modules/programs/readline/using-all-options.nix b/tests/modules/programs/readline/using-all-options.nix
new file mode 100644
index 00000000000..f50117679b4
--- /dev/null
+++ b/tests/modules/programs/readline/using-all-options.nix
@@ -0,0 +1,33 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.readline = {
+ enable = true;
+
+ bindings = {
+ "\C-h" = "backward-kill-word";
+ };
+
+ variables = {
+ bell-style = "audible";
+ completion-map-case = true;
+ completion-prefix-display-length = 2;
+ };
+
+ extraConfig = ''
+ $if mode=emacs
+ "\e[1~": beginning-of-line
+ $endif
+ '';
+ };
+
+ nmt.script = ''
+ assertFileContent \
+ home-files/.inputrc \
+ ${./using-all-options.txt}
+ '';
+ };
+}
diff --git a/tests/modules/programs/readline/using-all-options.txt b/tests/modules/programs/readline/using-all-options.txt
new file mode 100644
index 00000000000..da9f7df6847
--- /dev/null
+++ b/tests/modules/programs/readline/using-all-options.txt
@@ -0,0 +1,11 @@
+# Generated by Home Manager.
+
+$include /etc/inputrc
+set bell-style audible
+set completion-map-case on
+set completion-prefix-display-length 2
+"C-h": backward-kill-word
+$if mode=emacs
+"\e[1~": beginning-of-line
+$endif
+