nix3-shell

Start a shell providing specific packages

TLDR

Enter a shell with a package available
$ nix shell nixpkgs#[hello]
Enter a shell with multiple packages
$ nix shell nixpkgs#[git] nixpkgs#[curl]
Run a single command with a package and exit
$ nix shell nixpkgs#[jq] --command jq --version
Enter a shell with a package from a specific flake
$ nix shell github:[owner/repo]#[package]
Enter a shell with a package from a specific nixpkgs revision
$ nix shell github:NixOS/nixpkgs/[nixos-24.05]#[hello]

SYNOPSIS

nix shell [options] installables

DESCRIPTION

nix shell starts a shell environment with the specified packages available in `$PATH`. It is the flake-based replacement for `nix-shell -p` and does not require a shell.nix or default.nix file.Packages are specified as flake references (e.g., `nixpkgs#jq`). The packages are built or fetched as needed and made available only in the spawned shell session. Nothing is permanently installed.

PARAMETERS

INSTALLABLES

Flake references specifying packages to make available (e.g., nixpkgs#hello).
--command, -c CMD [ARGS]
Run a command in the shell environment instead of starting an interactive shell.
--ignore-environment, -i
Clear the entire environment (except those specified with --keep).
--keep NAME
Keep the specified environment variable when using --ignore-environment.
--keep-going
Continue building other derivations if one fails.
--impure
Allow access to mutable paths and environment variables.
--override-input INPUT FLAKEREF
Override a specific flake input. Implies --no-write-lock-file.
--help
Display help information.

CAVEATS

Requires the experimental `nix-command` and `flakes` features to be enabled. Packages are not permanently installed; they are only available in the spawned shell session.

SEE ALSO

nix(1), nix-shell(1), nix3-develop(1), nix3-run(1), nix3-build(1)