diff --git a/src/args/make-python-environment/default.nix b/src/args/make-python-environment/default.nix index 29ce32b9..66fea477 100644 --- a/src/args/make-python-environment/default.nix +++ b/src/args/make-python-environment/default.nix @@ -9,6 +9,7 @@ preferWheels ? true, overrides ? (self: super: {}), }: let + # Import poetry2nix poetry2nix = let commit = "528d500ea826383cc126a9be1e633fc92b19ce5d"; sha256 = "sha256:1q245v4q0bb30ncfj66gl6dl1k46am28x7kjj6d3y7r6l4fzppq8"; @@ -18,30 +19,8 @@ }; in import src {pkgs = __nixpkgs__;}; - getPoetryPackages = let - tomlPath = "${pythonProjectDir}/poetry.lock"; - tomlData = builtins.fromTOML (builtins.readFile tomlPath); - tomlPackages = tomlData.package; - packagesNames = builtins.map (pkg: pkg.name) tomlPackages; - extraPackagesLst = builtins.concatLists (builtins.map ( - pkg: - if builtins.hasAttr "extras" pkg - then - builtins.concatLists ( - builtins.attrValues pkg.extras - ) - else [] - ) - tomlPackages); - extraPackagesNames = - builtins.map ( - extra: - builtins.toString (builtins.head (builtins.split " " (__nixpkgs__.lib.toLower extra))) - ) - extraPackagesLst; - in - packagesNames ++ extraPackagesNames; + # Decide Python version is39 = pythonVersion == "3.9"; is310 = pythonVersion == "3.10"; is311 = pythonVersion == "3.11"; @@ -55,35 +34,63 @@ } .${pythonVersion}; - overrideWithHome = pkg: super: - super.${pkg}.overridePythonAttrs ( - old: { - preUnpack = - '' - export HOME=$(mktemp -d) - rm -rf /homeless-shelter - '' - + (old.preUnpack or ""); - } - ); - tomlOverrides = self: super: - builtins.listToAttrs ( + # Override HOME directory for each package/derivation + # and add any custom override on top of it + overridenPackages = self: super: let + overridePackageHome = pkg: super: + super.${pkg}.overridePythonAttrs ( + old: { + preUnpack = + '' + export HOME=$(mktemp -d) + rm -rf /homeless-shelter + '' + + (old.preUnpack or ""); + } + ); + packages = let + lock = "${pythonProjectDir}/poetry.lock"; + data = builtins.fromTOML (builtins.readFile lock); + main = builtins.map (pkg: pkg.name) data.package; + extras = let + list = builtins.concatLists ( + builtins.map ( + pkg: + if builtins.hasAttr "extras" pkg + then builtins.concatLists (builtins.attrValues pkg.extras) + else [] + ) + data.package + ); + names = + builtins.map ( + extra: + builtins.toString ( + builtins.head ( + builtins.split " " (__nixpkgs__.lib.toLower extra) + ) + ) + ) + list; + in + names; + in + main ++ extras; + overridenHomes = builtins.listToAttrs ( builtins.map ( pkg: { name = pkg; - value = overrideWithHome pkg super; + value = overridePackageHome pkg super; } ) - getPoetryPackages + packages ); - combinedOverrides = self: super: let - toml = tomlOverrides self super; - orig = overrides self super; in - toml // orig; + overridenHomes // (overrides self super); + # Final python environment env = poetry2nix.mkPoetryEnv { - overrides = poetry2nix.defaultPoetryOverrides.extend combinedOverrides; + overrides = poetry2nix.defaultPoetryOverrides.extend overridenPackages; inherit preferWheels; projectDir = pythonProjectDir; inherit python;