Create flake config
This commit is contained in:
commit
45969c6d5d
|
@ -0,0 +1,30 @@
|
||||||
|
{
|
||||||
|
description = "A semi-verbose flake format helper.";
|
||||||
|
|
||||||
|
outputs = { self }:
|
||||||
|
let
|
||||||
|
inherit (builtins) elemAt foldl' head isAttrs length map zipAttrsWith;
|
||||||
|
|
||||||
|
# Copied from <nixpkgs/lib/attrsets.nix> to avoid taking a dependency
|
||||||
|
recursiveUpdateUntil = pred: lhs: rhs:
|
||||||
|
let f = attrPath:
|
||||||
|
zipAttrsWith (n: values:
|
||||||
|
let here = attrPath ++ [n];
|
||||||
|
in
|
||||||
|
if length values == 1 || pred here (elemAt values 1) (head values)
|
||||||
|
then head values
|
||||||
|
else f here values
|
||||||
|
);
|
||||||
|
in f [] [rhs lhs];
|
||||||
|
recursiveUpdate = lhs: rhs:
|
||||||
|
recursiveUpdateUntil (path: lhs: rhs: !(isAttrs lhs && isAttrs rhs)) lhs rhs;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
/* Create the flake outputs for systems and merge them into the expected format.
|
||||||
|
|
||||||
|
system-outputs: function from a system to the flake outputs for that system.
|
||||||
|
systems: a list of systems to produce flake outputs for.
|
||||||
|
*/
|
||||||
|
outputs-for = system-outputs: systems: foldl' recursiveUpdate {} (map system-outputs systems);
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue