feat(nvm)!: settings now are zstyle-based (#11335)

Co-authored-by: Marc Cornellà <hello@mcornella.com>
This commit is contained in:
Carlo 2022-11-15 20:23:09 +01:00 committed by GitHub
parent 4392d3a923
commit 6d5ba2d6c4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 66 additions and 21 deletions

View file

@ -1,7 +1,7 @@
# nvm plugin
This plugin adds autocompletions for [nvm](https://github.com/nvm-sh/nvm) — a Node.js version manager.
It also automatically sources nvm, so you don't need to do it manually in your `.zshrc`.
This plugin adds autocompletions for [nvm](https://github.com/nvm-sh/nvm) — a Node.js version manager. It also
automatically sources nvm, so you don't need to do it manually in your `.zshrc`.
To use it, add `nvm` to the plugins array of your zshrc file:
@ -21,14 +21,32 @@ These settings should go in your zshrc file, before Oh My Zsh is sourced:
[Homebrew is installed in `/opt/homebrew`](https://docs.brew.sh/Installation). To get the directory where
nvm has been installed, regardless of chip architecture, use `NVM_HOMEBREW=$(brew --prefix nvm)`.
- **`NVM_LAZY`**: if you want the plugin to defer the load of nvm to speed-up the start of your zsh session,
set `NVM_LAZY` to `1`. This will source nvm script only when using it, and will create a function for `node`,
`npm`, `pnpm`, `yarn`, and the command(s) specified by `NVM_LAZY_CMD`, so when you call either of them,
nvm will be loaded and run with default version.
## Customization
- **`NVM_LAZY_CMD`**: if you want additional command(s) to trigger lazy loading of nvm, set `NVM_LAZY_CMD` to
the command or an array of the commands.
#### Lazy startup
- **`NVM_AUTOLOAD`**: if `NVM_AUTOLOAD` is set to `1`, the plugin will automatically load a node version when
if finds a [`.nvmrc` file](https://github.com/nvm-sh/nvm#nvmrc) in the current working directory indicating
which node version to load.
This option will help you to defer nvm's load until you use it to speed-up your zsh startup. This will source
nvm script only when using it, and will create a function for `node`, `npm`, `pnpm`, `yarn`, and the
command(s) specified by `lazy-cmd` option, so when you call either of them, nvm will be loaded and run with
default version. To enable it, you can add this snippet to your zshrc, before Oh My Zsh is sourced:
```zsh
zstyle ':omz:plugins:nvm' lazy yes
```
Then, to define extra commands that will also trigger nvm load, you can use a similar syntax, adding as many
as you want:
```zsh
zstyle ':omz:plugins:nvm' lazy-cmd eslint prettier typescript ...
```
#### `.nvmrc` autoload
If set, the plugin will automatically load a node version when if finds a
[`.nvmrc` file](https://github.com/nvm-sh/nvm#nvmrc) in the current working directory indicating which node
version to load. This can be done, similar as previous options, adding:
```zsh
zstyle ':omz:plugins:nvm' autoload true
```

View file

@ -16,14 +16,41 @@ fi
# Note: nvm is a function so we need to use `which`
which nvm &>/dev/null && return
if (( $+NVM_LAZY )); then
# Call nvm when first using nvm, node, npm, pnpm, yarn or $NVM_LAZY_CMD
function nvm node npm pnpm yarn $NVM_LAZY_CMD {
unfunction nvm node npm pnpm yarn $NVM_LAZY_CMD
# Load nvm if it exists in $NVM_DIR
[[ -f "$NVM_DIR/nvm.sh" ]] && source "$NVM_DIR/nvm.sh"
"$0" "$@"
# TODO: 2022-11-11: Remove soft-deprecate options
if (( ${+NVM_LAZY} + ${+NVM_LAZY_CMD} + ${+NVM_AUTOLOAD} )); then
# Get list of NVM_* variable settings defined
local -a used_vars
used_vars=(${(o)parameters[(I)NVM_(AUTOLOAD|LAZY|LAZY_CMD)]})
# Nicely print the list in the style `var1, var2 and var3`
echo "${fg[yellow]}[nvm plugin] Variable-style settings are deprecated. Instead of ${(j:, :)used_vars[1,-2]}${used_vars[-2]+ and }${used_vars[-1]}, use:\n"
if (( $+NVM_AUTOLOAD )); then
echo " zstyle ':omz:plugins:nvm' autoload true"
zstyle ':omz:plugins:nvm' autoload yes
fi
if (( $+NVM_LAZY )); then
echo " zstyle ':omz:plugins:nvm' lazy true"
zstyle ':omz:plugins:nvm' lazy yes
fi
if (( $+NVM_LAZY_CMD )); then
echo " zstyle ':omz:plugins:nvm' lazy-cmd $NVM_LAZY_CMD"
zstyle ':omz:plugins:nvm' lazy-cmd $NVM_LAZY_CMD
fi
echo "$reset_color"
unset used_vars NVM_AUTOLOAD NVM_LAZY NVM_LAZY_CMD
fi
if zstyle -t ':omz:plugins:nvm' lazy; then
# Call nvm when first using nvm, node, npm, pnpm, yarn or other commands in lazy-cmd
zstyle -a ':omz:plugins:nvm' lazy-cmd nvm_lazy_cmd
eval "
function nvm node npm pnpm yarn $nvm_lazy_cmd {
unfunction nvm node npm pnpm yarn $nvm_lazy_cmd
# Load nvm if it exists in \$NVM_DIR
[[ -f \"\$NVM_DIR/nvm.sh\" ]] && source \"\$NVM_DIR/nvm.sh\"
\"\$0\" \"\$@\"
}
"
unset nvm_lazy_cmd
elif [[ -f "$NVM_DIR/nvm.sh" ]]; then
# Load nvm if it exists in $NVM_DIR
source "$NVM_DIR/nvm.sh"
@ -33,7 +60,7 @@ fi
# Autoload nvm when finding a .nvmrc file in the current directory
# Adapted from: https://github.com/nvm-sh/nvm#zsh
if (( $+NVM_AUTOLOAD )); then
if zstyle -t ':omz:plugins:nvm' autoload; then
load-nvmrc() {
local node_version="$(nvm version)"
local nvmrc_path="$(nvm_find_nvmrc)"
@ -70,4 +97,4 @@ for nvm_completion in "$NVM_DIR/bash_completion" "$NVM_HOMEBREW/etc/bash_complet
fi
done
unset NVM_HOMEBREW NVM_LAZY NVM_AUTOLOAD nvm_completion
unset NVM_HOMEBREW nvm_completion