readline: add variables option

Also add a basic test case.
This commit is contained in:
Robert Helgesson 2019-12-08 21:11:08 +01:00
parent bb5dea02b9
commit 284b8d94d4
No known key found for this signature in database
GPG key ID: 36BDAA14C2797E89
5 changed files with 72 additions and 1 deletions

View file

@ -6,6 +6,19 @@ let
cfg = config.programs.readline; 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 in
{ {
@ -19,6 +32,15 @@ in
description = "Readline bindings."; 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 { includeSystemConfig = mkOption {
type = types.bool; type = types.bool;
default = true; default = true;
@ -40,7 +62,8 @@ in
let let
configStr = concatStringsSep "\n" ( configStr = concatStringsSep "\n" (
optional cfg.includeSystemConfig "$include /etc/inputrc" optional cfg.includeSystemConfig "$include /etc/inputrc"
++ mapAttrsToList (k: v: "\"${k}\": ${v}") cfg.bindings ++ mapAttrsToList mkSetVariableStr cfg.variables
++ mapAttrsToList mkBindingStr cfg.bindings
); );
in in
'' ''

View file

@ -47,6 +47,7 @@ import nmt {
// import ./modules/programs/bash // import ./modules/programs/bash
// import ./modules/programs/gpg // import ./modules/programs/gpg
// import ./modules/programs/newsboat // import ./modules/programs/newsboat
// import ./modules/programs/readline
// import ./modules/programs/ssh // import ./modules/programs/ssh
// import ./modules/programs/tmux // import ./modules/programs/tmux
// import ./modules/programs/zsh; // import ./modules/programs/zsh;

View file

@ -0,0 +1,3 @@
{
readline-using-all-options = ./using-all-options.nix;
}

View file

@ -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}
'';
};
}

View file

@ -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