summaryrefslogtreecommitdiff
path: root/plugins/nvm/nvm.plugin.zsh
diff options
context:
space:
mode:
authorTuowen Zhao <ztuowen@gmail.com>2020-10-21 16:57:03 -0600
committerTuowen Zhao <ztuowen@gmail.com>2020-10-21 16:57:03 -0600
commit058885f5263f29f046c96ea2ecf55e6dca3ed321 (patch)
tree5aca868fa5f9d16f39baa0c355f6056b5c8ea4da /plugins/nvm/nvm.plugin.zsh
parent1774c426de3c4845e2d606c813c37067b8cf78d7 (diff)
parent3b1699b59527ee8095397b9909a37d55689a0481 (diff)
downloadzsh-058885f5263f29f046c96ea2ecf55e6dca3ed321.tar.gz
zsh-058885f5263f29f046c96ea2ecf55e6dca3ed321.tar.bz2
zsh-058885f5263f29f046c96ea2ecf55e6dca3ed321.zip
Merge remote-tracking branch 'origin/master'
Diffstat (limited to 'plugins/nvm/nvm.plugin.zsh')
-rw-r--r--plugins/nvm/nvm.plugin.zsh82
1 files changed, 68 insertions, 14 deletions
diff --git a/plugins/nvm/nvm.plugin.zsh b/plugins/nvm/nvm.plugin.zsh
index 2264a2420..1e9b26e7a 100644
--- a/plugins/nvm/nvm.plugin.zsh
+++ b/plugins/nvm/nvm.plugin.zsh
@@ -1,23 +1,77 @@
-# Set NVM_DIR if it isn't already defined
-[[ -z "$NVM_DIR" ]] && export NVM_DIR="$HOME/.nvm"
+# See https://github.com/nvm-sh/nvm#installation-and-update
+if [[ -z "$NVM_DIR" ]]; then
+ if [[ -d "$HOME/.nvm" ]]; then
+ export NVM_DIR="$HOME/.nvm"
+ elif [[ -d "${XDG_CONFIG_HOME:-$HOME/.config}/nvm" ]]; then
+ export NVM_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/nvm"
+ fi
+fi
# Don't try to load nvm if command already available
-type "nvm" &> /dev/null && return
+which nvm &> /dev/null && return
-# Load nvm if it exists in $NVM_DIR
if [[ -f "$NVM_DIR/nvm.sh" ]]; then
- source "$NVM_DIR/nvm.sh"
+ # Load nvm if it exists in $NVM_DIR
+ source "$NVM_DIR/nvm.sh" ${NVM_LAZY+"--no-use"}
+else
+ # Otherwise try to load nvm installed via Homebrew
+ # User can set this if they have an unusual Homebrew setup
+ NVM_HOMEBREW="${NVM_HOMEBREW:-/usr/local/opt/nvm}"
+ # Load nvm from Homebrew location if it exists
+ if [[ -f "$NVM_HOMEBREW/nvm.sh" ]]; then
+ source "$NVM_HOMEBREW/nvm.sh" ${NVM_LAZY+"--no-use"}
+ else
+ # Exit the plugin if we couldn't find nvm
return
+ fi
fi
-# Otherwise try to load nvm installed via Homebrew
+# Call nvm when first using node, npm or yarn
+if (( $+NVM_LAZY )); then
+ function node npm yarn {
+ unfunction node npm yarn
+ nvm use default
+ command "$0" "$@"
+ }
+fi
-# User can set this if they have an unusual Homebrew setup
-NVM_HOMEBREW="${NVM_HOMEBREW:-/usr/local/opt/nvm}"
-# Load nvm from Homebrew location if it exists
-[[ -f "$NVM_HOMEBREW/nvm.sh" ]] && source "$NVM_HOMEBREW/nvm.sh"
-# Load nvm bash completion from Homebrew if it exists
-if [[ -f "$NVM_HOMEBREW/etc/bash_completion.d/nvm" ]]; then
- autoload -U +X bashcompinit && bashcompinit
- source "$NVM_HOMEBREW/etc/bash_completion.d/nvm"
+# Autoload nvm when finding a .nvmrc file in the current directory
+# Adapted from: https://github.com/nvm-sh/nvm#zsh
+if (( $+NVM_AUTOLOAD )); then
+ load-nvmrc() {
+ local node_version="$(nvm version)"
+ local nvmrc_path="$(nvm_find_nvmrc)"
+
+ if [[ -n "$nvmrc_path" ]]; then
+ local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
+
+ if [[ "$nvmrc_node_version" = "N/A" ]]; then
+ nvm install
+ elif [[ "$nvmrc_node_version" != "$node_version" ]]; then
+ nvm use
+ fi
+ elif [[ "$node_version" != "$(nvm version default)" ]]; then
+ echo "Reverting to nvm default version"
+ nvm use default
+ fi
+ }
+
+ autoload -U add-zsh-hook
+ add-zsh-hook chpwd load-nvmrc
+
+ load-nvmrc
fi
+
+# Load nvm bash completion
+for nvm_completion in "$NVM_DIR/bash_completion" "$NVM_HOMEBREW/etc/bash_completion.d/nvm"; do
+ if [[ -f "$nvm_completion" ]]; then
+ # Load bashcompinit
+ autoload -U +X bashcompinit && bashcompinit
+ # Bypass compinit call in nvm bash completion script. See:
+ # https://github.com/nvm-sh/nvm/blob/4436638/bash_completion#L86-L93
+ ZSH_VERSION= source "$nvm_completion"
+ break
+ fi
+done
+
+unset NVM_HOMEBREW NVM_LAZY NVM_AUTOLOAD nvm_completion