diff --git a/modules/dream2nix/pip/default.nix b/modules/dream2nix/pip/default.nix index 5443c0b4..e703172a 100644 --- a/modules/dream2nix/pip/default.nix +++ b/modules/dream2nix/pip/default.nix @@ -122,7 +122,7 @@ in { # with the intention to keep modules independent. fetchPipMetadataScript = import ../../../pkgs/fetchPipMetadata/script.nix { inherit lib; - inherit (cfg) pypiSnapshotDate pipFlags pipVersion requirementsList requirementsFiles nativeBuildInputs; + inherit (cfg) env pypiSnapshotDate pipFlags pipVersion requirementsList requirementsFiles nativeBuildInputs; inherit (config.deps) writePureShellScript nix; inherit (config.paths) findRoot; inherit (nixpkgs) gitMinimal nix-prefetch-scripts python3 writeText; @@ -141,18 +141,22 @@ in { # if any of the invalidationData changes, the lock file will be invalidated # and the user will be promted to re-generate it. lock.invalidationData = { - pip = { - inherit - (config.pip) - pypiSnapshotDate - pipFlags - pipVersion - requirementsList - requirementsFiles - ; - # don't invalidate on bugfix version changes - pythonVersion = lib.init (lib.splitVersion config.deps.python.version); - }; + pip = + { + inherit + (config.pip) + pypiSnapshotDate + pipFlags + pipVersion + requirementsList + requirementsFiles + ; + # don't invalidate on bugfix version changes + pythonVersion = lib.init (lib.splitVersion config.deps.python.version); + } + # including env conditionally to not invalidate all existing lockfiles + # TODO: refactor once compat is broken through something else + // (lib.optionalAttrs (config.pip.env != {}) config.pip.env); }; pip = { diff --git a/modules/dream2nix/pip/interface.nix b/modules/dream2nix/pip/interface.nix index b1c43dbe..8111dacf 100644 --- a/modules/dream2nix/pip/interface.nix +++ b/modules/dream2nix/pip/interface.nix @@ -22,6 +22,18 @@ in { }; # user interface + env = l.mkOption { + type = t.attrsOf t.str; + default = {}; + description = '' + environment variables exported while locking + ''; + example = lib.literalExpression '' + { + PIP_FIND_LINKS = "${config.deps.setuptools.dist}"; + } + ''; + }; pypiSnapshotDate = l.mkOption { type = t.nullOr t.str; description = '' diff --git a/pkgs/fetchPipMetadata/script.nix b/pkgs/fetchPipMetadata/script.nix index 63b57542..871185ad 100644 --- a/pkgs/fetchPipMetadata/script.nix +++ b/pkgs/fetchPipMetadata/script.nix @@ -26,6 +26,7 @@ requirementsFiles ? [], pipFlags ? [], pipVersion ? "23.1", + env ? {}, wheelVersion ? "0.40.0", nativeBuildInputs ? [], # maximum release date for packages @@ -86,6 +87,12 @@ writePureShellScript path '' + ${ + lib.foldlAttrs + (acc: name: value: acc + "\nexport " + lib.toShellVar name value) + "" + env + } ${package}/bin/fetch_pip_metadata \ --json-args-file ${args} \ --project-root $(${findRoot})