fix(shell): restore always-on PATH after macOS path_helper

path_helper runs after ~/.zshenv in login shells and puts Homebrew ahead of
fnm, pyenv, and ~/.local/bin. Re-source ~/.zshenv from ~/.zprofile and make
prepends idempotent so login and zsh -c resolve the same binaries.
This commit is contained in:
Frank Qing committed 2026-09-07 22:07:58 +08:00
1 parent 82c6a57c3a
commit 34d11b5aa4
8 files changed
+198 -73

No files matched your search

+26 -6
View File
@@ -1,10 +1,30 @@
# fnm (Fast Node Manager) — always-on (sourced from ~/.zshenv)
# fnm (Fast Node Manager) — always-on via ~/.zshenv
FNM_PATH="${XDG_DATA_HOME:-$HOME/.local/share}/fnm"
[[ -d "$FNM_PATH" ]] && export PATH="$FNM_PATH:$PATH"
[[ -d "$FNM_PATH" ]] && path=("$FNM_PATH" ${path:#$FNM_PATH})
if command -v fnm &> /dev/null; then
if [[ -o interactive ]]; then
eval "$(fnm env --use-on-cd --shell zsh)"
else
eval "$(fnm env --shell zsh)"
_easyzsh_fnm_state="${XDG_STATE_HOME:-$HOME/.local/state}/fnm_multishells"
_easyzsh_fnm_ready=0
if [[ -n "$FNM_MULTISHELL_PATH" && -d "$FNM_MULTISHELL_PATH/bin" ]] \
&& [[ "$FNM_MULTISHELL_PATH" == "$_easyzsh_fnm_state/"* || "$FNM_MULTISHELL_PATH" == "$FNM_PATH/"* ]]; then
if [[ ! -o interactive ]] || (( $+functions[_fnm_autoload_hook] )); then
_easyzsh_fnm_ready=1
fi
fi
if (( _easyzsh_fnm_ready )); then
path=("$FNM_MULTISHELL_PATH/bin" ${path:#$FNM_MULTISHELL_PATH/bin})
else
_easyzsh_fnm_prev="$FNM_MULTISHELL_PATH"
if [[ -o interactive ]]; then
eval "$(fnm env --use-on-cd --shell zsh)"
else
eval "$(fnm env --shell zsh)"
fi
if [[ -n "$_easyzsh_fnm_prev" ]]; then
path=(${path:#$_easyzsh_fnm_prev/bin})
fi
unset _easyzsh_fnm_prev
fi
unset _easyzsh_fnm_ready _easyzsh_fnm_state
fi
export PATH