---
name: "nix-collect-garbage"
section: "1"
platform: "linux"
package: "nix-bin"
version: "2.26.3+dfsg-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/nix-collect-garbage"
---

# nix-collect-garbage(1)

delete unreachable store objects ⟨@docroot@/store/store-object.md⟩

## Name

`nix-collect-garbage` - delete unreachable store objects ⟨@docroot@/store/store-object.md⟩

## Synopsis

`nix-collect-garbage` \[`--delete-old`\] \[`-d`\] \[`--delete-older-than` *period*\] \[`--max-freed` *bytes*\] \[`--dry-run`\]

## Description

The command `nix-collect-garbage` is mostly an alias of `nix-store --gc` ⟨@docroot@/command-ref/nix-store/gc.md⟩\\c . That is, it deletes all unreachable store objects ⟨@docroot@/store/store-object.md⟩ in the Nix store to clean up your system.

However, it provides two additional options, `--delete-old` ⟨#opt-delete-old⟩ and `--delete-older-than` ⟨#opt-delete-older-than⟩\\c , which also delete old profiles ⟨@docroot@/command-ref/files/profiles.md⟩\\c , allowing potentially more store objects ⟨@docroot@/store/store-object.md⟩ to be deleted because profiles are also garbage collection roots. These options are the equivalent of running `nix-env --delete-generations` ⟨@docroot@/command-ref/nix-env/delete-generations.md⟩ with various augments on multiple profiles, prior to running `nix-collect-garbage` (or just `nix-store --gc`) without any flags.

**Note**

Deleting previous configurations makes rollbacks to them impossible.

These flags should be used with care, because they potentially delete generations of profiles used by other users on the system.

### Locations searched for profiles

`nix-collect-garbage` cannot know about all profiles; that information doesn’t exist. Instead, it looks in a few locations, and acts on all profiles it finds there:

- 1\.

  The default profile locations as specified in the profiles ⟨@docroot@/command-ref/files/profiles.md⟩ section of the manual.

- 2\.

  -

    **NOTE**

  -

    Not stable; subject to change

  -

    Do not rely on this functionality; it just exists for migration purposes and may change in the future. These deprecated paths remain a private implementation detail of Nix.

-

  `$NIX_STATE_DIR/profiles` and `$NIX_STATE_DIR/profiles/per-user`.

-

  With the exception of `$NIX_STATE_DIR/profiles/per-user/root` and `$NIX_STATE_DIR/profiles/default`, these directories are no longer used by other commands. `nix-collect-garbage` looks there anyways in order to clean up profiles from older versions of Nix.

## Options

These options are for deleting old profiles ⟨@docroot@/command-ref/files/profiles.md⟩ prior to deleting unreachable store objects ⟨@docroot@/store/store-object.md⟩\\c .

- •

  `--delete-old` ⟨#opt-delete-old⟩ / `-d`

-

  Delete all old generations of profiles.

-

  This is the equivalent of invoking `nix-env --delete-generations old` ⟨@docroot@/command-ref/nix-env/delete-generations.md#generations-old⟩ on each found profile.

- •

  `--delete-older-than` ⟨#opt-delete-older-than⟩ *period*

-

  Delete all generations of profiles older than the specified amount (except for the generations that were active at that point in time). *period* is a value such as `30d`, which would mean 30 days.

-

  This is the equivalent of invoking `nix-env --delete-generations <period>` ⟨@docroot@/command-ref/nix-env/delete-generations.md#generations-time⟩ on each found profile. See the documentation of that command for additional information about the *period* argument.

  - •

    `--max-freed` ⟨#opt-max-freed⟩ *bytes*

Keep deleting paths until at least *bytes* bytes have been deleted, then stop. The argument *bytes* can be followed by the multiplicative suffix `K`, `M`, `G` or `T`, denoting KiB, MiB, GiB or TiB units.

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

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

## Example

To delete from the Nix store everything that is not used by the current generations of each profile, do

```
$ nix-collect-garbage -d
```
