From e81d38c02b267eea93a91de3e8a00b185355d681 Mon Sep 17 00:00:00 2001
From: Eelco Dolstra <eelco.dolstra@logicblox.com>
Date: Mon, 17 Feb 2014 13:34:24 +0100
Subject: [PATCH] nix-shell: Execute shellHook if it exists

Since normal builds don't execute shellHook, this allows nix-shell
specific customisation.  Suggested by Domen.
---
 doc/manual/nix-shell.xml | 16 ++++++++++++++++
 scripts/nix-build.in     |  1 +
 2 files changed, 17 insertions(+)

diff --git a/doc/manual/nix-shell.xml b/doc/manual/nix-shell.xml
index e57c726f5..4b369662e 100644
--- a/doc/manual/nix-shell.xml
+++ b/doc/manual/nix-shell.xml
@@ -51,6 +51,22 @@ derivation for development.</para>
 <filename>shell.nix</filename> if it exists, and
 <filename>default.nix</filename> otherwise.</para>
 
+<para>If the derivation defines the variable
+<varname>shellHook</varname>, it will be evaluated after
+<literal>$stdenv/setup</literal> has been sourced.  Since this hook is
+not executed by regular Nix builds, it allows you to perform
+initialisation specific to <command>nix-shell</command>.  For example,
+the derivation attribute
+
+<programlisting>
+shellHook =
+  ''
+    echo "Hello shell!"
+  '';
+</programlisting>
+
+will cause <command>nix-shell</command> to print <literal>Hello shell!</literal>.</para>
+
 </refsection>
 
 
diff --git a/scripts/nix-build.in b/scripts/nix-build.in
index fff71021f..c197dcca9 100755
--- a/scripts/nix-build.in
+++ b/scripts/nix-build.in
@@ -207,6 +207,7 @@ foreach my $expr (@exprs) {
             ($pure ? '' : 'p=$PATH; ' ) .
             'dontAddDisableDepTrack=1; ' .
             '[ -e $stdenv/setup ] && source $stdenv/setup; ' .
+            'if [ "$(type -t runHook)" = function ]; then runHook shellHook; fi; ' .
             ($pure ? '' : 'PATH=$PATH:$p; unset p; ') .
             'set +e; ' .
             '[ -n "$PS1" ] && PS1="\n\[\033[1;32m\][nix-shell:\w]$\[\033[0m\] "; ' .
-- 
GitLab