From e9e5ce266e4288474d5ebb5e36f54b6caa43d49f Mon Sep 17 00:00:00 2001 From: adisbladis Date: Thu, 2 Jan 2020 21:56:08 +0000 Subject: [PATCH] Allow taking functors as overlays This allows for making the default overrides customisable by exposing them as a set with an override function. --- default.nix | 49 +++++++++++++++++++++++++++++++---------------- tests/default.nix | 1 + 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/default.nix b/default.nix index 40c1472..4f328c4 100644 --- a/default.nix +++ b/default.nix @@ -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; + }; } diff --git a/tests/default.nix b/tests/default.nix index 725eb27..8e3aacb 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -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; };