nix3-develop(1)

    Warning
    This program is experimental (https://nix.dev/manual/nix/2.34/development/experimental-features.html#xp-feature-nix-command) and its interface is subject to change.

Name

nix develop - run a bash shell that provides the build environment of a derivation

Synopsis

nix develop [option…] installable

Examples

•   Start a shell with the build environment of the default package of the flake in the current directory:

    # nix develop

    Typical commands to run inside this shell are:

    # configurePhase
    # buildPhase
    # installPhase

    Alternatively, you can run whatever build tools your project uses directly, e.g. for a typical Unix project:

    # ./configure --prefix=$out
    # make
    # make install

•   Run a particular build phase directly:

    # nix develop --unpack
    # nix develop --configure
    # nix develop --build
    # nix develop --check
    # nix develop --install
    # nix develop --installcheck

•   Start a shell with the build environment of GNU Hello:

    # nix develop nixpkgs#hello

•   Record a build environment in a profile:

    # nix develop --profile /tmp/my-build-env nixpkgs#hello

•   Use a build environment previously recorded in a profile:

    # nix develop /tmp/my-build-env

•   Replace all occurrences of the store path corresponding to glibc.dev with a writable directory:

    # nix develop --redirect nixpkgs#glibc.dev ~/my-glibc/outputs/dev

    Note that this is useful if you’re running a nix develop shell for nixpkgs#glibc in ~/my-glibc and want to compile another package against it.

•   Run a series of script commands:

    # nix develop --command bash -c "mkdir build && cmake .. && make"

Description

nix develop starts a bash shell that provides an interactive build environment nearly identical to what Nix would use to build installable (./nix.md#installables) . Inside this shell, environment variables and shell functions are set up so that you can interactively and incrementally build your package.

Nix determines the build environment by building a modified version of the derivation installable that just records the environment initialised by stdenv and exits. This build environment can be recorded into a profile using --profile.

The prompt used by the bash shell can be customised by setting the bash-prompt, bash-prompt-prefix, and bash-prompt-suffix settings in nix.conf or in the flake’s nixConfig attribute.

Flake output attributes

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

•   devShells.<system>.default

•   packages.<system>.default

If a flake output name is given, nix develop tries the following flake output attributes:

•   devShells.<system>.<name>

•   packages.<system>.<name>

•   legacyPackages.<system>.<name>

Options

•   --build (#opt-build)

    Run the build phase.

•   --check (#opt-check)

    Run the check phase.

•   --command (#opt-command) / -c command args

    Instead of starting an interactive shell, start the specified command and arguments.

•   --configure (#opt-configure)

    Run the configure phase.

•   --install (#opt-install)

    Run the install phase.

•   --installcheck (#opt-installcheck)

    Run the installcheck phase.

•   --phase (#opt-phase) phase-name

    The stdenv phase to run (e.g. build or configure).

•   --profile (#opt-profile) path

    The profile to operate on.

•   --redirect (#opt-redirect) installable outputs-dir

    Redirect a store path to a mutable location.

•   --unpack (#opt-unpack)

    Run the unpack phase.

  Common evaluation options

•   --arg (#opt-arg) name expr

    Pass the value expr as the argument name to Nix functions.

•   --arg-from-file (#opt-arg-from-file) name path

    Pass the contents of file path as the argument name to Nix functions.

•   --arg-from-stdin (#opt-arg-from-stdin) name

    Pass the contents of stdin as the argument name to Nix functions.

•   --argstr (#opt-argstr) name string

    Pass the string string as the argument name to Nix functions.

•   --debugger (#opt-debugger)

    Start an interactive environment if evaluation fails.

•   --eval-store (#opt-eval-store) store-url

    The URL of the Nix store (https://nix.dev/manual/nix/2.34/store/types/index.html#store-url-format) to use for evaluation, i.e. to store derivations (.drv files) and inputs referenced by them.

•   --impure (#opt-impure)

    Allow access to mutable paths and repositories.

•   --include (#opt-include) / -I path

    Add path to search path entries used to resolve lookup paths (https://nix.dev/manual/nix/2.34/language/constructs/lookup-path.html)

    This option may be given multiple times.

    Paths added through -I take precedence over the nix-path configuration setting (https://nix.dev/manual/nix/2.34/command-ref/conf-file.html#conf-nix-path) and the NIX_PATH environment variable (https://nix.dev/manual/nix/2.34/command-ref/env-common.html#env-NIX_PATH) .

•   --override-flake (#opt-override-flake) original-ref resolved-ref

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

  Common flake-related options

•   --commit-lock-file (#opt-commit-lock-file)

    Commit changes to the flake’s lock file.

•   --inputs-from (#opt-inputs-from) flake-url

    Use the inputs of the specified flake as registry entries.

•   --no-registries (#opt-no-registries)

    Don’t allow lookups in the flake registries.

        DEPRECATED

        Use --no-use-registries (https://nix.dev/manual/nix/2.34/command-ref/conf-file.html#conf-use-registries) instead.

•   --no-update-lock-file (#opt-no-update-lock-file)

    Do not allow any updates to the flake’s lock file.

•   --no-write-lock-file (#opt-no-write-lock-file)

    Do not write the flake’s newly generated lock file.

•   --output-lock-file (#opt-output-lock-file) flake-lock-path

    Write the given lock file instead of flake.lock within the top-level flake.

•   --override-input (#opt-override-input) input-path flake-url

    Override a specific flake input (e.g. dwarffs/nixpkgs). The input path must not be empty. This implies --no-write-lock-file.

•   --recreate-lock-file (#opt-recreate-lock-file)

    Recreate the flake’s lock file from scratch.

        DEPRECATED

        Use nix flake update (https://nix.dev/manual/nix/2.34/command-ref/new-cli/nix3-flake-update.html) instead.

•   --reference-lock-file (#opt-reference-lock-file) flake-lock-path

    Read the given lock file instead of flake.lock within the top-level flake.

•   --update-input (#opt-update-input) input-path

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

        DEPRECATED

        Use nix flake update (https://nix.dev/manual/nix/2.34/command-ref/new-cli/nix3-flake-update.html) instead.

  Logging-related options

•   --debug (#opt-debug)

    Set the logging verbosity level to ‘debug’.

•   --log-format (#opt-log-format) format

    Set the format of log output; one of raw, internal-json, bar or bar-with-logs.

•   --print-build-logs (#opt-print-build-logs) / -L

    Print full build logs on standard error.

•   --quiet (#opt-quiet)

    Decrease the logging verbosity level.

•   --verbose (#opt-verbose) / -v

    Increase the logging verbosity level.

  Miscellaneous global options

•   --help (#opt-help)

    Show usage information.

•   --offline (#opt-offline)

    Disable substituters and consider all previously downloaded files up-to-date.

•   --option (#opt-option) name value

    Set the Nix configuration setting name to value (overriding nix.conf).

•   --refresh (#opt-refresh)

    Consider all previously downloaded files out-of-date.

•   --repair (#opt-repair)

    During evaluation, rewrite missing or corrupted files in the Nix store. During building, rebuild missing or corrupted store paths.

•   --version (#opt-version)

    Show version information.

  Options that change environment variables

•   --ignore-env (#opt-ignore-env) / -i

    Clear the entire environment, except for those specified with --keep-env-var.

•   --keep-env-var (#opt-keep-env-var) / -k name

    Keep the environment variable name, when using --ignore-env.

•   --set-env-var (#opt-set-env-var) / -s name value

    Sets an environment variable name with value.

•   --unset-env-var (#opt-unset-env-var) / -u name

    Unset the environment variable name.

  Options that change the interpretation of installables

•   --expr (#opt-expr) expr

    Interpret installables (https://nix.dev/manual/nix/2.34/command-ref/new-cli/nix.html#installables) as attribute paths relative to the Nix expression expr.

•   --file (#opt-file) / -f file

    Interpret installables (https://nix.dev/manual/nix/2.34/command-ref/new-cli/nix.html#installables) as attribute paths relative to the Nix expression stored in file. If file is the character -, then a Nix expression is read from standard input. Implies --impure.

    Note

    See man nix.conf (https://nix.dev/manual/nix/2.34/command-ref/conf-file.html#command-line-flags) for overriding configuration settings with command line flags.