Open bergmark opened 6 years ago
I'm struggling with this issue too. As far as I'm aware, when a login shell starts, it loads certain init scripts like /etc/bashrc
or /etc/profile
. The nix installer adds new stuff to these scripts so that nix tools like nix-shell
can be found. This means:
bash
and zsh
, but not fish
: see https://github.com/NixOS/nix/issues/1512 for previous discussion on this.Same boat, but I'm using bash as my shell. It seems to never actually modify PATH
and other things aren't quite working right either. I eventually "uninstalled", even tho that's not a thing either. It would be nice if there was a real cleanup script in the base.
Same problem here, and I'm running bash. I figured out after a while that the ~/.nix-profile
was missing or broken (~/.nix-profile/bin
is supposed to be added to your PATH).
You can hack-fix it by symlinking to /nix/var/nix/profiles/default
, but no guarantee that that results in a clean install.
Seems kinda related to #2295
Is this currently still broken? Are there any good workarounds?
Dunno. After zero support here and anti-support in IRC I gave up. Just not worth the apathy and hostility to deal with it.
There seems to be a case where the installer script modifies .profile
but that file is not sourced correctly. For my case, after installation I got this message (with $HOME
filled in).
Installation finished! To ensure that the necessary environment
variables are set, either log in again, or type
. $HOME/.nix-profile/etc/profile.d/nix.sh
in your shell.
However I am using zsh, which does not load .profile
automatically. Hence I had to add the line . $HOME/.nix-profile/etc/profile.d/nix.sh
to something zsh executes (.zshrc
).
The installer script seems to assume you are using bash. The culprit appears to be this line, which doesn't look for any other shells than bash (and only specific bash files that aren't guaranteed to be there) or shells that source .profile
.
Below is the problem line in context for the macOS installer.
if [ -z "$NIX_INSTALLER_NO_MODIFY_PROFILE" ]; then
# Make the shell source nix.sh during login.
p=$HOME/.nix-profile/etc/profile.d/nix.sh
for i in .bash_profile .bash_login .profile; do # <-- This is the problematic line
fn="$HOME/$i"
if [ -w "$fn" ]; then
if ! grep -q "$p" "$fn"; then
echo "modifying $fn..." >&2
echo "if [ -e $p ]; then . $p; fi # added by Nix installer" >> "$fn"
fi
added=1
break
fi
done
fi
@zenspider Hopefully this helps.
I've had the same problem on a fresh Ubuntu 19.10 and the problem was gone as soon as I've rebooted.
Yep, similar thing here. On my system the /etc/zshrc
doesn't exist, so opening a new terminal or zsh session didn't help.
Instead, I had to log out and back in, which loaded the appropriate PATH from /etc/profile.d/nix.sh
I marked this as stale due to inactivity. → More info
Should be fixable by adjusting the PATH after finishing installation
https://stackoverflow.com/a/54087505/6341943 This seems to work for me
However I am using zsh, which does not load
.profile
automatically. Hence I had to add the line. $HOME/.nix-profile/etc/profile.d/nix.sh
to something zsh executes (.zshrc
).
This is what got it to work for me. I think that the installer script just assumes you use bash and doesn't account for the files loaded by zsh.
zsh is standard on mac OS now
I had this issue after upgrading my macOS version. Personally, I am using home-manager with flake (not 100% sure what it means). To solve my issue, I needed to add the below snippet at the bottom of /etc/zshrc
# Nix
if [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then
. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'
fi
# End Nix
You must use sudo vim /etc/zshrc
to add it. I think a recent macos update replaced the /etc/zshrc
, so it has to added in again.
Same issue on macOS 12.5.1 with typical zsh shell.
$ nix-shell
zsh: command not found: nix-shell
I verified the Nix installer appended the file /etc/zshrc
:
$ tail /etc/zshrc
# Nix
if [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then
. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'
fi
# End Nix
I verified the Nix installer created the file:
$ ls /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
I verified the Nix daemon is running:
$ ps aux | grep nix-daemon
root 14409 0.0 0.0 409085616 21568 ?? Ss 1:07PM 0:00.06 /nix/var/nix/profiles/default/bin/nix-daemon
What's next please?
if you have used nix itself to install zsh and ran the install script within zsh you will need to go back to editing the .bashrc and add the nix-daemon.sh line since you will be using bash instead of zsh again
In case anyone else stumbles upon this after a MacOS upgrade (it hit me upgrading to Monterey 12.6), in the install/uninstall documentation it mentions the file to source, as shown above: https://nixos.org/manual/nix/stable/installation/installing-binary.html#macos
# Nix
if [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then
. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'
fi
# End Nix
My preference is to override any system-wide setting with my user $HOME/.zshrc
.
I have the same issue on macOS Ventura 13.2 (22D49) + zsh on a fresh install through $ sh <(curl -L https://nixos.org/nix/install)
.
I've confirmed that:
nix-daemon
is running/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
existsnix-daemon.sh
is sourced in both /etc/zshrc
and $HOME/zsh.rc
.I've tried:
.
to source
:
- . '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'
+ source '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'
source
-ing manually:
$ source /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
$ nix-shell
zsh: command not found: nix-shell
$ . /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
$ nix-shell
zsh: command not found: nix-shell
/nix/var/nix/profiles/default/bin
to $PATH
:
$ nix-shell
error: getting status of '/Users/me/default.nix': No such file or directory
bash
, same issueAny ideas on what next?
I fixed this by commenting out the lines that short-circuits on __ETC_PROFILE_NIX_SOURCED=1
in /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
:
# file: /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
# Only execute this file once per shell.
- if [ -n "${__ETC_PROFILE_NIX_SOURCED:-}" ]; then return; fi
- __ETC_PROFILE_NIX_SOURCED=1
+ # if [ -n "${__ETC_PROFILE_NIX_SOURCED:-}" ]; then return; fi
+ # __ETC_PROFILE_NIX_SOURCED=1
Unsure why this happens 🤷🏻♂️ __ETC_PROFILE_NIX_SOURCED
probably got unintendedly set to 1
somewhere along the line.
Just chiming in to say adding this your PATH
somewhere might be enough, without editing /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
:
export PATH="$NIX_LINK/bin:/nix/var/nix/profiles/default/bin:$PATH"
Also chiming in to say I fixed it by adding it to my local zshrc and adding this UNSET
line:
# Nix
if [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then
unset __ETC_PROFILE_NIX_SOURCED
. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'
fi
# End Nix
I had the same issue after upgrading to macOS ventura 13.5, and fixed it by adding the following line:
source $HOME/.nix-profile/etc/profile.d/nix.sh
to my .zprofile (you can also add it to .zshrc)
I got this from the docs: https://nixos.org/manual/nix/stable/installation/env-variables#environment-variables
I would recommend re-running the Nix installer.
It walks through cleaning up system files from previous installations and brings the system back into the correct state.
In my case, I actually lost $HOME/.nix-profile/etc/
.
Ran into this as well and the hints from answers above (@2mol @ryanorendorff) did help me move forward.
Short version:
nix-shell
is not found
ln -s /nix/var/nix/profiles/default ~/.nix-profile
. $HOME/.nix-profile/etc/profile.d/nix.sh
now nix-shell -p nix-info --run "nix-info -m"
(assuming you have internet connection) does run
same issue for me, @chevdor solution worked for me. I use OSX 13.4.1 and zsh and used sh <(curl -L https://nixos.org/nix/install)
to install nix and got no errors/warnings from it (TBH the install tools is so verbose that it would be easy to miss important information)
I would recommend re-running the Nix installer. It walks through cleaning up system files from previous installations and brings the system back into the correct state. In my case, I actually lost
$HOME/.nix-profile/etc/
.
I upgraded macOS from version 13 to 14, and I confirm that reinstalling restored my Nix environment. Thanks!
https://stackoverflow.com/a/54087505/6341943 This seems to work for me
The answer https://stackoverflow.com/a/73799336 from this question solved my problem.
On Mac OS X (10.11.6) I ran
curl https://nixos.org/nix/install | sh
which downloadedhttps://nixos.org/releases/nix/nix-2.0.4/nix-2.0.4-x86_64-darwin.tar.bz2
On completion this was printed:
I started a new shell but nix-shell is not on my PATH in fish nor in bash
I found
nix-shell
in /nix but could not start it:Should the post-install instructions be updated? Are there any additional steps needed to get nix-shell to run?