Allow taking functors as overlays

This allows for making the default overrides customisable by exposing
them as a set with an override function.
This commit is contained in:
adisbladis 2020-01-02 21:56:08 +00:00
parent 03d439fed3
commit e9e5ce266e
No known key found for this signature in database
GPG key ID: 110BFAD44C6249B7
2 changed files with 34 additions and 16 deletions

View file

@ -18,6 +18,8 @@ let
stdenv = pkgs.stdenv;
};
getFunctorFn = fn: if builtins.typeOf fn == "set" then fn.__functor else fn;
getAttrDefault = attribute: set: default: (
if builtins.hasAttr attribute set
then builtins.getAttr attribute set
@ -83,21 +85,23 @@ let
in
lockPkgs;
overlays = [
(
self: super: {
mkPoetryDep = self.callPackage ./mk-poetry-dep.nix {
inherit pkgs lib python poetryLib;
};
poetry = poetryPkg;
}
)
# Null out any filtered packages, we don't want python.pkgs from nixpkgs
(self: super: builtins.listToAttrs (builtins.map (x: { name = x.name; value = null; }) incompatible))
# Create poetry2nix layer
baseOverlay
] ++ # User provided overrides
overrides;
overlays = builtins.map getFunctorFn (
[
(
self: super: {
mkPoetryDep = self.callPackage ./mk-poetry-dep.nix {
inherit pkgs lib python poetryLib;
};
poetry = poetryPkg;
}
)
# Null out any filtered packages, we don't want python.pkgs from nixpkgs
(self: super: builtins.listToAttrs (builtins.map (x: { name = x.name; value = null; }) incompatible))
# Create poetry2nix layer
baseOverlay
] ++ # User provided overrides
overrides
);
packageOverrides = lib.foldr lib.composeExtensions (self: super: {}) overlays;
@ -231,5 +235,18 @@ let
in
{
inherit mkPoetryEnv mkPoetryApplication defaultPoetryOverrides cli doc;
inherit mkPoetryEnv mkPoetryApplication cli doc;
/*
The default list of poetry2nix override overlays
Can be overriden by calling defaultPoetryOverrides.overrideOverlay which takes an overlay function
*/
defaultPoetryOverrides = {
__functor = defaultPoetryOverrides;
overrideOverlay = fn: self: super: let
defaultSet = defaultPoetryOverrides self super;
customSet = fn self super;
in defaultSet // customSet;
};
}

View file

@ -11,6 +11,7 @@ in
{
trivial = pkgs.callPackage ./trivial { inherit poetry2nix; };
override = pkgs.callPackage ./override-support { inherit poetry2nix; };
override-default = pkgs.callPackage ./override-default-support { inherit poetry2nix; };
top-packages-1 = pkgs.callPackage ./common-pkgs-1 { inherit poetry2nix; };
top-packages-2 = pkgs.callPackage ./common-pkgs-2 { inherit poetry2nix; };
pep425 = pkgs.callPackage ./pep425 { inherit pep425; inherit pep425OSX; inherit pep425Python37; };