diff --git a/doc/manual/nix-shell.xml b/doc/manual/nix-shell.xml
index 8178cea69..d5f70a9e6 100644
--- a/doc/manual/nix-shell.xml
+++ b/doc/manual/nix-shell.xml
@@ -18,7 +18,6 @@
nix-shell
-
name value
name value
@@ -31,7 +30,16 @@
cmd
regexp
- path
+
+
+
+
+
+
+ packages
+
+ path
+
@@ -114,6 +122,18 @@ also .
+ /
+
+ Set up an environment in which the specified
+ packages are present. The command line arguments are interpreted
+ as attribute names inside the Nix Packages collection. Thus,
+ nix-shell -p libjpeg openjdk will start a shell
+ in which the packages denoted by the attribute names
+ libjpeg and openjdk are
+ present.
+
+
+
The following common options are supported:
@@ -155,6 +175,14 @@ the following starts a shell containing the packages
$ nix-shell -E 'with import <nixpkgs> { }; runCommand "dummy" { buildInputs = [ sqlite xorg.libX11 ]; } ""'
+A shorter way to do the same is:
+
+
+$ nix-shell -p sqlite xorg.libX11
+[nix-shell]$ echo $NIX_LDFLAGS
+… -L/nix/store/j1zg5v…-sqlite-3.8.0.2/lib -L/nix/store/0gmcz9…-libX11-1.6.1/lib …
+
+
diff --git a/scripts/nix-build.in b/scripts/nix-build.in
index cc6ab423d..452cb901f 100755
--- a/scripts/nix-build.in
+++ b/scripts/nix-build.in
@@ -12,6 +12,7 @@ my $verbose = 0;
my $runEnv = $0 =~ /nix-shell$/;
my $pure = 0;
my $fromArgs = 0;
+my $packages = 0;
my @instArgs = ();
my @buildArgs = ();
@@ -150,6 +151,10 @@ for (my $n = 0; $n < scalar @ARGV; $n++) {
push @instArgs, "--expr";
}
+ elsif ($arg eq "--packages" || $arg eq "-p") {
+ $packages = 1;
+ }
+
elsif (substr($arg, 0, 1) eq "-") {
push @buildArgs, $arg;
}
@@ -159,7 +164,12 @@ for (my $n = 0; $n < scalar @ARGV; $n++) {
}
}
-if (!$fromArgs) {
+if ($packages) {
+ push @instArgs, "--expr";
+ @exprs = (
+ 'with import { }; runCommand "shell" { buildInputs = [ '
+ . (join " ", map { "($_)" } @exprs) . ']; } ""');
+} elsif (!$fromArgs) {
@exprs = ("shell.nix") if scalar @exprs == 0 && $runEnv && -e "shell.nix";
@exprs = ("default.nix") if scalar @exprs == 0;
}