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}