aboutsummaryrefslogtreecommitdiff
path: root/doc/manual/src/command-ref/nix-env/delete-generations.md
blob: adc6fc219dd9dc76fd267e71f6263cad730b7964 (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
83
84
85
86
87
88
89
90
91
92
93
94
95
# Name

`nix-env --delete-generations` - delete profile generations

# Synopsis

`nix-env` `--delete-generations` *generations*

# Description

This operation deletes the specified generations of the current profile.

*generations* can be a one of the following:

- <span id="generations-list">`<number>...`</span>:\
  A list of generation numbers, each one a separate command-line argument.

  Delete exactly the profile generations given by their generation number.
  Deleting the current generation is not allowed.

- The special value <span id="generations-old">`old`</span>

  Delete all generations except the current one.

  > **WARNING**
  >
  > Older *and newer* generations will be deleted by this operation.
  >
  > One might expect this to just delete older generations than the curent one, but that is only true if the current generation is also the latest.
  > Because one can roll back to a previous generation, it is possible to have generations newer than the current one.
  > They will also be deleted.

- <span id="generations-time">`<number>d`</span>:\
  The last *number* days

  *Example*: `30d`

  Delete all generations created more than *number* days ago, except the most recent one of them.
  This allows rolling back to generations that were available within the specified period.

- <span id="generations-count">`+<number>`</span>:\
  The last *number* generations up to the present

  *Example*: `+5`

  Keep the last *number* generations, along with any newer than current.

Periodically deleting old generations is important to make garbage collection
effective.
The is because profiles are also garbage collection roots — any [store object] reachable from a profile is "alive" and ineligible for deletion.

[store object]: @docroot@/glossary.md#gloss-store-object

{{#include ./opt-common.md}}

{{#include ../opt-common.md}}

{{#include ./env-common.md}}

{{#include ../env-common.md}}

# Examples

## Delete explicit generation numbers

```console
$ nix-env --delete-generations 3 4 8
```

Delete the generations numbered 3, 4, and 8, so long as the current active generation is not any of those.

## Keep most-recent by count (number of generations)

```console
$ nix-env --delete-generations +5
```

Suppose `30` is the current generation, and we currently have generations numbered `20` through `32`.

Then this command will delete generations `20` through `25` (`<= 30 - 5`),
and keep generations `26` through `31` (`> 30 - 5`).

## Keep most-recent by time (number of days)

```console
$ nix-env --delete-generations 30d
```

This command will delete all generations older than 30 days, except for the generation that was active 30 days ago (if it currently exists).

## Delete all older

```console
$ nix-env --profile other_profile --delete-generations old
```