 95dfbe2d63
			
		
	
	
		95dfbe2d63
		
	
	
	
	
		
			
			Reorganize the chapters into parts and reduce the TOC depth to make the TOC useful again. The top-level TOC is very brief, but that is fine because every part will have its own TOC. Section titles of languages/frameworks are also simplified to just the name of the language/framework.
		
			
				
	
	
		
			121 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| R
 | |
| =
 | |
| 
 | |
| ## Installation
 | |
| 
 | |
| Define an environment for R that contains all the libraries that you'd like to
 | |
| use by adding the following snippet to your $HOME/.config/nixpkgs/config.nix file:
 | |
| 
 | |
| ```nix
 | |
| {
 | |
|     packageOverrides = super: let self = super.pkgs; in
 | |
|     {
 | |
| 
 | |
|         rEnv = super.rWrapper.override {
 | |
|             packages = with self.rPackages; [
 | |
|                 devtools
 | |
|                 ggplot2
 | |
|                 reshape2
 | |
|                 yaml
 | |
|                 optparse
 | |
|                 ];
 | |
|         };
 | |
|     };
 | |
| }
 | |
| ```
 | |
| 
 | |
| Then you can use `nix-env -f "<nixpkgs>" -iA rEnv` to install it into your user
 | |
| profile. The set of available libraries can be discovered by running the
 | |
| command `nix-env -f "<nixpkgs>" -qaP -A rPackages`. The first column from that
 | |
| output is the name that has to be passed to rWrapper in the code snipped above.
 | |
| 
 | |
| However, if you'd like to add a file to your project source to make the
 | |
| environment available for other contributors, you can create a `default.nix`
 | |
| file like so:
 | |
| ```nix
 | |
| let
 | |
|   pkgs = import <nixpkgs> {};
 | |
|   stdenv = pkgs.stdenv;
 | |
| in with pkgs; {
 | |
|   myProject = stdenv.mkDerivation {
 | |
|     name = "myProject";
 | |
|     version = "1";
 | |
|     src = if pkgs.lib.inNixShell then null else nix;
 | |
| 
 | |
|     buildInputs = with rPackages; [
 | |
|       R
 | |
|       ggplot2
 | |
|       knitr
 | |
|     ];
 | |
|   };
 | |
| }
 | |
| ```
 | |
| and then run `nix-shell .` to be dropped into a shell with those packages
 | |
| available.
 | |
| 
 | |
| ## RStudio
 | |
| 
 | |
| RStudio uses a standard set of packages and ignores any custom R
 | |
| environments or installed packages you may have.  To create a custom
 | |
| environment, see `rstudioWrapper`, which functions similarly to
 | |
| `rWrapper`:
 | |
| 
 | |
| ```nix
 | |
| {
 | |
|     packageOverrides = super: let self = super.pkgs; in
 | |
|     {
 | |
| 
 | |
|         rstudioEnv = super.rstudioWrapper.override {
 | |
|             packages = with self.rPackages; [
 | |
|                 dplyr
 | |
|                 ggplot2
 | |
|                 reshape2
 | |
|                 ];
 | |
|         };
 | |
|     };
 | |
| }
 | |
| ```
 | |
| 
 | |
| Then like above, `nix-env -f "<nixpkgs>" -iA rstudioEnv` will install
 | |
| this into your user profile.
 | |
| 
 | |
| Alternatively, you can create a self-contained `shell.nix` without the need to
 | |
| modify any configuration files:
 | |
| 
 | |
| ```nix
 | |
| { pkgs ? import <nixpkgs> {}
 | |
| }:
 | |
| 
 | |
| pkgs.rstudioWrapper.override {
 | |
|   packages = with pkgs.rPackages; [ dplyr ggplot2 reshape2 ];
 | |
| }
 | |
| 
 | |
| ```
 | |
| 
 | |
| Executing `nix-shell` will then drop you into an environment equivalent to the
 | |
| one above. If you need additional packages just add them to the list and
 | |
| re-enter the shell.
 | |
| 
 | |
| ## Updating the package set
 | |
| 
 | |
| ```bash
 | |
| nix-shell generate-shell.nix
 | |
| 
 | |
| Rscript generate-r-packages.R cran  > cran-packages.nix.new
 | |
| mv cran-packages.nix.new cran-packages.nix
 | |
| 
 | |
| Rscript generate-r-packages.R bioc  > bioc-packages.nix.new
 | |
| mv bioc-packages.nix.new bioc-packages.nix
 | |
| ```
 | |
| 
 | |
| `generate-r-packages.R <repo>` reads  `<repo>-packages.nix`, therefor the renaming.
 | |
| 
 | |
| 
 | |
| ## Testing if the Nix-expression could be evaluated
 | |
| 
 | |
| ```bash
 | |
| nix-build test-evaluation.nix --dry-run
 | |
| ```
 | |
| 
 | |
| If this exits fine, the expression is ok. If not, you have to edit `default.nix`
 |