diff --git a/modules/lib/default.nix b/modules/lib/default.nix index 8291be0b..9ca0dad6 100644 --- a/modules/lib/default.nix +++ b/modules/lib/default.nix @@ -17,4 +17,5 @@ }; shell = import ./shell.nix { inherit lib; }; + zsh = import ./zsh.nix { inherit lib; }; } diff --git a/modules/lib/zsh.nix b/modules/lib/zsh.nix new file mode 100644 index 00000000..1d3e96b5 --- /dev/null +++ b/modules/lib/zsh.nix @@ -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); +}