nix run

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

# Name

`nix run` - run a Nix application

# Synopsis

`nix run` [option...] installable args...

# Examples

- Run the default app from the `blender-bin` flake:

      # nix run blender-bin

- Run a non-default app from the `blender-bin` flake:

      # nix run blender-bin#blender_2_83

  Tip: you can find apps provided by this flake by running `nix flake show blender-bin`.

- Run `vim` from the `nixpkgs` flake:

      # nix run nixpkgs#vim

  Note that `vim` (as of the time of writing of this page) is not an app but a package. Thus, Nix runs the eponymous file from the `vim` package.

- Run `vim` with arguments:

      # nix run nixpkgs#vim -- --help

# Description

`nix run` builds and runs installable, which must evaluate to an app or a regular Nix derivation.

If installable evaluates to an app (see below), it executes the program specified by the app definition.

If installable evaluates to a derivation, it will try to execute the program `<out>/bin/<name>`, where out is the primary output store path of the derivation, and name is the first of the following that exists:

- The `meta.mainProgram` attribute of the derivation.
- The `pname` attribute of the derivation.
- The name part of the value of the `name` attribute of the derivation.

For instance, if `name` is set to `hello-1.10`, `nix run` will run `$out/bin/hello`.

# Flake output attributes

If no flake output attribute is given, `nix run` tries the following flake output attributes:

- `apps.<system>.default`

- `packages.<system>.default`

If an attribute name is given, `nix run` tries the following flake output attributes:

- `apps.<system>.<name>`

- `packages.<system>.<name>`

- `legacyPackages.<system>.<name>`

# Apps

An app is specified by a flake output attribute named `apps.<system>.<name>`. It looks like this:

    apps.x86_64-linux.blender_2_79 = {
      type = "app";
      program = "${self.packages.x86_64-linux.blender_2_79}/bin/blender";
    };

The only supported attributes are:

- `type` (required): Must be set to `app`.

- `program` (required): The full path of the executable to run. It must reside in the Nix store.

# Options

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. If file is the character -, then a Nix expression will be read from standard input.