2020-07-24 10:56:19 +00:00
|
|
|
|
Title: nix-env
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
2020-07-24 10:56:19 +00:00
|
|
|
|
# Name
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
2020-07-24 10:56:19 +00:00
|
|
|
|
`nix-env` - manipulate or query Nix user environments
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
2020-07-24 10:56:19 +00:00
|
|
|
|
# Synopsis
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
2020-07-24 10:56:19 +00:00
|
|
|
|
`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…*]
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
|
|
|
|
# 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. See also [???](#sec-common-options).
|
|
|
|
|
|
2020-07-23 12:28:05 +00:00
|
|
|
|
- `--file` / `-f` *path*
|
2020-07-23 10:58:42 +00:00
|
|
|
|
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`.
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
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`.
|
|
|
|
|
|
2020-07-23 12:28:05 +00:00
|
|
|
|
- `--profile` / `-p` *path*
|
2020-07-23 10:58:42 +00:00
|
|
|
|
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.
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
`--dry-run` also prints out which paths will be
|
|
|
|
|
[substituted](#gloss-substitute) (i.e., downloaded) and which paths
|
|
|
|
|
will be built from source (because no substitute is available).
|
|
|
|
|
|
2020-07-23 12:28:05 +00:00
|
|
|
|
- `--system-filter` *system*
|
2020-07-23 10:58:42 +00:00
|
|
|
|
By default, operations such as `--query
|
|
|
|
|
--available` show derivations matching any platform. This option
|
2020-07-23 12:28:05 +00:00
|
|
|
|
allows you to use derivations for the specified platform *system*.
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
|
|
|
|
<!-- end list -->
|
|
|
|
|
|
|
|
|
|
# Files
|
|
|
|
|
|
|
|
|
|
- `~/.nix-defexpr`
|
2020-07-24 10:56:19 +00:00
|
|
|
|
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.
|
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
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.
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
If `~/.nix-defexpr` is a directory containing a `default.nix` file,
|
|
|
|
|
that file is loaded as in the above paragraph.
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
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.
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
For example, if `~/.nix-defexpr` contains two files, `foo.nix` and
|
|
|
|
|
`bar.nix`, then the default Nix expression will essentially be
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
{
|
|
|
|
|
foo = import ~/.nix-defexpr/foo.nix;
|
|
|
|
|
bar = import ~/.nix-defexpr/bar.nix;
|
|
|
|
|
}
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
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.
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
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
|
|
|
|
|
|
2020-07-24 10:56:19 +00:00
|
|
|
|
`nix-env` {`--install` | `-i`} *args…*
|
|
|
|
|
[{`--prebuilt-only` | `-b`}]
|
|
|
|
|
[{`--attr` | `-A`}]
|
|
|
|
|
[`--from-expression`] [`-E`]
|
|
|
|
|
[`--from-profile` *path*]
|
|
|
|
|
[`--preserve-installed` | `-P`]
|
|
|
|
|
[`--remove-all` | `-r`]
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
|
|
|
|
## 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
|
2020-07-23 12:28:05 +00:00
|
|
|
|
described by *args* is added. The arguments *args* map to store paths in
|
|
|
|
|
a number of possible ways:
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
2020-07-23 12:28:05 +00:00
|
|
|
|
- By default, *args* is a set of derivation names denoting derivations
|
2020-07-23 10:58:42 +00:00
|
|
|
|
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.
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 12:28:05 +00:00
|
|
|
|
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
|
2020-07-23 10:58:42 +00:00
|
|
|
|
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`.
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
If there are multiple matching derivations with the same priority,
|
|
|
|
|
then the derivation with the highest version will be installed.
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
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`](#opt-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`.
|
|
|
|
|
|
2020-07-23 12:28:05 +00:00
|
|
|
|
- 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.
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
2020-07-23 12:28:05 +00:00
|
|
|
|
- If `--from-expression` is given, *args* are Nix
|
2020-07-23 10:58:42 +00:00
|
|
|
|
[functions](#ss-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.
|
|
|
|
|
|
2020-07-23 12:28:05 +00:00
|
|
|
|
- If *args* are store derivations, then these are
|
2020-07-23 10:58:42 +00:00
|
|
|
|
[realised](#rsec-nix-store-realise), and the resulting output paths
|
|
|
|
|
are installed.
|
|
|
|
|
|
2020-07-23 12:28:05 +00:00
|
|
|
|
- If *args* are store paths that are not store derivations, then these
|
2020-07-23 10:58:42 +00:00
|
|
|
|
are [realised](#rsec-nix-store-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 specific version of `gcc` from the active Nix expression:
|
|
|
|
|
|
|
|
|
|
$ nix-env --install gcc-3.3.2
|
|
|
|
|
installing `gcc-3.3.2'
|
|
|
|
|
uninstalling `gcc-3.1'
|
|
|
|
|
|
|
|
|
|
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 using a specific attribute:
|
|
|
|
|
|
|
|
|
|
$ nix-env -i -A gcc40mips
|
|
|
|
|
$ nix-env -i -A xorg.xorgserver
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
2020-07-24 10:56:19 +00:00
|
|
|
|
`nix-env` {`--upgrade` | `-u`} *args*
|
|
|
|
|
[`--lt` | `--leq` | `--eq` | `--always`]
|
|
|
|
|
[{`--prebuilt-only` | `-b`}]
|
|
|
|
|
[{`--attr` | `-A`}]
|
|
|
|
|
[`--from-expression`] [`-E`]
|
|
|
|
|
[`--from-profile` *path*]
|
|
|
|
|
[`--preserve-installed` | `-P`]
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
|
|
|
|
## 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
|
2020-07-23 12:28:05 +00:00
|
|
|
|
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.
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
2020-07-23 12:28:05 +00:00
|
|
|
|
For a description of how *args* is mapped to a set of store paths, see
|
|
|
|
|
[`--install`](#rsec-nix-env-install). If *args* describes multiple store
|
2020-07-23 10:58:42 +00:00
|
|
|
|
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 gcc
|
|
|
|
|
upgrading `gcc-3.3.1' to `gcc-3.4'
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
$ nix-env -u gcc-3.3.2 --always (switch to a specific version)
|
|
|
|
|
upgrading `gcc-3.4' to `gcc-3.3.2'
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
$ nix-env --upgrade pan
|
|
|
|
|
(no upgrades available, so nothing happens)
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
$ nix-env -u (try to upgrade everything)
|
|
|
|
|
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 that 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
|
|
|
|
|
|
2020-07-24 10:56:19 +00:00
|
|
|
|
`nix-env` {`--uninstall` | `-e`} *drvnames…*
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
|
|
|
|
## Description
|
|
|
|
|
|
|
|
|
|
The uninstall operation creates a new user environment, based on the
|
|
|
|
|
current generation of the active profile, from which the store paths
|
2020-07-24 10:56:19 +00:00
|
|
|
|
designated by the symbolic names *drvnames* are removed.
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
|
|
|
|
## Examples
|
|
|
|
|
|
|
|
|
|
$ nix-env --uninstall gcc
|
|
|
|
|
$ nix-env -e '.*' (remove everything)
|
|
|
|
|
|
|
|
|
|
# Operation `--set`
|
|
|
|
|
|
|
|
|
|
## Synopsis
|
|
|
|
|
|
2020-07-24 10:56:19 +00:00
|
|
|
|
`nix-env` `--set` *drvname*
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
|
|
|
|
## 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
|
|
|
|
|
|
2020-07-24 10:56:19 +00:00
|
|
|
|
`nix-env` `--set-flag` *name* *value* *drvnames*
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
|
|
|
|
## 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)
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
$ 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)
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
$ nix-env --set-flag active false firefox
|
|
|
|
|
setting flag on `firefox-2.0.0.9'
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
$ nix-env --preserve-installed -i firefox-2.0.0.11
|
|
|
|
|
installing `firefox-2.0.0.11'
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
$ 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
|
|
|
|
|
|
2020-07-24 10:56:19 +00:00
|
|
|
|
`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*]
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
|
|
|
|
## 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
|
2020-07-23 12:28:05 +00:00
|
|
|
|
about derivations whose symbolic name matches one of *names*.
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
|
|
|
|
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](#opt-attr)
|
|
|
|
|
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:
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 12:28:05 +00:00
|
|
|
|
- `<` *version*
|
2020-07-23 10:58:42 +00:00
|
|
|
|
A newer version of the package is available or installed.
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 12:28:05 +00:00
|
|
|
|
- `=` *version*
|
2020-07-23 10:58:42 +00:00
|
|
|
|
At most the same version of the package is available or
|
|
|
|
|
installed.
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 12:28:05 +00:00
|
|
|
|
- `>` *version*
|
2020-07-23 10:58:42 +00:00
|
|
|
|
Only older versions of the package are available or installed.
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
- `- ?`
|
|
|
|
|
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
|
|
|
|
|
|
2020-07-24 10:56:19 +00:00
|
|
|
|
`nix-env` {`--switch-profile` | `-S`} *path*
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
|
|
|
|
## Description
|
|
|
|
|
|
2020-07-23 12:28:05 +00:00
|
|
|
|
This operation makes *path* the current profile for the user. That is,
|
|
|
|
|
the symlink `~/.nix-profile` is made to point to *path*.
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
|
|
|
|
## Examples
|
|
|
|
|
|
|
|
|
|
$ nix-env -S ~/my-profile
|
|
|
|
|
|
|
|
|
|
# Operation `--list-generations`
|
|
|
|
|
|
|
|
|
|
## Synopsis
|
|
|
|
|
|
2020-07-24 10:56:19 +00:00
|
|
|
|
`nix-env` `--list-generations`
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
|
|
|
|
## 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
|
|
|
|
|
|
2020-07-24 10:56:19 +00:00
|
|
|
|
`nix-env` `--delete-generations` *generations*
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
|
|
|
|
## 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
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
$ nix-env --delete-generations +5
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
$ nix-env --delete-generations 30d
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
$ nix-env -p other_profile --delete-generations old
|
|
|
|
|
|
|
|
|
|
# Operation `--switch-generation`
|
|
|
|
|
|
|
|
|
|
## Synopsis
|
|
|
|
|
|
2020-07-24 10:56:19 +00:00
|
|
|
|
`nix-env` {`--switch-generation` | `-G`} *generation*
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
|
|
|
|
## Description
|
|
|
|
|
|
2020-07-23 12:28:05 +00:00
|
|
|
|
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
|
2020-07-23 10:58:42 +00:00
|
|
|
|
`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
|
|
|
|
|
|
2020-07-24 10:56:19 +00:00
|
|
|
|
`nix-env` `--rollback`
|
2020-07-23 10:58:42 +00:00
|
|
|
|
|
|
|
|
|
## 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
|
2020-07-24 10:56:19 +00:00
|
|
|
|
|
2020-07-23 10:58:42 +00:00
|
|
|
|
$ 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.
|