zsh: support attrsets as associative arrays in programs.zsh.localVariables
This commit is contained in:
parent
8db990e559
commit
c67b06ff92
|
@ -9,11 +9,20 @@ rec {
|
|||
''"${v}"''
|
||||
else if builtins.isList v then
|
||||
"(${lib.concatStringsSep " " (map toZshValue v)})"
|
||||
else if builtins.isAttrs v then
|
||||
"(${
|
||||
lib.concatStringsSep " "
|
||||
(lib.mapAttrsToList (n: v: "[${lib.escapeShellArg n}]=${toZshValue v}")
|
||||
v)
|
||||
})"
|
||||
else
|
||||
''"${toString v}"'';
|
||||
|
||||
# Produces a Zsh shell like definition statement
|
||||
define = n: v: "${n}=${toZshValue v}";
|
||||
define = n: v:
|
||||
"${lib.optionalString (builtins.isAttrs v) "typeset -A "}${n}=${
|
||||
toZshValue v
|
||||
}";
|
||||
|
||||
# Given an attribute set containing shell variable names and their
|
||||
# assignments, this function produces a string containing a definition
|
||||
|
|
|
@ -501,7 +501,10 @@ in
|
|||
localVariables = mkOption {
|
||||
type = types.attrs;
|
||||
default = {};
|
||||
example = { POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=["dir" "vcs"]; };
|
||||
example = {
|
||||
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=["dir" "vcs"];
|
||||
ZSH_HIGHLIGHT_STYLES={unknown-token="bg=red,fg=white,bold";};
|
||||
};
|
||||
description = ''
|
||||
Extra local variables defined at the top of {file}`.zshrc`.
|
||||
'';
|
||||
|
|
|
@ -12,7 +12,13 @@ with lib;
|
|||
V2 = false;
|
||||
V3 = "some-string";
|
||||
V4 = 42;
|
||||
V5 = [ V1 V2 V3 V4 ];
|
||||
V5 = builtins.attrValues V6;
|
||||
V6 = {
|
||||
a = V1;
|
||||
b = V2;
|
||||
c = V3;
|
||||
d = V4;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -20,11 +26,15 @@ with lib;
|
|||
|
||||
nmt.script = ''
|
||||
assertFileExists home-files/.zshrc
|
||||
assertFileContains home-files/.zshrc 'V1=true'
|
||||
assertFileContains home-files/.zshrc 'V2=false'
|
||||
assertFileContains home-files/.zshrc 'V3="some-string"'
|
||||
assertFileContains home-files/.zshrc 'V4="42"'
|
||||
assertFileContains home-files/.zshrc 'V5=(true false "some-string" "42")'
|
||||
'';
|
||||
assertFileRegex home-files/.zshrc '^V1=true$'
|
||||
assertFileRegex home-files/.zshrc '^V2=false$'
|
||||
assertFileRegex home-files/.zshrc '^V3="some-string"$'
|
||||
assertFileRegex home-files/.zshrc '^V4="42"$'
|
||||
assertFileRegex home-files/.zshrc '^V5=[(]true false "some-string" "42"[)]$'
|
||||
assertFileContains home-files/.zshrc ${
|
||||
lib.escapeShellArg ''
|
||||
typeset -A V6=(['a']=true ['b']=false ['c']="some-string" ['d']="42")''
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue