Warning
This program is experimental ⟨@docroot@/development/experimental-features.md#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.devwith a writable directory:
# nix develop --redirect nixpkgs#glibc.dev ~/my-glibc/outputs/dev
-
Note that this is useful if you’re running a
nix developshell fornixpkgs#glibcin~/my-glibcand 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⟩\c . 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
buildphase.
- •
-
--check⟨#opt-check⟩
-
Run the
checkphase.
- •
-
--command⟨#opt-command⟩ /-ccommand args
-
Instead of starting an interactive shell, start the specified command and arguments.
- •
-
--configure⟨#opt-configure⟩
-
Run the
configurephase.
- •
-
--install⟨#opt-install⟩
-
Run the
installphase.
- •
-
--installcheck⟨#opt-installcheck⟩
-
Run the
installcheckphase.
- •
-
--phase⟨#opt-phase⟩ phase-name
-
The stdenv phase to run (e.g.
buildorconfigure).
- •
-
--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
unpackphase.
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 ⟨@docroot@/store/types/index.md#store-url-format⟩ to use for evaluation, i.e. to store derivations (
.drvfiles) and inputs referenced by them.
- •
-
--impure⟨#opt-impure⟩
-
Allow access to mutable paths and repositories.
- •
-
--include⟨#opt-include⟩ /-Ipath
-
Add path to search path entries used to resolve lookup paths ⟨@docroot@/language/constructs/lookup-path.md⟩
-
This option may be given multiple times.
-
Paths added through
-Itake precedence over thenix-pathconfiguration setting ⟨@docroot@/command-ref/conf-file.md#conf-nix-path⟩ and theNIX_PATHenvironment variable ⟨@docroot@/command-ref/env-common.md#env-NIX_PATH⟩\c .
- •
-
--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⟨@docroot@/command-ref/conf-file.md#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.lockwithin the top-level flake.
- •
-
--override-input⟨#opt-override-input⟩ input-path flake-url
-
Override a specific flake input (e.g.
dwarffs/nixpkgs). 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⟨@docroot@/command-ref/new-cli/nix3-flake-update.md⟩ instead.
-
- •
-
--reference-lock-file⟨#opt-reference-lock-file⟩ flake-lock-path
-
Read the given lock file instead of
flake.lockwithin 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⟨@docroot@/command-ref/new-cli/nix3-flake-update.md⟩ 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,barorbar-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⟩ /-kname
-
Keep the environment variable name, when using
--ignore-env.
- •
-
--set-env-var⟨#opt-set-env-var⟩ /-sname value
-
Sets an environment variable name with value.
- •
-
--unset-env-var⟨#opt-unset-env-var⟩ /-uname
-
Unset the environment variable name.
Options that change the interpretation of installables
- •
-
--expr⟨#opt-expr⟩ expr
-
Interpret installables ⟨@docroot@/command-ref/new-cli/nix.md#installables⟩ as attribute paths relative to the Nix expression expr.
- •
-
--file⟨#opt-file⟩ /-ffile
-
Interpret installables ⟨@docroot@/command-ref/new-cli/nix.md#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. Implies
--impure.Note
See
man nix.conf⟨@docroot@/command-ref/conf-file.md#command-line-flags⟩ for overriding configuration settings with command line flags.