Вам нужно установить переменную внутри функции, иначе она всегда будет содержать значение, установленное при загрузке файла:
function fish_prompt
set -l nix_shell_info (
if test -n "$IN_NIX_SHELL"
echo -n "<nix-shell> "
end
)
set_color $fish_color_cwd
echo -n (prompt_pwd)
set_color normal
echo -n -s " $nix_shell_info ~>"
end
Редактировать: Как указывал cole-h на IR C вам также необходимо изменить одинарные кавычки, содержащие переменную, на двойные кавычки, иначе они не будут интерполированы.