Merge pull request #22219 from Hodapp87/master
RStudio: Optionally allow packages from custom R environment
This commit is contained in:
commit
456b9f849d
3 changed files with 69 additions and 4 deletions
|
@ -1,4 +1,14 @@
|
|||
{ stdenv, fetchurl, makeDesktopItem, cmake, boost155, zlib, openssl, R, qt4, libuuid, hunspellDicts, unzip, ant, jdk, gnumake, makeWrapper }:
|
||||
{ stdenv, fetchurl, makeDesktopItem, cmake, boost155, zlib, openssl,
|
||||
R, qt4, libuuid, hunspellDicts, unzip, ant, jdk, gnumake, makeWrapper,
|
||||
# If you have set up an R wrapper with other packages by following
|
||||
# something like https://nixos.org/nixpkgs/manual/#r-packages, RStudio
|
||||
# by default not be able to access any of those R packages. In order
|
||||
# to do this, override the argument "R" here with your respective R
|
||||
# wrapper, and set "useRPackages" to true. This will add the
|
||||
# environment variable R_PROFILE_USER to the RStudio wrapper, pointing
|
||||
# to an R script which will allow R to use these packages.
|
||||
useRPackages ? false
|
||||
}:
|
||||
|
||||
let
|
||||
version = "0.98.110";
|
||||
|
@ -72,8 +82,14 @@ stdenv.mkDerivation rec {
|
|||
mimeType = "text/x-r-source;text/x-r;text/x-R;text/x-r-doc;text/x-r-sweave;text/x-r-markdown;text/x-r-html;text/x-r-presentation;application/x-r-data;application/x-r-project;text/x-r-history;text/x-r-profile;text/x-tex;text/x-markdown;text/html;text/css;text/javascript;text/x-chdr;text/x-csrc;text/x-c++hdr;text/x-c++src;";
|
||||
};
|
||||
|
||||
postInstall = ''
|
||||
wrapProgram $out/bin/rstudio --suffix PATH : ${gnumake}/bin
|
||||
postInstall = let rProfile =
|
||||
# RStudio seems to bypass the environment variables that the R
|
||||
# wrapper already applies, and so this sets R_PROFILE_USER to
|
||||
# again make those R packages accessible:
|
||||
if useRPackages
|
||||
then "--set R_PROFILE_USER ${R}/${R.passthru.fixLibsR}" else "";
|
||||
in ''
|
||||
wrapProgram $out/bin/rstudio --suffix PATH : ${gnumake}/bin ${rProfile}
|
||||
mkdir $out/share
|
||||
cp -r ${desktopItem}/share/applications $out/share
|
||||
mkdir $out/share/icons
|
||||
|
|
|
@ -53,6 +53,37 @@ in with pkgs; {
|
|||
and then run `nix-shell .` to be dropped into a shell with those packages
|
||||
available.
|
||||
|
||||
## RStudio
|
||||
|
||||
RStudio by default will not use the libraries installed like above.
|
||||
You must override its R version with your custom R environment, and
|
||||
set `useRPackages` to `true`, like below:
|
||||
|
||||
```nix
|
||||
{
|
||||
packageOverrides = super: let self = super.pkgs; in
|
||||
{
|
||||
|
||||
rEnv = super.rWrapper.override {
|
||||
packages = with self.rPackages; [
|
||||
devtools
|
||||
ggplot2
|
||||
reshape2
|
||||
yaml
|
||||
optparse
|
||||
];
|
||||
};
|
||||
rstudioEnv = super.rstudio.override {
|
||||
R = rEnv;
|
||||
useRPackages = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
Then like above, `nix-env -f "<nixpkgs>" -iA rstudioEnv` will install
|
||||
this into your user profile.
|
||||
|
||||
## Updating the package set
|
||||
|
||||
```bash
|
||||
|
|
|
@ -1,12 +1,19 @@
|
|||
{ stdenv, R, makeWrapper, recommendedPackages, packages }:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
stdenv.mkDerivation rec {
|
||||
name = R.name + "-wrapper";
|
||||
|
||||
buildInputs = [makeWrapper R] ++ recommendedPackages ++ packages;
|
||||
|
||||
unpackPhase = ":";
|
||||
|
||||
# This filename is used in 'installPhase', but needs to be
|
||||
# referenced elsewhere. This will be relative to this package's
|
||||
# path.
|
||||
passthru = {
|
||||
fixLibsR = "fix_libs.R";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
cd ${R}/bin
|
||||
|
@ -14,6 +21,17 @@ stdenv.mkDerivation {
|
|||
makeWrapper ${R}/bin/$exe $out/bin/$exe \
|
||||
--prefix "R_LIBS_SITE" ":" "$R_LIBS_SITE"
|
||||
done
|
||||
# RStudio (and perhaps other packages) overrides the R_LIBS_SITE
|
||||
# which the wrapper above applies, and as a result packages
|
||||
# installed in the wrapper (as in the method described in
|
||||
# https://nixos.org/nixpkgs/manual/#r-packages) aren't visible.
|
||||
# The below turns R_LIBS_SITE into some R startup code which can
|
||||
# correct this.
|
||||
echo "# Autogenerated by wrapper.nix from R_LIBS_SITE" > $out/${passthru.fixLibsR}
|
||||
echo -n ".libPaths(c(.libPaths(), \"" >> $out/${passthru.fixLibsR}
|
||||
echo -n $R_LIBS_SITE | sed -e 's/:/", "/g' >> $out/${passthru.fixLibsR}
|
||||
echo -n "\"))" >> $out/${passthru.fixLibsR}
|
||||
echo >> $out/${passthru.fixLibsR}
|
||||
'';
|
||||
|
||||
meta = {
|
||||
|
|
Loading…
Reference in a new issue