1{ lib }:
2
3let
4 # This is essentially the same thing as `lib.makeOverridable`, except storing
5 # the override method in a method named `overridePackage` so that it's not
6 # shadowed by the `override` method added by `callPackage`
7 makePackageOverridable =
8 f: args:
9 let
10 result = lib.makeOverridable f args;
11
12 copyArgs = g: lib.setFunctionArgs g (lib.functionArgs f);
13
14 overrideWith = update: args // (if lib.isFunction update then update args else update);
15
16 overridePackage = copyArgs (update: makePackageOverridable f (overrideWith update));
17
18 in
19 result // { inherit overridePackage; };
20
21in
22lib
23// {
24 inherit makePackageOverridable;
25}