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