mirror of
https://github.com/LnL7/nix-darwin.git
synced 2024-12-14 11:57:34 +00:00
nix: allow specifying named NIX_PATH using and attrset
This gives the option nicer merge behaviour, otherwise setting a named entry multiple times would result in duplicates which can't be resolved without overriding the entire list.
This commit is contained in:
parent
51ecc4151f
commit
4d235b800d
1 changed files with 30 additions and 2 deletions
|
@ -311,17 +311,44 @@ in
|
|||
};
|
||||
|
||||
nix.nixPath = mkOption {
|
||||
type = types.listOf types.str;
|
||||
type = mkOptionType {
|
||||
name = "nix path";
|
||||
merge = loc: defs:
|
||||
let
|
||||
values = flatten (map (def:
|
||||
(map (x:
|
||||
if isAttrs x then (mapAttrsToList nameValuePair x)
|
||||
else if isString x then x
|
||||
else throw "The option value `${showOption loc}` in `${def.file}` is not a attset or string.")
|
||||
(if isList def.value then def.value else [def.value]))) defs);
|
||||
|
||||
namedPaths = mapAttrsToList (n: v: "${n}=${(head v).value}")
|
||||
(zipAttrs
|
||||
(map (x: { "${x.name}" = { inherit (x) value; }; })
|
||||
(filter isAttrs values)));
|
||||
|
||||
searchPaths = unique
|
||||
(filter isString values);
|
||||
in
|
||||
namedPaths ++ searchPaths;
|
||||
};
|
||||
default =
|
||||
[ # Include default path <darwin-config>.
|
||||
"darwin-config=${config.environment.darwinConfig}"
|
||||
{ darwin-config = "${config.environment.darwinConfig}"; }
|
||||
"/nix/var/nix/profiles/per-user/root/channels"
|
||||
"$HOME/.nix-defexpr/channels"
|
||||
];
|
||||
example =
|
||||
[ { trunk = "/src/nixpkgs"; }
|
||||
];
|
||||
description = ''
|
||||
The default Nix expression search path, used by the Nix
|
||||
evaluator to look up paths enclosed in angle brackets
|
||||
(e.g. <literal><nixpkgs></literal>).
|
||||
|
||||
Named entries can be specified using an attribute set, if an
|
||||
entry is configured multiple times the value with the lowest
|
||||
ordering will be used.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
@ -342,6 +369,7 @@ in
|
|||
"/nix/var/nix/profiles/per-user/root/channels"
|
||||
]);
|
||||
|
||||
|
||||
nix.package = mkIf (config.system.stateVersion < 3)
|
||||
(mkDefault "/nix/var/nix/profiles/default");
|
||||
|
||||
|
|
Loading…
Reference in a new issue