diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2014-02-19 17:08:01 +0100 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2014-02-19 17:08:01 +0100 |
commit | 36b90e72d7e09b983acfa08f9016e8b3ece5199d (patch) | |
tree | 8e34c7062af15c4e456ee5391cc4dc7449ce73fe | |
parent | a897b583733aaf3ee7aa0efe495f9ea046567555 (diff) |
nix-shell: Add --packages flag
This allows you to easily set up a build environment containing the
specified packages from Nixpkgs. For example:
$ nix-shell -p sqlite xorg.libX11 hello
will start a shell in which the given packages are present.
-rw-r--r-- | doc/manual/nix-shell.xml | 32 | ||||
-rwxr-xr-x | scripts/nix-build.in | 12 |
2 files changed, 41 insertions, 3 deletions
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 @@ <refsynopsisdiv> <cmdsynopsis> <command>nix-shell</command> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="opt-common-syn.xml#xmlns(db=http://docbook.org/ns/docbook)xpointer(/db:nop/*)" /> <arg><option>--arg</option> <replaceable>name</replaceable> <replaceable>value</replaceable></arg> <arg><option>--argstr</option> <replaceable>name</replaceable> <replaceable>value</replaceable></arg> <arg> @@ -31,7 +30,16 @@ <arg><option>--command</option> <replaceable>cmd</replaceable></arg> <arg><option>--exclude</option> <replaceable>regexp</replaceable></arg> <arg><option>--pure</option></arg> - <arg><replaceable>path</replaceable></arg> + <group choice='req'> + <group choice='plain'> + <group> + <arg choice='plain'><option>--packages</option></arg> + <arg choice='plain'><option>-p</option></arg> + </group> + <replaceable>packages</replaceable> + </group> + <arg><replaceable>path</replaceable></arg> + </group> </cmdsynopsis> </refsynopsisdiv> @@ -114,6 +122,18 @@ also <xref linkend="sec-common-options" />.</phrase></para> </varlistentry> + <varlistentry><term><option>--packages</option> / <option>-p</option></term> + + <listitem><para>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, + <literal>nix-shell -p libjpeg openjdk</literal> will start a shell + in which the packages denoted by the attribute names + <varname>libjpeg</varname> and <varname>openjdk</varname> are + present.</para></listitem> + + </varlistentry> + </variablelist> <para>The following common options are supported:</para> @@ -155,6 +175,14 @@ the following starts a shell containing the packages $ nix-shell -E 'with import <nixpkgs> { }; runCommand "dummy" { buildInputs = [ sqlite xorg.libX11 ]; } ""' </screen> +A shorter way to do the same is: + +<screen> +$ 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 … +</screen> + </para> </refsection> 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 <nixpkgs> { }; 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; } |