Hello all, I am (again) wrapping my head around the current construction of the package set. I think I understand how it works, but there's a few subtle details that I feel like they are confusing, bur probably necessary. I would like to understand why:
1. An override is given the arguments `self` and `super`, as expected. But why does `super.callPackage` resolve dependencies from `self`? I would have expected it to not know about `self`, and resolve dependencies in the scope of `super`. If I wanted this behaviour, I would have used `self.callPackage`, but the current behaviour makes that unnecessary. Why is this implemented like that? 2. In `stage.nix`, why do we construct a *local* fixpoint just for all-packages? The current code is: allPackages = self: super: let res = import ./all-packages.nix { inherit lib nixpkgsFun noSysDirs config; } res self; in res; Even more confusingly, if we look at `all-packages.nix`, it is a function defined like this: { lib, nixpkgsFun, noSysDirs, config}: self: pkgs: So the variable that is called `self` in `stage.nix` is bound to what is called `pkgs` in `all-packages.nix`, and `self` in `all-packages.nix` actually refers to what is called `res` in `stage.nix`!!!! This is confusing to me. Also, why do we need `self` and `pkgs`? Wouldn't one of them be enough? Greetings, Benno
_______________________________________________ nix-dev mailing list nix-dev@lists.science.uu.nl http://lists.science.uu.nl/mailman/listinfo/nix-dev