summary refs log tree commit diff
path: root/pkgs/development/r-modules/wrapper-rstudio.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/r-modules/wrapper-rstudio.nix')
-rw-r--r--pkgs/development/r-modules/wrapper-rstudio.nix33
1 files changed, 33 insertions, 0 deletions
diff --git a/pkgs/development/r-modules/wrapper-rstudio.nix b/pkgs/development/r-modules/wrapper-rstudio.nix
new file mode 100644
index 000000000000..dd9b0e9c5381
--- /dev/null
+++ b/pkgs/development/r-modules/wrapper-rstudio.nix
@@ -0,0 +1,33 @@
+{ stdenv, R, rstudio, makeWrapper, recommendedPackages, packages }:
+
+stdenv.mkDerivation rec {
+
+  name = rstudio.name + "-wrapper";
+
+  buildInputs = [makeWrapper R rstudio] ++ recommendedPackages ++ packages;
+
+  unpackPhase = ":";
+
+  # rWrapper points R to a specific set of packages by using a wrapper
+  # (as in https://nixos.org/nixpkgs/manual/#r-packages) which sets
+  # R_LIBS_SITE.  Ordinarily, it would be possible to make RStudio use
+  # this same set of packages by simply overriding its version of R
+  # with the wrapped one, however, RStudio internally overrides
+  # R_LIBS_SITE.  The below works around this by turning R_LIBS_SITE
+  # into an R file (fixLibsR) which achieves the same effect, then
+  # uses R_PROFILE_USER to load this code at startup in RStudio.
+  fixLibsR = "fix_libs.R";
+  installPhase = ''
+    mkdir $out
+    echo "# Autogenerated by wrapper-rstudio.nix from R_LIBS_SITE" > $out/${fixLibsR}
+    echo -n ".libPaths(c(.libPaths(), \"" >> $out/${fixLibsR}
+    echo -n $R_LIBS_SITE | sed -e 's/:/", "/g' >> $out/${fixLibsR}
+    echo -n "\"))" >> $out/${fixLibsR}
+    echo >> $out/${fixLibsR}
+    makeWrapper ${rstudio}/bin/rstudio $out/bin/rstudio --set R_PROFILE_USER $out/${fixLibsR}
+  '';
+  
+  meta = {
+    platforms = stdenv.lib.platforms.unix;
+  };
+}