Merge pull request #22219 from Hodapp87/master

RStudio: Optionally allow packages from custom R environment
This commit is contained in:
Peter Simons 2017-01-29 21:13:58 +01:00 committed by GitHub
commit 456b9f849d
3 changed files with 69 additions and 4 deletions

View file

@ -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

View file

@ -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

View file

@ -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 = {