mirror of
https://github.com/NixOS/nix
synced 2025-06-27 21:01:16 +02:00
Documentation on "classic" commands with many sub-commands are notoriously hard to discover due to lack of overview and anchor links. Additionally the information on common options and environment variables is not accessible offline in man pages, and therefore often overlooked by readers. With this change, each sub-command of nix-store and nix-env gets its own page in the manual (listed in the table of contents), and each own man page. Also, man pages for each subcommand now (again) list common options and environment variables. While this makes each page quite long and some common parameters don't apply, this should still make it easier to navigate as that additional information was not accessible on the command line at all. It is now possible to run 'nix-store --<subcommand> --help` to display help pages for the given subcommand. Co-authored-by: Valentin Gagarin <valentin.gagarin@tweag.io>
82 lines
2.5 KiB
Markdown
82 lines
2.5 KiB
Markdown
# Name
|
||
|
||
`nix-env --set-flag` - modify meta attributes of installed packages
|
||
|
||
# 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.
|
||
|
||
{{#include ./opt-common.md}}
|
||
|
||
{{#include ../opt-common.md}}
|
||
|
||
{{#include ../env-common.md}}
|
||
|
||
# Examples
|
||
|
||
To prevent the currently installed Firefox from being upgraded:
|
||
|
||
```console
|
||
$ 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:
|
||
|
||
```console
|
||
$ 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`:
|
||
|
||
```console
|
||
$ nix-env --set-flag priority 5 binutils
|
||
$ nix-env --set-flag priority 10 gcc
|
||
```
|
||
|