[Nix-dev] overriding node packages
Mathijs Kwik
mathijs at bluescreen303.nl
Mon Dec 23 15:25:37 CET 2013
Hi all,
It seems the way we currently handle nodePackages has become a bit
monolithic, making it very hard to override the stuff that gets
generated by npm2nix.
2 simple reasons why one wants to override:
- Add an optional dependency (runtime check)
- Patch/disable tests (that got enabled by recent prepublish change)
The packages themselves are overridable, but there is no clean way to
plug those overrides back into "self", other than a cumbersome manual
deep-merge through packageOverrides [1]. This is necessary in case you
need to fix a dependency that is used by other generated packages.
node-packages.nix has a comment line mentioning manual packages could
go below it, but those will be overriden (by //) by anything in
node-packages-generated.nix and the current "by-spec" and "by-version"
attrset structures complicate this even further.
I can think of 3 solutions:
- provide more hooks in the generated stuff
we already do this for "nativeDeps", but we can extend this for optional
dependencies, flags and preConfigure hooks.
This will work, but gives a lot of dynamic checks and makes the generated
sources quite verbose.
- store hooks/overrides in npm2nix
this is the route that cabal2nix uses. Main issue is that
source/logic will be in 2
places and npm2nix itself becomes a cyclic dependency even more. People using
an older version of npm2nix might overwrite the customizations any time they
add a new package or perform upgrades.
- something involving "recursiveUpdate". But the lazy "self" seems to become
problematic in case you want to refer to "the original".
These solutions feel suboptimal. I think this kind of thing (nested
attrset override / looped-back "self") happens more, but the current
best practise changed a few times over time. Does anyone know of a way
to improve the current situation?
Thanks,
Mathijs
[1] https://github.com/bluescreen303/bluenix/blob/master/pkgs/overrides.nix
scroll down to nodePackages. first 2 overrides are just for the sed fix,
last one adds 1 optional dependency
More information about the nix-dev
mailing list