Replace environment.profileVariables by environment.profileRelativeEnvVars
This commit is contained in:
@@ -9,6 +9,23 @@ let
|
||||
|
||||
cfg = config.environment;
|
||||
|
||||
exportedEnvVars =
|
||||
let
|
||||
absoluteVariables =
|
||||
mapAttrs (n: toList) cfg.variables;
|
||||
|
||||
suffixedVariables =
|
||||
flip mapAttrs cfg.profileRelativeEnvVars (envVar: listSuffixes:
|
||||
concatMap (profile: map (suffix: "${profile}${suffix}") listSuffixes) cfg.profiles
|
||||
);
|
||||
|
||||
allVariables =
|
||||
zipAttrsWith (n: concatLists) [ absoluteVariables suffixedVariables ];
|
||||
|
||||
exportVariables =
|
||||
mapAttrsToList (n: v: ''export ${n}="${concatStringsSep ":" v}"'') allVariables;
|
||||
in
|
||||
concatStringsSep "\n" exportVariables;
|
||||
in
|
||||
|
||||
{
|
||||
@@ -49,22 +66,15 @@ in
|
||||
type = types.listOf types.string;
|
||||
};
|
||||
|
||||
environment.profileVariables = mkOption {
|
||||
default = (p: {});
|
||||
environment.profileRelativeEnvVars = mkOption {
|
||||
type = types.attrsOf (types.listOf types.str);
|
||||
example = { PATH = [ "/bin" "/sbin" ]; MANPATH = [ "/man" "/share/man" ]; };
|
||||
description = ''
|
||||
A function which given a profile path should give back
|
||||
a set of environment variables for that profile.
|
||||
Attribute set of environment variable. Each attribute maps to a list
|
||||
of relative paths. Each relative path is appended to the each profile
|
||||
of <option>environment.profiles</option> to form the content of the
|
||||
corresponding environment variable.
|
||||
'';
|
||||
# !!! this should be of the following type:
|
||||
#type = types.functionTo (types.attrsOf (types.optionSet envVar));
|
||||
# and envVar should be changed to something more like environOpts.
|
||||
# Having unique `value' _or_ multiple `list' is much more useful
|
||||
# than just sticking everything together with ':' unconditionally.
|
||||
# Anyway, to have this type mentioned above
|
||||
# types.optionSet needs to be transformed into a type constructor
|
||||
# (it has a !!! mark on that in nixpkgs)
|
||||
# for now we hack all this to be
|
||||
type = types.functionTo (types.attrsOf (types.listOf types.string));
|
||||
};
|
||||
|
||||
# !!! isn't there a better way?
|
||||
@@ -165,10 +175,7 @@ in
|
||||
|
||||
system.build.setEnvironment = pkgs.writeText "set-environment"
|
||||
''
|
||||
${concatStringsSep "\n" (
|
||||
(mapAttrsToList (n: v: ''export ${n}="${concatStringsSep ":" v}"'')
|
||||
# This line is a kind of a hack because of !!! note above
|
||||
(zipAttrsWith (const concatLists) ([ (mapAttrs (n: v: [ v ]) cfg.variables) ] ++ map cfg.profileVariables cfg.profiles))))}
|
||||
${exportedEnvVars}
|
||||
|
||||
${cfg.extraInit}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user