aboutsummaryrefslogtreecommitdiff
path: root/doc/manual/src/command-ref/nix-env/set-flag.md
blob: 63f0a0ff911f185d1749a21daca33d8897ba7dcd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# 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
```