2018-12-05 19:04:04 +01:00
|
|
|
{ lib, runCommand, R, rstudio, makeWrapper, recommendedPackages, packages, qtbase }:
|
2017-05-01 14:59:43 +02:00
|
|
|
|
2018-11-23 23:10:29 +01:00
|
|
|
let
|
2018-12-05 19:04:04 +01:00
|
|
|
qtVersion = with lib.versions; "${major qtbase.version}.${minor qtbase.version}";
|
2018-11-23 23:10:29 +01:00
|
|
|
in
|
2018-12-05 19:04:04 +01:00
|
|
|
runCommand (rstudio.name + "-wrapper") {
|
|
|
|
preferLocalBuild = true;
|
|
|
|
allowSubstitutes = false;
|
2017-05-01 14:59:43 +02:00
|
|
|
|
2018-12-05 19:04:04 +01:00
|
|
|
nativeBuildInputs = [makeWrapper];
|
2017-05-01 14:59:43 +02:00
|
|
|
|
2018-12-05 19:04:04 +01:00
|
|
|
buildInputs = [R rstudio] ++ recommendedPackages ++ packages;
|
2017-05-01 14:59:43 +02:00
|
|
|
|
|
|
|
# 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";
|
|
|
|
}
|
2018-12-05 19:04:04 +01:00
|
|
|
''
|
|
|
|
mkdir $out
|
2018-12-07 22:44:01 +01:00
|
|
|
ln -s ${rstudio}/share $out
|
2018-12-05 19:04:04 +01:00
|
|
|
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 \
|
|
|
|
--prefix QT_PLUGIN_PATH : ${qtbase}/lib/qt-${qtVersion}/plugins
|
|
|
|
''
|