tl;dr
How can I have multiple trace’ in in
let ...
in
builtins.map (value: builtins.trace value.pkgs.hello.opt1 { }) [set1 set2]
builtins.map (value: builtins.trace value.pkgs.hello.opt1 { }) [set3 set4]
long
I’m trying to learn something about overriding derivations, so I made a test file
let
pkgs = import <nixpkgs> { };
testHelloPkg = ({ stdenv, opt1 ? false }:
stdenv.mkDerivation {
pname = "hello";
passthru = { inherit opt1;};
});
testPythonPkg = ({ buildPythonPackage, opt1 ? false }:
buildPythonPackage {
pname = "hello";
version = "1";
passthru = { inherit opt1;};
});
## python
# First override, original python package set
python3_1 = pkgs.python3.override {
packageOverrides = self: super: {
hello = super.pkgs.callPackage testPythonPkg {
inherit (super) buildPythonPackage;
};
};
};
# Second override. XXX: fails! python.override does not compose!
# https://github.com/NixOS/nixpkgs/issues/44426
python3_2 = python3_1.override {
packageOverrides = self: super: {
hello = super.hello.override { opt1 = true; };
};
};
# third override
python3_3 = pkgs.python3.override {
packageOverrides = self: super: {
hello = super.pkgs.callPackage testPythonPkg {
inherit (super) buildPythonPackage;
opt1 = true;
};
};
};
## mkDerivation
# https://nixos.org/manual/nixpkgs/stable/#sec-overlays-argument
hello1 = pkgs.extend
(self: super: { hello = super.callPackage testHelloPkg { }; });
hello2 = hello1.appendOverlays
[ (self: super: { hello = super.hello.override { opt1 = true; }; }) ];
in
# builtins.map (value: builtins.trace value.pkgs.hello.opt1 { }) [
# python3_1
# # python3_2 # XXX: fails
# python3_3
# ]
builtins.map (value: builtins.trace value.pkgs.hello.opt1 { }) [
hello1
hello2
]
run with nix-build --no-out-link test_overlay.nix
.
How can I have both trace’ uncommented in the in
clause?