Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ lib 2, runCommand 3, R 4, rstudio 5, makeWrapper 6, wrapQtAppsHook 7, recommendedPackages 8, packages 9, fontconfig 10}: 11 12runCommand (rstudio.name + "-wrapper") 13{ 14 preferLocalBuild = true; 15 allowSubstitutes = false; 16 17 nativeBuildInputs = [ (if rstudio.server then makeWrapper else wrapQtAppsHook) ]; 18 dontWrapQtApps = true; 19 20 buildInputs = [ R rstudio ] ++ recommendedPackages ++ packages; 21 22 # rWrapper points R to a specific set of packages by using a wrapper 23 # (as in https://nixos.org/nixpkgs/manual/#r-packages) which sets 24 # R_LIBS_SITE. Ordinarily, it would be possible to make RStudio use 25 # this same set of packages by simply overriding its version of R 26 # with the wrapped one, however, RStudio internally overrides 27 # R_LIBS_SITE. The below works around this by turning R_LIBS_SITE 28 # into an R file (fixLibsR) which achieves the same effect, then 29 # uses R_PROFILE_USER to load this code at startup in RStudio. 30 fixLibsR = "fix_libs.R"; 31} 32 ( 33 '' 34 mkdir -p $out/bin 35 ln -s ${rstudio}/share $out 36 echo "# Autogenerated by wrapper-rstudio.nix from R_LIBS_SITE" > $out/$fixLibsR 37 echo -n ".libPaths(c(.libPaths(), \"" >> $out/$fixLibsR 38 echo -n $R_LIBS_SITE | sed -e 's/:/", "/g' >> $out/$fixLibsR 39 echo -n "\"))" >> $out/$fixLibsR 40 echo >> $out/$fixLibsR 41 '' + 42 (if 43 rstudio.server then '' 44 makeWrapper ${rstudio}/bin/rsession $out/bin/rsession \ 45 --set R_PROFILE_USER $out/$fixLibsR --set FONTCONFIG_FILE ${fontconfig.out}/etc/fonts/fonts.conf 46 47 makeWrapper ${rstudio}/bin/rserver $out/bin/rserver \ 48 --add-flags --rsession-path=$out/bin/rsession 49 '' 50 else 51 '' 52 makeQtWrapper ${rstudio}/bin/rstudio $out/bin/rstudio \ 53 --set R_PROFILE_USER $out/$fixLibsR 54 '') 55 )