This replicates behaviour found in the Nix2 commands, where IN_NIX_SHELL is set. This is for shells to determine whether they are inside of a Nix3 shell, and set a custom prompt accordingly. For example, Fish's Tide prompt framework checks for that environment variable and displays it in the prompt, indicating that the shell is in a Nix environment. This is not new behaviour, and the old Nix2 commands set the variable. If the shell that is created is a "pure" shell, ie --ignore-environment is passed, then IN_NIX_SHELL will be set to "pure". However, "nix develop" will always create an impure environment. Replicated from my Nix PR: https://github.com/NixOS/nix/pull/8885 Change-Id: I695cdc336f76541940a302835124fe7d8f7f39b2 Signed-off-by: Ersei Saggi <vcs@ersei.net>
72 lines
2.1 KiB
Bash
72 lines
2.1 KiB
Bash
source ../common.sh
|
|
|
|
clearStore
|
|
rm -rf $TEST_HOME/.cache $TEST_HOME/.config $TEST_HOME/.local
|
|
|
|
# Create flake under test.
|
|
cp ../shell-hello.nix ../config.nix $TEST_HOME/
|
|
cat <<EOF >$TEST_HOME/flake.nix
|
|
{
|
|
inputs.nixpkgs.url = "$TEST_HOME/nixpkgs";
|
|
outputs = {self, nixpkgs}: {
|
|
packages.$system.hello = (import ./config.nix).mkDerivation {
|
|
name = "hello";
|
|
outputs = [ "out" "dev" ];
|
|
meta.outputsToInstall = [ "out" ];
|
|
buildCommand = "";
|
|
};
|
|
};
|
|
}
|
|
EOF
|
|
|
|
# Create fake nixpkgs flake.
|
|
mkdir -p $TEST_HOME/nixpkgs
|
|
cp ../config.nix ../nix-shell/shell.nix $TEST_HOME/nixpkgs
|
|
cat <<EOF >$TEST_HOME/nixpkgs/flake.nix
|
|
{
|
|
outputs = {self}: {
|
|
legacyPackages.$system.bashInteractive = (import ./shell.nix {}).bashInteractive;
|
|
};
|
|
}
|
|
EOF
|
|
|
|
cd $TEST_HOME
|
|
|
|
# Test whether `nix develop` passes through environment variables.
|
|
[[ "$(
|
|
ENVVAR=a nix develop --no-write-lock-file .#hello <<EOF
|
|
echo "\$ENVVAR"
|
|
EOF
|
|
)" = "a" ]]
|
|
|
|
# Test whether `nix develop --ignore-environment` does _not_ pass through environment variables.
|
|
[[ -z "$(
|
|
ENVVAR=a nix develop --ignore-environment --no-write-lock-file .#hello <<EOF
|
|
echo "\$ENVVAR"
|
|
EOF
|
|
)" ]]
|
|
|
|
# Determine the bashInteractive executable.
|
|
nix build --no-write-lock-file './nixpkgs#bashInteractive' --out-link ./bash-interactive
|
|
BASH_INTERACTIVE_EXECUTABLE="$PWD/bash-interactive/bin/bash"
|
|
|
|
# Test whether `nix develop` sets `SHELL` to nixpkgs#bashInteractive shell.
|
|
[[ "$(
|
|
SHELL=custom nix develop --no-write-lock-file .#hello <<EOF
|
|
echo "\$SHELL"
|
|
EOF
|
|
)" -ef "$BASH_INTERACTIVE_EXECUTABLE" ]]
|
|
|
|
# Test whether `nix develop` with ignore environment sets `SHELL` to nixpkgs#bashInteractive shell.
|
|
[[ "$(
|
|
SHELL=custom nix develop --ignore-environment --no-write-lock-file .#hello <<EOF
|
|
echo "\$SHELL"
|
|
EOF
|
|
)" -ef "$BASH_INTERACTIVE_EXECUTABLE" ]]
|
|
|
|
# Test whether `nix develop` sets `IN_NIX_SHELL`
|
|
[[ "$(nix develop --no-write-lock-file .#hello -c sh -c 'echo $IN_NIX_SHELL')" = "impure" ]]
|
|
[[ "$(nix develop --no-write-lock-file --ignore-environment .#hello -c /bin/sh -c 'echo $IN_NIX_SHELL')" = "impure" ]]
|
|
|
|
clearStore
|