@@ -1,5 +1,5 @@
1−let f = { hackage, pkgs, pkg-def, modules ? [] }: let
2− buildModules = f { inherit hackage pkg-def modules; pkgs = pkgs.buildPackages; };
1+let f = { hackage, pkgs, pkg-def, pkg-def-overlays ? [], modules ? [] }: let
2+ buildModules = f { inherit hackage pkg-def pkg-def-overlays modules; pkgs = pkgs.buildPackages; };
33in pkgs.lib.evalModules {
44 modules = modules ++ [
55 ({ lib, ... }: {
@@ -22,7 +22,17 @@ in pkgs.lib.evalModules {
2222 hackage.db = hackage;
2323
2424 # Set the plan for modules/plan.nix
25− plan.pkg-def = pkg-def;
25+ plan.pkg-def = hackage: with builtins;
26+ # fold any potential `pkg-def-overlays`
27+ # onto the `pkg-def`.
28+ #
29+ # This means you can have a base definition (e.g. stackage)
30+ # and augment it with custom packages to your liking.
31+ foldl' lib.recursiveUpdate
32+ (pkg-def hackage)
33+ (map (p: p hackage) pkg-def-overlays)
34+ ;
35+
2636 })
2737
2838 # Supplies metadata