nvm.plugin.zsh 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. # Don't try to load nvm if command already available
  2. # Note: nvm is a function so we need to use `which`
  3. which nvm &>/dev/null && return
  4. # See https://github.com/nvm-sh/nvm#installation-and-update
  5. if [[ -z "$NVM_DIR" ]]; then
  6. if [[ -d "$HOME/.nvm" ]]; then
  7. export NVM_DIR="$HOME/.nvm"
  8. elif [[ -d "${XDG_CONFIG_HOME:-$HOME/.config}/nvm" ]]; then
  9. export NVM_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/nvm"
  10. elif (( $+commands[brew] )); then
  11. NVM_HOMEBREW="${NVM_HOMEBREW:-${HOMEBREW_PREFIX:-$(brew --prefix)}/opt/nvm}"
  12. if [[ -d "$NVM_HOMEBREW" ]]; then
  13. export NVM_DIR="$NVM_HOMEBREW"
  14. fi
  15. fi
  16. fi
  17. if [[ -z "$NVM_DIR" ]] || [[ ! -f "$NVM_DIR/nvm.sh" ]]; then
  18. return
  19. fi
  20. function _omz_load_nvm_completion {
  21. local _nvm_completion
  22. # Load nvm bash completion
  23. for _nvm_completion in "$NVM_DIR/bash_completion" "$NVM_HOMEBREW/etc/bash_completion.d/nvm"; do
  24. if [[ -f "$_nvm_completion" ]]; then
  25. # Load bashcompinit
  26. autoload -U +X bashcompinit && bashcompinit
  27. # Bypass compinit call in nvm bash completion script. See:
  28. # https://github.com/nvm-sh/nvm/blob/4436638/bash_completion#L86-L93
  29. ZSH_VERSION= source "$_nvm_completion"
  30. break
  31. fi
  32. done
  33. unfunction _omz_load_nvm_completion
  34. }
  35. function _omz_setup_autoload {
  36. if ! zstyle -t ':omz:plugins:nvm' autoload; then
  37. unfunction _omz_setup_autoload
  38. return
  39. fi
  40. # Autoload nvm when finding a .nvmrc file in the current directory
  41. # Adapted from: https://github.com/nvm-sh/nvm#zsh
  42. function load-nvmrc {
  43. local nvmrc_path="$(nvm_find_nvmrc)"
  44. local nvm_silent=""
  45. zstyle -t ':omz:plugins:nvm' silent-autoload && nvm_silent="--silent"
  46. if [[ -n "$nvmrc_path" ]]; then
  47. local nvmrc_node_version=$(nvm version $(cat "$nvmrc_path" | tr -dc '[:print:]'))
  48. if [[ "$nvmrc_node_version" = "N/A" ]]; then
  49. nvm install
  50. elif [[ "$nvmrc_node_version" != "$node_version" ]]; then
  51. nvm use $nvm_silent
  52. fi
  53. elif [[ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ]] && [[ "$(nvm version)" != "$(nvm version default)" ]]; then
  54. [[ -z $nvm_silent ]] && echo "Reverting to nvm default version"
  55. nvm use default $nvm_silent
  56. fi
  57. }
  58. autoload -U add-zsh-hook
  59. add-zsh-hook chpwd load-nvmrc
  60. load-nvmrc
  61. unfunction _omz_setup_autoload
  62. }
  63. if zstyle -t ':omz:plugins:nvm' lazy; then
  64. # Call nvm when first using nvm, node, npm, pnpm, yarn or other commands in lazy-cmd
  65. zstyle -a ':omz:plugins:nvm' lazy-cmd nvm_lazy_cmd
  66. nvm_lazy_cmd=(nvm node npm npx pnpm yarn $nvm_lazy_cmd) # default values
  67. eval "
  68. function $nvm_lazy_cmd {
  69. for func in $nvm_lazy_cmd; do
  70. if (( \$+functions[\$func] )); then
  71. unfunction \$func
  72. fi
  73. done
  74. # Load nvm if it exists in \$NVM_DIR
  75. [[ -f \"\$NVM_DIR/nvm.sh\" ]] && source \"\$NVM_DIR/nvm.sh\"
  76. _omz_load_nvm_completion
  77. _omz_setup_autoload
  78. \"\$0\" \"\$@\"
  79. }
  80. "
  81. unset nvm_lazy_cmd
  82. else
  83. source "$NVM_DIR/nvm.sh"
  84. _omz_load_nvm_completion
  85. _omz_setup_autoload
  86. fi