From 2f4562567398e145083e8df79e839f9f2728e4e8 Mon Sep 17 00:00:00 2001 From: regnat Date: Fri, 23 Apr 2021 10:49:10 +0200 Subject: [PATCH 1/3] Allow easily marking a derivation as content-addressed --- pkgs/stdenv/generic/make-derivation.nix | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pkgs/stdenv/generic/make-derivation.nix b/pkgs/stdenv/generic/make-derivation.nix index 74609412782c..5b446b118269 100644 --- a/pkgs/stdenv/generic/make-derivation.nix +++ b/pkgs/stdenv/generic/make-derivation.nix @@ -89,6 +89,8 @@ in rec { , patches ? [] + , __contentAddressed ? false + , ... } @ attrs: let @@ -253,6 +255,12 @@ in rec { inherit doCheck doInstallCheck; inherit outputs; + } // lib.optionalAttrs (__contentAddressed) { + inherit __contentAddressed; + # Provide default values for outputHashMode and outputHashAlgo because + # most people won't care about these anyways + outputHashAlgo = attrs.outputHashAlgo or "sha256"; + outputHashMode = attrs.outputHashMode or "recursive"; } // lib.optionalAttrs (stdenv.hostPlatform != stdenv.buildPlatform) { cmakeFlags = (/**/ if lib.isString cmakeFlags then [cmakeFlags] From cc5b30c6ac03273cfd76975ba83744a210f1704d Mon Sep 17 00:00:00 2001 From: regnat Date: Fri, 23 Apr 2021 10:54:38 +0200 Subject: [PATCH 2/3] Make it easy to build everything as content-addressed Add a config field `contentAddressedByDefault` and an associated environment variable `NIXPKGS_CA_BY_DEFAULT` to make every nixpkgs derivation content-addressed by default --- pkgs/stdenv/generic/make-derivation.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkgs/stdenv/generic/make-derivation.nix b/pkgs/stdenv/generic/make-derivation.nix index 5b446b118269..2bceb9e4333e 100644 --- a/pkgs/stdenv/generic/make-derivation.nix +++ b/pkgs/stdenv/generic/make-derivation.nix @@ -89,7 +89,10 @@ in rec { , patches ? [] - , __contentAddressed ? false + , __contentAddressed ? + (! attrs ? outputHash) # Fixed-output drvs can't be content addressed too + && (config.contentAddressedByDefault or false + || builtins.getEnv "NIXPKGS_CA_BY_DEFAULT" == "1") , ... } @ attrs: From 559c5792ef1d0ef413e0abd5ddd07409989ceb1c Mon Sep 17 00:00:00 2001 From: regnat Date: Mon, 26 Apr 2021 16:20:13 +0200 Subject: [PATCH 3/3] Remove the NIXPKGS_CA_BY_DEFAULT env variable Not really needed, and not desired either --- pkgs/stdenv/generic/make-derivation.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkgs/stdenv/generic/make-derivation.nix b/pkgs/stdenv/generic/make-derivation.nix index 2bceb9e4333e..de1b1abd6155 100644 --- a/pkgs/stdenv/generic/make-derivation.nix +++ b/pkgs/stdenv/generic/make-derivation.nix @@ -91,8 +91,7 @@ in rec { , __contentAddressed ? (! attrs ? outputHash) # Fixed-output drvs can't be content addressed too - && (config.contentAddressedByDefault or false - || builtins.getEnv "NIXPKGS_CA_BY_DEFAULT" == "1") + && (config.contentAddressedByDefault or false) , ... } @ attrs: