lib.zsh: add module

Added utilities to generate export statements and definitions for zsh scripts.

Currently, there is only lib.shell which generates export statements in bash
syntax. However, this does not allow to generate export statements for zsh
arrays (syntax: NAME=(elem1 elem2 ...) ), which would be the natural
representation of lists in the nix language.

(cherry picked from commit 62eb7ebeba)
This commit is contained in:
Marcial Gaißert 2018-12-13 15:19:07 +01:00 committed by Robert Helgesson
parent 29161b6e21
commit f221e4935d
No known key found for this signature in database
GPG key ID: 36BDAA14C2797E89
2 changed files with 29 additions and 0 deletions

View file

@ -17,4 +17,5 @@
}; };
shell = import ./shell.nix { inherit lib; }; shell = import ./shell.nix { inherit lib; };
zsh = import ./zsh.nix { inherit lib; };
} }

28
modules/lib/zsh.nix Normal file
View file

@ -0,0 +1,28 @@
{ lib }:
rec {
# Produces a Zsh shell like value
toZshValue = v: if builtins.isBool v then
if v then "true" else "false"
else if builtins.isString v then
"\"${v}\""
else if builtins.isList v then
"(${lib.concatStringsSep " " (map toZshValue v)})"
else "\"${toString v}\"";
# Produces a Zsh shell like definition statement
define = n: v: "${n}=${toZshValue v}";
# Given an attribute set containing shell variable names and their
# assignments, this function produces a string containing a definition
# statement for each set entry.
defineAll = vars: lib.concatStringsSep "\n" (lib.mapAttrsToList define vars);
# Produces a Zsh shell like export statement
export = n: v: "export ${define n v}";
# Given an attribute set containing shell variable names and their
# assignments, this function produces a string containing an export
# statement for each set entry.
exportAll = vars: lib.concatStringsSep "\n" (lib.mapAttrsToList export vars);
}