dragnpkgs/lib/mkflake/default.nix

29 lines
794 B
Nix

{ pkgs, lib }:
flakeDef:
let
rewritePerSystem = final: sectionDef:
lib.forAllSystems (system:
builtins.mapAttrs (name: value:
if lib.isDerivation value then
value
else
(pkgs system).callPackage value { self = (final system); }
) sectionDef
);
rewriteAttr = final: name: value:
let
final_self = system: (builtins.mapAttrs (aname: avalue:
if aname == "packages" || aname == "legacyPackages" || aname == "devShells" then
avalue.${system}
else
avalue
) final);
in
if name == "packages" || name == "legacyPackages" || name == "devShells" then
rewritePerSystem final_self value
else
value;
self = builtins.mapAttrs (rewriteAttr self) flakeDef;
in
self