nix show-derivation

Warning: This program is experimental and its interface is subject to change.

# Name

`nix show-derivation` - show the contents of a store derivation

# Synopsis

`nix show-derivation` [option...] installables...

# Examples

- Show the store derivation that results from evaluating the Hello package:

      # nix show-derivation nixpkgs#hello
      {
        "/nix/store/s6rn4jz1sin56rf4qj5b5v8jxjm32hlk-hello-2.10.drv": {
          …
        }
      }

- Show the full derivation graph (if available) that produced your NixOS system:

      # nix show-derivation -r /run/current-system

- Print all files fetched using `fetchurl` by Firefox's dependency graph:

      # nix show-derivation -r nixpkgs#firefox \
        | jq -r '.[] | select(.outputs.out.hash and .env.urls) | .env.urls' \
        | uniq | sort

  Note that `.outputs.out.hash` selects fixed-output derivations (derivations that produce output with a specified content hash), while `.env.urls` selects derivations with a `urls` attribute.

# Description

This command prints on standard output a JSON representation of the store derivations to which installables evaluate. Store derivations are used internally by Nix. They are store paths with extension `.drv` that represent the build-time dependency graph to which a Nix expression evaluates.

By default, this command only shows top-level derivations, but with `--recursive`, it also shows their dependencies.

The JSON output is a JSON object whose keys are the store paths of the derivations, and whose values are a JSON object with the following fields:

- `outputs`: Information about the output paths of the derivation. This is a JSON object with one member per output, where the key is the output name and the value is a JSON object with these fields:

  - `path`: The output path.
  - `hashAlgo`: For fixed-output derivations, the hashing algorithm (e.g. `sha256`), optionally prefixed by `r:` if `hash` denotes a NAR hash rather than a flat file hash.
  - `hash`: For fixed-output derivations, the expected content hash in base-16.

  Example:

      "outputs": {
        "out": {
          "path": "/nix/store/2543j7c6jn75blc3drf4g5vhb1rhdq29-source",
          "hashAlgo": "r:sha256",
          "hash": "6fc80dcc62179dbc12fc0b5881275898f93444833d21b89dfe5f7fbcbb1d0d62"
        }
      }

- `inputSrcs`: A list of store paths on which this derivation depends.

- `inputDrvs`: A JSON object specifying the derivations on which this derivation depends, and what outputs of those derivations. For example,

      "inputDrvs": {
        "/nix/store/6lkh5yi7nlb7l6dr8fljlli5zfd9hq58-curl-7.73.0.drv": ["dev"],
        "/nix/store/fn3kgnfzl5dzym26j8g907gq3kbm8bfh-unzip-6.0.drv": ["out"]
      }

  specifies that this derivation depends on the `dev` output of `curl`, and the `out` output of `unzip`.

- `system`: The system type on which this derivation is to be built (e.g. `x86_64-linux`).

- `builder`: The absolute path of the program to be executed to run the build. Typically this is the `bash` shell (e.g. `/nix/store/r3j288vpmczbl500w6zz89gyfa4nr0b1-bash-4.4-p23/bin/bash`).

- `args`: The command-line arguments passed to the `builder`.

- `env`: The environment passed to the `builder`.

# Options

- `--recursive` / `-r`
  Include the dependencies of the specified derivations.

Common evaluation options:

- `--arg` name expr
  Pass the value expr as the argument name to Nix functions.

- `--argstr` name string
  Pass the string string as the argument name to Nix functions.

- `--eval-store` store-url
  The Nix store to use for evaluations.

- `--impure`
  Allow access to mutable paths and repositories.

- `--include` / `-I` path
  Add path to the list of locations used to look up `<...>` file names.

- `--override-flake` original-ref resolved-ref
  Override the flake registries, redirecting original-ref to resolved-ref.

Common flake-related options:

- `--commit-lock-file`
  Commit changes to the flake's lock file.

- `--inputs-from` flake-url
  Use the inputs of the specified flake as registry entries.

- `--no-registries`
  Don't allow lookups in the flake registries. This option is deprecated; use `--no-use-registries`.

- `--no-update-lock-file`
  Do not allow any updates to the flake's lock file.

- `--no-write-lock-file`
  Do not write the flake's newly generated lock file.

- `--override-input` input-path flake-url
  Override a specific flake input (e.g. `dwarffs/nixpkgs`). This implies `--no-write-lock-file`.

- `--recreate-lock-file`
  Recreate the flake's lock file from scratch.

- `--update-input` input-path
  Update a specific flake input (ignoring its previous entry in the lock file).

Options that change the interpretation of installables:

- `--derivation`
  Operate on the store derivation rather than its outputs.

- `--expr` expr
  Interpret installables as attribute paths relative to the Nix expression expr.

- `--file` / `-f` file
  Interpret installables as attribute paths relative to the Nix expression stored in file.