nvm.plugin.zsh 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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 node_version="$(nvm version)"
  44. local nvmrc_path="$(nvm_find_nvmrc)"
  45. local nvm_silent=""
  46. zstyle -t ':omz:plugins:nvm' silent-autoload && nvm_silent="--silent"
  47. if [[ -n "$nvmrc_path" ]]; then
  48. local nvmrc_node_version=$(nvm version $(cat "$nvmrc_path" | tr -dc '[:print:]'))
  49. if [[ "$nvmrc_node_version" = "N/A" ]]; then
  50. nvm install
  51. elif [[ "$nvmrc_node_version" != "$node_version" ]]; then
  52. nvm use $nvm_silent
  53. fi
  54. elif [[ "$node_version" != "$(nvm version default)" ]]; then
  55. if [[ -z $nvm_silent ]]; then
  56. echo "Reverting to nvm default version"
  57. fi
  58. nvm use default $nvm_silent
  59. fi
  60. }
  61. autoload -U add-zsh-hook
  62. add-zsh-hook chpwd load-nvmrc
  63. load-nvmrc
  64. unfunction _omz_setup_autoload
  65. }
  66. if zstyle -t ':omz:plugins:nvm' lazy; then
  67. # Call nvm when first using nvm, node, npm, pnpm, yarn or other commands in lazy-cmd
  68. zstyle -a ':omz:plugins:nvm' lazy-cmd nvm_lazy_cmd
  69. nvm_lazy_cmd=(nvm node npm npx pnpm yarn $nvm_lazy_cmd) # default values
  70. eval "
  71. function $nvm_lazy_cmd {
  72. for func in $nvm_lazy_cmd; do
  73. if (( \$+functions[\$func] )); then
  74. unfunction \$func
  75. fi
  76. done
  77. # Load nvm if it exists in \$NVM_DIR
  78. [[ -f \"\$NVM_DIR/nvm.sh\" ]] && source \"\$NVM_DIR/nvm.sh\"
  79. _omz_load_nvm_completion
  80. _omz_setup_autoload
  81. \"\$0\" \"\$@\"
  82. }
  83. "
  84. unset nvm_lazy_cmd
  85. else
  86. source "$NVM_DIR/nvm.sh"
  87. _omz_load_nvm_completion
  88. _omz_setup_autoload
  89. fi