Provided by: nix-bin_2.6.0+dfsg-3_amd64 bug

Name

       nix-env - manipulate or query Nix user environments

Synopsis

       nix-env [--option name value] [--arg name value] [--argstr name value] [{--file | -f} path] [{--profile |
       -p} *path(] [--system-filter system] [--dry-run] operation [options…] [arguments…]

Description

       The command nix-env is used to manipulate Nix user environments. User environments are sets  of  software
       packages  available  to  a user at some point in time. In other words, they are a synthesised view of the
       programs available in the Nix store. There may be  many  user  environments:  different  users  can  have
       different environments, and individual users can switch between different environments.

       nix-env  takes  exactly  one  operation  flag  which  indicates the subcommand to be performed. These are
       documented below.

Selectors

       Several commands, such as nix-env -q and nix-env -i, take a list of arguments that specify  the  packages
       on  which  to  operate.  These  are  extended  regular expressions that must match the entire name of the
       package. (For details on regular expressions, see regex7.)  The  match  is  case-sensitive.  The  regular
       expression  can  optionally  be  followed  by a dash and a version number; if omitted, any version of the
       package will match. Here are some examples:

       • firefox
         Matches the package name firefox and any version.

       • firefox-32.0
         Matches the package name firefox and version 32.0.

       • gtk\\+
         Matches the package name gtk+. The + character must be escaped using a backslash  to  prevent  it  from
         being  interpreted as a quantifier, and the backslash must be escaped in turn with another backslash to
         ensure that the shell passes it on.

       • .\*
         Matches any package name. This is the default for most commands.

       • '.*zip.*'
         Matches any package name containing the string zip. Note the dots: '*zip*' does not work, because in  a
         regular expression, the character * is interpreted as a quantifier.

       • '.*(firefox|chromium).*'
         Matches any package name containing the strings firefox or chromium.

Common options

       This  section  lists  the  options that are common to all operations. These options are allowed for every
       subcommand, though they may not always have an effect.

       • --file / -f path
         Specifies the Nix expression (designated below as the active Nix expression)  used  by  the  --install,
         --upgrade, and --query --available operations to obtain derivations. The default is ~/.nix-defexpr.

         If the argument starts with http:// or https://, it is interpreted as the URL of a tarball that will be
         downloaded and unpacked to a temporary location. The tarball must include a single top-level  directory
         containing at least a file named default.nix.

       • --profile / -p path
         Specifies the profile to be used by those operations that operate on a profile (designated below as the
         active profile). A profile is a sequence of user environments called generations, one of which  is  the
         current generation.

       • --dry-run
         For  the  --install,  --upgrade,  --uninstall, --switch-generation, --delete-generations and --rollback
         operations, this flag will cause nix-env to print what  would  be  done  if  this  flag  had  not  been
         specified, without actually doing it.

         --dry-run also prints out which paths will be substituted (../glossary.md) (i.e., downloaded) and which
         paths will be built from source (because no substitute is available).

       • --system-filter system
         By default, operations such as --query --available show derivations matching any platform. This  option
         allows you to use derivations for the specified platform system.

Files

~/.nix-defexpr
         The  source  for  the default Nix expressions used by the --install, --upgrade, and --query --available
         operations to obtain derivations. The --file option may be used to override this default.

         If ~/.nix-defexpr is a file, it is loaded as a Nix expression. If the expression is a set, it  is  used
         as the default Nix expression.  If the expression is a function, an empty set is passed as argument and
         the return value is used as the default Nix expression.

         If ~/.nix-defexpr is a directory containing a default.nix file, that file is loaded  as  in  the  above
         paragraph.

         If  ~/.nix-defexpr  is  a  directory  without  a  default.nix  file,  then its contents (both files and
         subdirectories) are loaded as Nix expressions. The expressions are combined into  a  single  set,  each
         expression under an attribute with the same name as the original file or subdirectory.

         For example, if ~/.nix-defexpr contains two files, foo.nix and bar.nix, then the default Nix expression
         will essentially be

       {
         foo = import ~/.nix-defexpr/foo.nix;
         bar = import ~/.nix-defexpr/bar.nix;
       }

              The file manifest.nix is always ignored. Subdirectories without a default.nix file  are  traversed
              recursively in search of more Nix expressions, but the names of these intermediate directories are
              not added to the attribute paths of the default Nix expression.

              The command nix-channel places symlinks to the downloaded Nix  expressions  from  each  subscribed
              channel in this directory.

       • ~/.nix-profile
         A   symbolic   link   to   the   user’s   current   profile.   By   default,  this  symlink  points  to
         prefix/var/nix/profiles/default. The PATH environment variable should  include  ~/.nix-profile/bin  for
         the user environment to be visible to the user.

Operation --install

   Synopsis
       nix-env {--install | -i} args… [{--prebuilt-only | -b}] [{--attr | -A}] [--from-expression] [-E] [--from-
       profile path] [--preserve-installed | -P] [--remove-all | -r]

   Description
       The install operation creates a new user environment, based on  the  current  generation  of  the  active
       profile,  to which a set of store paths described by args is added. The arguments args map to store paths
       in a number of possible ways:

       • By default, args is a set of derivation names denoting derivations in the active Nix expression.  These
         are realised, and the resulting output paths are installed. Currently installed derivations with a name
         equal to the name of a derivation being added are removed unless  the  option  --preserve-installed  is
         specified.

         If  there are multiple derivations matching a name in args that have the same name (e.g., gcc-3.3.6 and
         gcc-4.1.1), then the derivation with the highest priority is used. A derivation can define  a  priority
         by  declaring  the  meta.priority  attribute.  This  attribute  should be a number, with a higher value
         denoting a lower priority. The default priority is 0.

         If there are multiple matching derivations with the same priority, then the derivation with the highest
         version will be installed.

         You  can  force the installation of multiple derivations with the same name by being specific about the
         versions. For instance, nix-env -i gcc-3.3.6 gcc-4.1.1 will install  both  version  of  GCC  (and  will
         probably cause a user environment conflict!).

       • If  --attr  (-A)  is  specified, the arguments are attribute paths that select attributes from the top-
         level Nix expression. This is faster than using derivation names  and  unambiguous.  To  find  out  the
         attribute paths of available packages, use nix-env -qaP.

       • If  --from-profile  path is given, args is a set of names denoting installed store paths in the profile
         path. This is an easy way to copy user environment elements from one profile to another.

       • If --from-expression is given, args are Nix functions (../expressions/language-constructs.md#functions)
         that  are  called  with the active Nix expression as their single argument. The derivations returned by
         those function calls are installed. This allows derivations to be  specified  in  an  unambiguous  way,
         which is necessary if there are multiple derivations with the same name.

       • If  args  are  store  derivations,  then these are realised (nix-store.md#operation---realise), and the
         resulting output paths are installed.

       • If  args  are  store  paths  that  are  not  store  derivations,  then   these   are   realised   (nix-
         store.md#operation---realise) and installed.

       • By   default  all  outputs  are  installed  for  each  derivation.  That  can  be  reduced  by  setting
         meta.outputsToInstall.

   Flags
       • --prebuilt-only / -b
         Use only derivations for which a substitute is registered, i.e., there is a pre-built binary  available
         that can be downloaded in lieu of building the derivation. Thus, no packages will be built from source.

       • --preserve-installed; -P
         Do  not remove derivations with a name matching one of the derivations being installed. Usually, trying
         to have two versions of the same package installed in the same generation of a profile will lead to  an
         error  in  building the generation, due to file name clashes between the two versions. However, this is
         not the case for all packages.

       • --remove-all; -r
         Remove all previously installed packages first. This is equivalent to running nix-env  -e  '.*'  first,
         except that everything happens in a single transaction.

   Examples
       To install a package using a specific attribute path from the active Nix expression:

       $ nix-env -iA gcc40mips
       installing `gcc-4.0.2'
       $ nix-env -iA xorg.xorgserver
       installing `xorg-server-1.2.0'

       To install a specific version of gcc using the derivation name:

       $ nix-env --install gcc-3.3.2
       installing `gcc-3.3.2'
       uninstalling `gcc-3.1'

       Using  attribute  path  for  selecting a package is preferred, as it is much faster and there will not be
       multiple matches.

       Note the previously installed version is removed, since --preserve-installed was not specified.

       To install an arbitrary version:

       $ nix-env --install gcc
       installing `gcc-3.3.2'

       To install all derivations in the Nix expression foo.nix:

       $ nix-env -f ~/foo.nix -i '.*'

       To copy the store path with symbolic name gcc from another profile:

       $ nix-env -i --from-profile /nix/var/nix/profiles/foo gcc

       To install a specific store derivation (typically created by nix-instantiate):

       $ nix-env -i /nix/store/fibjb1bfbpm5mrsxc4mh2d8n37sxh91i-gcc-3.4.3.drv

       To install a specific output path:

       $ nix-env -i /nix/store/y3cgx0xj1p4iv9x0pnnmdhr8iyg741vk-gcc-3.4.3

       To install from a Nix expression specified on the command-line:

       $ nix-env -f ./foo.nix -i -E \
           'f: (f {system = "i686-linux";}).subversionWithJava'

       I.e., this evaluates to (f: (f {system =  "i686-linux";}).subversionWithJava)  (import  ./foo.nix),  thus
       selecting  the  subversionWithJava  attribute  from  the  set returned by calling the function defined in
       ./foo.nix.

       A dry-run tells you which paths will be downloaded or built from source:

       $ nix-env -f '<nixpkgs>' -iA hello --dry-run
       (dry run; not doing anything)
       installing ‘hello-2.10’
       this path will be fetched (0.04 MiB download, 0.19 MiB unpacked):
         /nix/store/wkhdf9jinag5750mqlax6z2zbwhqb76n-hello-2.10
         ...

       To install Firefox from the latest revision in the Nixpkgs/NixOS 14.12 channel:

       $ nix-env -f https://github.com/NixOS/nixpkgs/archive/nixos-14.12.tar.gz -iA firefox

Operation --upgrade

   Synopsis
       nix-env {--upgrade | -u} args [--lt | --leq | --eq | --always] [{--prebuilt-only | -b}] [{--attr  |  -A}]
       [--from-expression] [-E] [--from-profile path] [--preserve-installed | -P]

   Description
       The  upgrade  operation  creates  a  new  user environment, based on the current generation of the active
       profile, in which all store paths are replaced for which there are newer versions in  the  set  of  paths
       described  by args. Paths for which there are no newer versions are left untouched; this is not an error.
       It is also not an error if an element of args matches no installed derivations.

       For a description of how args is mapped to a set of store paths, see --install (#operation---install). If
       args describes multiple store paths with the same symbolic name, only the one with the highest version is
       installed.

   Flags
       • --lt
         Only upgrade a derivation to newer versions. This is the default.

       • --leq
         In addition to upgrading to newer versions, also “upgrade” to derivations that have the  same  version.
         Version are not a unique identification of a derivation, so there may be many derivations that have the
         same version. This flag may be useful to force “synchronisation” between the  installed  and  available
         derivations.

       • --eq
         Only  “upgrade”  to  derivations  that  have  the  same  version. This may not seem very useful, but it
         actually is, e.g., when there  is  a  new  release  of  Nixpkgs  and  you  want  to  replace  installed
         applications  with  the  same  versions  built  against  newer  dependencies  (to  reduce the number of
         dependencies floating around on your system).

       • --always
         In addition to upgrading to newer versions, also “upgrade” to derivations that have the same or a lower
         version.  I.e., derivations may actually be downgraded depending on what is available in the active Nix
         expression.

       For the other flags, see --install.

   Examples
       $ nix-env --upgrade -A nixpkgs.gcc
       upgrading `gcc-3.3.1' to `gcc-3.4'

       When there are no updates available, nothing will happen:

       $ nix-env --upgrade -A nixpkgs.pan

       Using -A is preferred when possible, as it is faster and unambiguous but it is also possible  to  upgrade
       to a specific version by matching the derivation name:

       $ nix-env -u gcc-3.3.2 --always
       upgrading `gcc-3.4' to `gcc-3.3.2'

       To  try  to  upgrade  everything  (matching  packages  based  on  the part of the derivation name without
       version):

       $ nix-env -u
       upgrading `hello-2.1.2' to `hello-2.1.3'
       upgrading `mozilla-1.2' to `mozilla-1.4'

   Versions
       The upgrade operation determines whether a derivation y is an upgrade of a derivation  x  by  looking  at
       their  respective name attributes.  The names (e.g., gcc-3.3.1 are split into two parts: the package name
       (gcc), and the version (3.3.1). The version part starts after the first dash not followed by a letter.  x
       is  considered  an upgrade of y if their package names match, and the version of y is higher than that of
       x.

       The versions are compared by splitting them into contiguous components  of  numbers  and  letters.  E.g.,
       3.3.1pre5  is  split into [3, 3, 1, "pre", 5]. These lists are then compared lexicographically (from left
       to right). Corresponding components a and b are compared as follows.  If they are both  numbers,  integer
       comparison  is  used. If a is an empty string and b is a number, a is considered less than b. The special
       string component pre (for pre-release) is considered to be less than other components. String  components
       are  considered  less than number components. Otherwise, they are compared lexicographically (i.e., using
       case-sensitive string comparison).

       This is illustrated by the following examples:

       1.0 < 2.3
       2.1 < 2.3
       2.3 = 2.3
       2.5 > 2.3
       3.1 > 2.3
       2.3.1 > 2.3
       2.3.1 > 2.3a
       2.3pre1 < 2.3
       2.3pre3 < 2.3pre12
       2.3a < 2.3c
       2.3pre1 < 2.3c
       2.3pre1 < 2.3q

Operation --uninstall

   Synopsis
       nix-env {--uninstall | -e} drvnames…

   Description
       The uninstall operation creates a new user environment, based on the current  generation  of  the  active
       profile, from which the store paths designated by the symbolic names drvnames are removed.

   Examples
       $ nix-env --uninstall gcc
       $ nix-env -e '.*' (remove everything)

Operation --set

   Synopsis
       nix-env --set drvname

   Description
       The  --set  operation  modifies  the  current  generation  of  a  profile so that it contains exactly the
       specified derivation, and nothing else.

   Examples
       The following updates a profile such that its current generation will contain just Firefox:

       $ nix-env -p /nix/var/nix/profiles/browser --set firefox

Operation --set-flag

   Synopsis
       nix-env --set-flag name value drvnames

   Description
       The --set-flag operation allows meta attributes of installed packages to be modified. There  are  several
       attributes  that  can  be  usefully  modified,  because  they affect the behaviour of nix-env or the user
       environment build script:

       • priority can be changed to resolve filename  clashes.  The  user  environment  build  script  uses  the
         meta.priority  attribute of derivations to resolve filename collisions between packages. Lower priority
         values denote a higher priority. For instance, the GCC wrapper package  and  the  Binutils  package  in
         Nixpkgs  both have a file bin/ld, so previously if you tried to install both you would get a collision.
         Now, on the other hand, the GCC wrapper declares a higher  priority  than  Binutils,  so  the  former’s
         bin/ld is symlinked in the user environment.

       • keep  can  be set to true to prevent the package from being upgraded or replaced. This is useful if you
         want to hang on to an older version of a package.

       • active can be set to false to “disable” the package. That is, no symlinks  will  be  generated  to  the
         files  of the package, but it remains part of the profile (so it won’t be garbage-collected). It can be
         set back to true to re-enable the package.

   Examples
       To prevent the currently installed Firefox from being upgraded:

       $ nix-env --set-flag keep true firefox

       After this, nix-env -u will ignore Firefox.

       To disable the currently installed Firefox, then install a new Firefox while the old remains part of  the
       profile:

       $ nix-env -q
       firefox-2.0.0.9 (the current one)

       $ nix-env --preserve-installed -i firefox-2.0.0.11
       installing `firefox-2.0.0.11'
       building path(s) `/nix/store/myy0y59q3ig70dgq37jqwg1j0rsapzsl-user-environment'
       collision between `/nix/store/...-firefox-2.0.0.11/bin/firefox'
         and `/nix/store/...-firefox-2.0.0.9/bin/firefox'.
       (i.e., can’t have two active at the same time)

       $ nix-env --set-flag active false firefox
       setting flag on `firefox-2.0.0.9'

       $ nix-env --preserve-installed -i firefox-2.0.0.11
       installing `firefox-2.0.0.11'

       $ nix-env -q
       firefox-2.0.0.11 (the enabled one)
       firefox-2.0.0.9 (the disabled one)

       To make files from binutils take precedence over files from gcc:

       $ nix-env --set-flag priority 5 binutils
       $ nix-env --set-flag priority 10 gcc

Operation --query

   Synopsis
       nix-env  {--query  |  -q}  names… [--installed | --available | -a] [{--status | -s}] [{--attr-path | -P}]
       [--no-name] [{--compare-versions | -c}] [--system]  [--drv-path]  [--out-path]  [--description]  [--meta]
       [--xml] [--json] [{--prebuilt-only | -b}] [{--attr | -A} attribute-path]

   Description
       The  query  operation displays information about either the store paths that are installed in the current
       generation of the active profile (--installed), or the derivations that are available for installation in
       the active Nix expression (--available). It only prints information about derivations whose symbolic name
       matches one of names.

       The derivations are sorted by their name attributes.

   Source selection
       The following flags specify the set of things on which the query operates.

       • --installed
         The query operates on the store paths that are installed  in  the  current  generation  of  the  active
         profile. This is the default.

       • --available; -a
         The query operates on the derivations that are available in the active Nix expression.

   Queries
       The  following  flags  specify what information to display about the selected derivations. Multiple flags
       may be specified, in which case the information is shown in the order given here. Note that the  name  of
       the derivation is shown unless --no-name is specified.

       • --xml
         Print  the  result  in an XML representation suitable for automatic processing by other tools. The root
         element is called items, which contains a item element for each available or installed derivation.  The
         fields discussed below are all stored in attributes of the item elements.

       • --json
         Print the result in a JSON representation suitable for automatic processing by other tools.

       • --prebuilt-only / -b
         Show only derivations for which a substitute is registered, i.e., there is a pre-built binary available
         that can be downloaded in lieu of building the derivation. Thus, this shows all packages that  probably
         can be installed quickly.

       • --status; -s
         Print  the  status  of  the  derivation.  The status consists of three characters. The first is I or -,
         indicating whether the derivation is currently installed  in  the  current  generation  of  the  active
         profile. This is by definition the case for --installed, but not for --available. The second is P or -,
         indicating whether the derivation is present on the system. This indicates whether installation  of  an
         available derivation will require the derivation to be built. The third is S or -, indicating whether a
         substitute is available for the derivation.

       • --attr-path; -P
         Print the attribute path of the derivation, which can be used to  unambiguously  select  it  using  the
         --attr  option  available in commands that install derivations like nix-env --install. This option only
         works together with --available

       • --no-name
         Suppress printing of the name attribute of each derivation.

       • --compare-versions / -c
         Compare installed versions to available versions, or vice versa (if  --available  is  given).  This  is
         useful  for quickly seeing whether upgrades for installed packages are available in a Nix expression. A
         column is added with the following meaning:

         • < version
           A newer version of the package is available or installed.

         • = version
           At most the same version of the package is available or installed.

         • > version
           Only older versions of the package are available or installed.

         • - ?
           No version of the package is available or installed.

       • --system
         Print the system attribute of the derivation.

       • --drv-path
         Print the path of the store derivation.

       • --out-path
         Print the output path of the derivation.

       • --description
         Print a short (one-line) description of the derivation, if available. The description is taken from the
         meta.description attribute of the derivation.

       • --meta
         Print all of the meta-attributes of the derivation. This option is only available with --xml or --json.

   Examples
       To show installed packages:

       $ nix-env -q
       bison-1.875c
       docbook-xml-4.2
       firefox-1.0.4
       MPlayer-1.0pre7
       ORBit2-2.8.3
       …

       To show available packages:

       $ nix-env -qa
       firefox-1.0.7
       GConf-2.4.0.1
       MPlayer-1.0pre7
       ORBit2-2.8.3
       …

       To show the status of available packages:

       $ nix-env -qas
       -P- firefox-1.0.7   (not installed but present)
       --S GConf-2.4.0.1   (not present, but there is a substitute for fast installation)
       --S MPlayer-1.0pre3 (i.e., this is not the installed MPlayer, even though the version is the same!)
       IP- ORBit2-2.8.3    (installed and by definition present)
       …

       To show available packages in the Nix expression foo.nix:

       $ nix-env -f ./foo.nix -qa
       foo-1.2.3

       To compare installed versions to what’s available:

       $ nix-env -qc
       ...
       acrobat-reader-7.0 - ?      (package is not available at all)
       autoconf-2.59      = 2.59   (same version)
       firefox-1.0.4      < 1.0.7  (a more recent version is available)
       ...

       To show all packages with “zip” in the name:

       $ nix-env -qa '.*zip.*'
       bzip2-1.0.6
       gzip-1.6
       zip-3.0
       …

       To show all packages with “firefox” or “chromium” in the name:

       $ nix-env -qa '.*(firefox|chromium).*'
       chromium-37.0.2062.94
       chromium-beta-38.0.2125.24
       firefox-32.0.3
       firefox-with-plugins-13.0.1
       …

       To show all packages in the latest revision of the Nixpkgs repository:

       $ nix-env -f https://github.com/NixOS/nixpkgs/archive/master.tar.gz -qa

Operation --switch-profile

   Synopsis
       nix-env {--switch-profile | -S} path

   Description
       This  operation  makes path the current profile for the user. That is, the symlink ~/.nix-profile is made
       to point to path.

   Examples
       $ nix-env -S ~/my-profile

Operation --list-generations

   Synopsis
       nix-env --list-generations

   Description
       This operation print a list of all the currently existing generations for the active profile.  These  may
       be  switched  to  using  the  --switch-generation  operation.  It  also  prints  the creation date of the
       generation, and indicates the current generation.

   Examples
       $ nix-env --list-generations
         95   2004-02-06 11:48:24
         96   2004-02-06 11:49:01
         97   2004-02-06 16:22:45
         98   2004-02-06 16:24:33   (current)

Operation --delete-generations

   Synopsis
       nix-env --delete-generations generations

   Description
       This operation deletes the specified generations of the current profile.  The generations can be  a  list
       of  generation  numbers, the special value old to delete all non-current generations, a value such as 30d
       to delete all generations older than the specified number of days (except for  the  generation  that  was
       active  at  that  point in time), or a value such as +5 to keep the last 5 generations ignoring any newer
       than current, e.g., if 30 is  the  current  generation  +5  will  delete  generation  25  and  all  older
       generations. Periodically deleting old generations is important to make garbage collection effective.

   Examples
       $ nix-env --delete-generations 3 4 8

       $ nix-env --delete-generations +5

       $ nix-env --delete-generations 30d

       $ nix-env -p other_profile --delete-generations old

Operation --switch-generation

   Synopsis
       nix-env {--switch-generation | -G} generation

   Description
       This  operation makes generation number generation the current generation of the active profile. That is,
       if the profile is the path to the active profile, then the symlink profile is made to point  to  profile-
       generation-link, which is in turn a symlink to the actual user environment in the Nix store.

       Switching will fail if the specified generation does not exist.

   Examples
       $ nix-env -G 42
       switching from generation 50 to 42

Operation --rollback

   Synopsis
       nix-env --rollback

   Description
       This operation switches to the “previous” generation of the active profile, that is, the highest numbered
       generation lower than the current generation, if it exists. It  is  just  a  convenience  wrapper  around
       --list-generations and --switch-generation.

   Examples
       $ nix-env --rollback
       switching from generation 92 to 91

       $ nix-env --rollback
       error: no generation older than the current (91) exists

Environment variables

       • NIX_PROFILE
         Location  of  the  Nix  profile. Defaults to the target of the symlink ~/.nix-profile, if it exists, or
         /nix/var/nix/profiles/default otherwise.

                                                                                                      nix-env(1)