knitr::opts_chunk$set( collapse = TRUE, comment = "#>" )
library(rix)
More than 100'000 pieces of software are available through the Nix package
manager. Nix's repository of packages is called nixpkgs
and it includes the
entirety of CRAN and Bioconductor. nixpkgs
is actually "just" a GitHub
repository containing thousands upon thousands of Nix expressions. When
installing a package, these expressions get evaluated, and the package in
question gets installed. What "installed" means can vary: sometimes the package
gets built from source, sometimes a pre-compiled binary package for your
operating system gets downloaded and made available.
For example, here is the Nix expression that downloads and installs Quarto. This is an example of an expression that downloads the pre-compiled binary from Quarto’s own GitHub repository, and then installs it. The installation process in this case is essentially making sure that Quarto is able to find its dependencies, which also get installed from Nix, and some R and Python packages to make Quarto work well with both languages also get installed.
It is possible to use rix()
to add tools to an environment and this vignette
explains how.
The call below generates a default.nix
that defines an environment with the
latest version of R available in nixpkgs
. The R {quarto}
package is also
installed, as well as the quarto
command line tool (required to edit Quarto
documents from R using the {quarto}
package) and git:
path_default_nix <- tempdir() rix( r_ver = "latest-upstream", r_pkgs = c("quarto"), system_pkgs = c("quarto", "git"), git_pkgs = NULL, ide = "none", project_path = path_default_nix, overwrite = TRUE )
#> # This file was generated by the {rix} R package v0.7.1 on 2024-07-01 #> # with following call: #> # >rix(r_ver = "12a9c0004bc987afb1ff511ebb97b67497a68e22", #> # > r_pkgs = c("quarto"), #> # > system_pkgs = c("quarto", #> # > "git"), #> # > git_pkgs = NULL, #> # > ide = "none", #> # > project_path = path_default_nix, #> # > overwrite = TRUE) #> # It uses nixpkgs' revision 12a9c0004bc987afb1ff511ebb97b67497a68e22 for reproducibility purposes #> # which will install R version latest. #> # Report any issues to https://github.com/ropensci/rix #> let #> pkgs = import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/12a9c0004bc987afb1ff511ebb97b67497a68e22.tar.gz") {}; #> #> rpkgs = builtins.attrValues { #> inherit (pkgs.rPackages) #> quarto; #> }; #> #> system_packages = builtins.attrValues { #> inherit (pkgs) #> quarto #> git #> R #> glibcLocales #> nix; #> }; #> #> in #> #> pkgs.mkShell { #> LOCALE_ARCHIVE = if pkgs.system == "x86_64-linux" then "${pkgs.glibcLocales}/lib/locale/locale-archive" else ""; #> LANG = "en_US.UTF-8"; #> LC_ALL = "en_US.UTF-8"; #> LC_TIME = "en_US.UTF-8"; #> LC_MONETARY = "en_US.UTF-8"; #> LC_PAPER = "en_US.UTF-8"; #> LC_MEASUREMENT = "en_US.UTF-8"; #> #> buildInputs = [ rpkgs system_packages ]; #> #> }
You can look for all the available software
here.
Simply look for the right package name, and add it to the system_pkgs
argument
of rix()
. If you have trouble finding something, don’t hesitate to
open an issue and ask for support!
Whether you use Quarto, Rmarkdown, or Sweave, literate programming with R
requires a TexLive distribution to be installed. You can use rix()
to install
a minimalist TexLive distribution and then add the packages that you require as
you go. The basic use is to simply add a TexLive package to the tex_pkgs
argument of rix()
like this:
path_default_nix <- tempdir() rix( r_ver = "latest-upstream", r_pkgs = c("quarto"), system_pkgs = "quarto", tex_pkgs = c("amsmath"), ide = "none", project_path = path_default_nix, overwrite = TRUE, print = TRUE ) #> # This file was generated by the {rix} R package v0.7.1 on 2024-07-01 #> # with following call: #> # >rix(r_ver = "12a9c0004bc987afb1ff511ebb97b67497a68e22", #> # > r_pkgs = c("quarto"), #> # > system_pkgs = "quarto", #> # > tex_pkgs = c("amsmath"), #> # > ide = "none", #> # > project_path = path_default_nix, #> # > overwrite = TRUE, #> # > print = TRUE) #> # It uses nixpkgs' revision 12a9c0004bc987afb1ff511ebb97b67497a68e22 for reproducibility purposes #> # which will install R version latest. #> # Report any issues to https://github.com/ropensci/rix #> let #> pkgs = import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/12a9c0004bc987afb1ff511ebb97b67497a68e22.tar.gz") {}; #> #> rpkgs = builtins.attrValues { #> inherit (pkgs.rPackages) #> quarto; #> }; #> #> tex = (pkgs.texlive.combine { #> inherit (pkgs.texlive) #> scheme-small #> amsmath; #> }); #> #> system_packages = builtins.attrValues { #> inherit (pkgs) #> quarto #> R #> glibcLocales #> nix; #> }; #> #> in #> #> pkgs.mkShell { #> LOCALE_ARCHIVE = if pkgs.system == "x86_64-linux" then "${pkgs.glibcLocales}/lib/locale/locale-archive" else ""; #> LANG = "en_US.UTF-8"; #> LC_ALL = "en_US.UTF-8"; #> LC_TIME = "en_US.UTF-8"; #> LC_MONETARY = "en_US.UTF-8"; #> LC_PAPER = "en_US.UTF-8"; #> LC_MEASUREMENT = "en_US.UTF-8"; #> #> buildInputs = [ rpkgs tex system_packages ]; #> #> }
This will automically add the small TexLive distribution available through
nixpkgs
with the amsmath
LaTex package. To know more about setting up
environments for literate programming, refer to the vignette
vignette("z-advanced-topic-building-an-environment-for-literate-programming")
.
Environments built with Nix are not completely cut off from the rest of your
system, and as such, you should be able to use your usual IDE to interact with
Nix environments. The only exception is RStudio. Everything will be explained in
greater detail in the vignette vignette("e-configuring-ide")
.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.