nix-community/pip2nix

Scaffold is broken with recent nixpkgs

Opened this issue · 2 comments

See the possibly fixed example at:

rihardsk/mautrix-hangouts-nix@f5ed572

From f5ed572b4b56b2daff002a860b5f4e00e175ed32 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rihards=20Kri=C5=A1lauks?= <rihards.krislauks@gmail.com>
Date: Fri, 7 May 2021 20:51:40 +0300
Subject: [PATCH] Change how python packages are overriden to work around
 breaking changes in nixpkgs

The workaround seems to be working with nixpkgs at ce93c98ce22. mautrix-hangouts
still doesn't build because of some broken python packages, though.
---
 default.nix | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/default.nix b/default.nix
index 4ce33c2..dc7f86e 100644
--- a/default.nix
+++ b/default.nix
@@ -1,19 +1,25 @@
 # Scaffold generated by pip2nix 0.8.0.dev1
+# + some modifications have been added so support the changes that the Python
+# infrastructure in nixpkgs-unstable has gone through
 
 { pkgs ? (import <nixpkgs> {})
 , pythonPackages ? "python38Packages"
 }:
 
 let
-  inherit (pkgs.lib) fix extends;
+  inherit (pkgs.lib) fix composeExtensions;
   basePythonPackages = with builtins; if isAttrs pythonPackages
     then pythonPackages
     else getAttr pythonPackages pkgs;
 
+  # NOTE: As of some recent nixpgs-unstable version, this is broken.
+  # There's a workaround at the bottem that's using
+  # basePythonPackages.pkgs.override instead
+  #
   # Works with the new python-packages, still can fallback to the old
   # variant.
-  basePythonPackagesUnfix = basePythonPackages.__unfix__ or (
-    self: basePythonPackages.override (a: { inherit self; }));
+  # basePythonPackagesUnfix = basePythonPackages.__unfix__ or (
+  #   self: basePythonPackages.override (a: { inherit self; }));
 
   elem = builtins.elem;
   basename = path: with pkgs.lib; last (splitString "/" path);
@@ -41,11 +47,10 @@ let
   pythonPackagesLocalOverrides = self: super: {
   };
 
-  myPythonPackages =
-    (fix
-    (extends pythonPackagesLocalOverrides
-    (extends pythonPackagesOverrides
-    (extends pythonPackagesGenerated
-             basePythonPackagesUnfix))));
+  composedOverrides =
+    (composeExtensions pythonPackagesLocalOverrides
+                      (composeExtensions pythonPackagesOverrides
+                                         pythonPackagesGenerated));
+  myPythonPackages = basePythonPackages.python.override { packageOverrides = composedOverrides; };
 
-in myPythonPackages.mautrix-hangouts
+in myPythonPackages.pkgs.mautrix-hangouts

This uses composeExtensions in the wrong order—extends takes the last override first, while composeExtensions takes the last override last.

@andersk Would you be able to provide a pull with a scaffold with the correct order?