Is it possible to override r-packages such that other r-packages will see the overridden version? From what i can tell from pkgs/development/r-modules/default.nix
, it seems like the answer is no?
Specifically, it seems to use this pattern
{ R, pkgs, overrides }:
let
...
# Recursive override pattern.
# `_self` is a collection of packages;
# `self` is `_self` with overridden packages;
# packages in `_self` may depends on overridden packages.
self = (defaultOverrides _self self) // overrides;
_self = { inherit buildRPackage; } //
...
in self
which afaict only allows completely replacing a package with a new one, not making a modification to an existing version of a package.
For example, if I try this, it does “work”, since I completely remove a dependency:
(rPackages.override (oldOverrides : oldOverrides // {overrides = {slam = null;};})).textclean
but if I were to try to actually modify the package instead of removing it, I would either get an infinite loop or it wouldn’t see the other modifications:
with nixkgs;
myRPackages = (rPackages.override (oldOverrides: oldOverrides // { overrides = { slam = myRPackages.slam.override something; }; }));
# <infinite loop>
myRPackages2 = (rPackages.override (oldOverrides: oldOverrides // {
overrides = {
slam = rPackages.slam.override something;
textclean = rPackages.textclean.override something;
};
}));
# Now myRPackages.textclean uses the old version of slam instead of my modified version in a transitive dependency