nix dev-shell: Set IN_NIX_SHELL in the derivation

This ensures that stdenv / setup hooks take $IN_NIX_SHELL into
account. For example, stdenv only sets
NIX_SSL_CERT_FILE=/no-cert-file.crt if we're not in a shell.
This commit is contained in:
Eelco Dolstra 2019-07-26 20:09:44 +02:00
parent 13604318ad
commit 336afe4d5f
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE

View file

@ -72,7 +72,7 @@ Path getDerivationEnvironment(ref<Store> store, Derivation drv)
if (builder != "bash")
throw Error("'nix shell' only works on derivations that use 'bash' as their builder");
drv.args = {"-c", "set -e; if [[ -n $stdenv ]]; then source $stdenv/setup; fi; set > $out"};
drv.args = {"-c", "set -e; export IN_NIX_SHELL=impure; if [[ -n $stdenv ]]; then source $stdenv/setup; fi; set > $out"};
/* Remove derivation checks. */
drv.env.erase("allowedReferences");
@ -143,7 +143,6 @@ struct Common : InstallableCommand, MixProfile
void makeRcScript(const BuildEnvironment & buildEnvironment, std::ostream & out)
{
out << "export IN_NIX_SHELL=1\n";
out << "nix_saved_PATH=\"$PATH\"\n";
for (auto & i : buildEnvironment.env) {