Maybe I better explain what I'm trying to achieve. I have a bunch of packages and overrides that aren't very useful for others, so I can't commit them to nixpkgs. I don't want to constantly maintain my own "fork" that I need to keep up-to-date, but rather use the current "channels" functionality.
So I figured it's easiest to just use packageOverrides to apply the modifications and to add the additional packages. This works fine for almost everything, but I want to structure my additional packages more like nixpkgs itself (use directories and callPackage). Ideally, I don't want to distinguish between nixpkgs and my own pkgs, so the scope for callPackage needs to be the composition of nixpkgs with my own stuff. But it seems I can't get a reference to the final nixpkgs attrset within the overrides function... Any hints? Thanks, Mathijs On Fri, Jul 6, 2012 at 12:10 PM, Mathijs Kwik <[email protected]> wrote: > On Fri, Jul 6, 2012 at 12:01 PM, Kirill Elagin <[email protected]> wrote: >> rec is the answer (this is something like let/letrec in Lisp, if you know >> what I mean ;) ). > > I don't see how rec would help here. > As I understand it, rec helps when an attrset has attributes that > refer to each other. > But in this case, bar isn't referring to foo in the same object (the > overrides object I'm creating, containing just foo and bar), but to > pkgs.foo. > > Anyway, I tried it anyway: > packageOverrides = pkgs: > rec { foo = "string"; > bar = pkgs.foo + " concatenation"; > }; > > But this does not help. > Still "missing attribute foo". > > >> >> -- >> Кирилл Елагин >> >> >> 2012/7/6 Mathijs Kwik <[email protected]> >>> >>> Hi all, >>> >>> I was reading this interesting piece of all-packages.nix >>> (comments/whitespace removed): >>> >>> applyGlobalOverrides = overrider: >>> let >>> overrides = overrider pkgsOrig // >>> (lib.optionalAttrs (pkgsOrig.stdenv ? overrides && crossSystem >>> == null) (pkgsOrig.stdenv.overrides pkgsOrig)); >>> pkgsOrig = pkgsFun pkgs {}; >>> pkgs = pkgsFun pkgs overrides; >>> in pkgs; >>> >>> I'm familiar with tying-the-knot lazy trickery in haskell. >>> As pkgsOrig uses pkgs (the final end result including overrides), and >>> the overrider function gets passed pkgsOrig, I would expect the >>> following to work: >>> >>> packageOverrides = pkgs: >>> { foo = "string"; >>> bar = pkgs.foo + " concatenation"; >>> }; >>> >>> However, it complains about foo missing. >>> What am I missing? >>> >>> Thanks, >>> Mathijs >>> _______________________________________________ >>> nix-dev mailing list >>> [email protected] >>> http://lists.science.uu.nl/mailman/listinfo/nix-dev >> >> _______________________________________________ nix-dev mailing list [email protected] http://lists.science.uu.nl/mailman/listinfo/nix-dev
