From e81d38c02b267eea93a91de3e8a00b185355d681 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra 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. shell.nix if it exists, and default.nix otherwise. +If the derivation defines the variable +shellHook, it will be evaluated after +$stdenv/setup has been sourced. Since this hook is +not executed by regular Nix builds, it allows you to perform +initialisation specific to nix-shell. For example, +the derivation attribute + + +shellHook = + '' + echo "Hello shell!" + ''; + + +will cause nix-shell to print Hello shell!. + 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\] "; ' .