21bdb18b2d1fe8b547a42da7ac7b58fb28563a2c

Author
Carlos Eduardo Monti <slaytanic@gmail.com>
Committer
GitHub <noreply@github.com>
Date

Message

feat(nodenv): add plugin for `nodenv` (#9880)

Co-authored-by: Matthew Boston <matthew@matthewboston.com>

Diff

 1diff --git a/plugins/nodenv/README.md b/plugins/nodenv/README.md
 2new file mode 100644
 3index 0000000000000000000000000000000000000000..55059702584862c46570291722f83f127ac19629
 4--- /dev/null
 5+++ b/plugins/nodenv/README.md
 6@@ -0,0 +1,20 @@
 7+# nodenv plugin
 8+
 9+The primary job of this plugin is to provide `nodenv_prompt_info` which can be added to your theme to include Node
10+version information into your prompt.
11+
12+To use it, add `nodenv` to the plugins array in your zshrc file:
13+
14+```zsh
15+plugins=(... nodenv)
16+```
17+
18+## Functions
19+
20+* `nodenv_prompt_info`: displays the Node version in use by nodenv; or the global Node
21+  version, if nodenv wasn't found. You can use this function in your prompt by adding
22+  `$(nodenv_prompt_info)` to PROMPT or RPROMPT:
23+
24+  ```zsh
25+  RPROMPT='$(nodenv_prompt_info)'
26+  ```
27diff --git a/plugins/nodenv/nodenv.plugin.zsh b/plugins/nodenv/nodenv.plugin.zsh
28new file mode 100644
29index 0000000000000000000000000000000000000000..79a4ffbb520e54348fd2981d87acee4450538706
30--- /dev/null
31+++ b/plugins/nodenv/nodenv.plugin.zsh
32@@ -0,0 +1,43 @@
33+# This plugin loads nodenv into the current shell and provides prompt info via
34+# the 'nodenv_prompt_info' function.
35+
36+FOUND_NODENV=${+commands[nodenv]}
37+
38+if [[ $FOUND_NODENV -ne 1 ]]; then
39+  nodenvdirs=(
40+    "$HOME/.nodenv"
41+    "/usr/local/nodenv"
42+    "/opt/nodenv"
43+    "/usr/local/opt/nodenv"
44+  )
45+  for dir in $nodenvdirs; do
46+    if [[ -d "${dir}/bin" ]]; then
47+      export PATH="$PATH:${dir}/bin"
48+      FOUND_NODENV=1
49+      break
50+    fi
51+  done
52+
53+  if [[ $FOUND_NODENV -ne 1 ]]; then
54+    if (( $+commands[brew] )) && dir=$(brew --prefix nodenv 2>/dev/null); then
55+      if [[ -d "${dir}/bin" ]]; then
56+        export PATH="$PATH:${dir}/bin"
57+        FOUND_NODENV=1
58+      fi
59+    fi
60+  fi
61+fi
62+
63+if [[ $FOUND_NODENV -eq 1 ]]; then
64+  eval "$(nodenv init --no-rehash - zsh)"
65+  function nodenv_prompt_info() {
66+    nodenv version-name 2>/dev/null
67+  }
68+else
69+  # fallback to system node
70+  function nodenv_prompt_info() {
71+    echo "system: $(node -v 2>&1 | cut -c 2-)"
72+  }
73+fi
74+
75+unset FOUND_NODENV nodenvdirs dir