-
-
Notifications
You must be signed in to change notification settings - Fork 18.1k
Description
Issue description
@FRidh the packageOverrides function argument approach to overriding package used in the base python function (here is the 2.7 one) doesn't compose in overlays. Specifically, if you follow the directions in the nixpkgs manual only the last declared override winds up being applied.
I haven't actually thought of a solution to this yet, other than determining that it is pretty much impossible to work around as you can only get a hold of a closed version of the previous package set via python.pkgs. Perhaps looking into the haskell infrastructure might give some directions (haven't looked at it in a while, but the fixpoint stuff looks like it came from there)?
Steps to reproduce
Put the following into ~/.config/nixpkgs/overlays/1.nix
self: super:
rec {
python27 = super.python27.override {
packageOverrides = python-self: python-super: {
one = "definition from 1.nix";
};
};
}
and this into ~/.config/nixpkgs/overlays/2.nix
self: super:
rec {
python27 = super.python27.override {
packageOverrides = python-self: python-super: {
two = "definition from 2.nix";
};
};
}
Ideally both of these would get applied. This is not the case though as you can see from the following
nix-instantiate --eval -E 'with import <nixpkgs> { }; pythonPackages.one'
error: attribute 'one' missing, at (string):1:28
nix-instantiate --eval -E 'with import <nixpkgs> { }; pythonPackages.two'
"definition from 2.nix"
If you move the 2.nix file aside then you see the override from 1.nix but not 2.nix
mv ~/.config/nixpkgs/overlays/2.nix{,-inactive}
nix-instantiate --eval -E 'with import <nixpkgs> { }; pythonPackages.one'
"definition from 1.nix"
nix-instantiate --eval -E 'with import <nixpkgs> { }; pythonPackages.two'
error: attribute 'two' missing, at (string):1:28