feat(zsh): create nvmrc plugin

Custom plugin to check the .nvmrc file. When entering a directory, it
checks to see if you have the desired node version installed for the
current project. If it is, it will use it automatically, if not, then it
will ask you if you want to install it. After, it will install all the
JS developer tools for that version of NodeJS.

This is a different implementation than the default oh-my-zsh version.
The main difference is that it will not reset the node version when
leaving a directory. It will only preform an action if there is a
`.nvmrc` file in the current directory. It will not even use the
`nvm_find_nvmrc` command because any interaction with nvm make the
stranded `cd` command extremely sluggish.
This commit is contained in:
Ade Attwood 2023-03-16 20:45:13 +00:00
parent cc49f5339e
commit 456c7dfd73

View file

@ -0,0 +1,44 @@
#!/bin/zsh
#
# Custom plugin to check the .nvmrc file. When entering a directory, it checks
# to see if you have the desired node version installed for the current
# project. If it is, it will use it automatically, if not, then it will ask you
# if you want to install it. After, it will install all the JS developer tools
# for that version of NodeJS.
#
# This is a different implementation than the default oh-my-zsh version. The
# main difference is that it will not reset the node version when leaving a
# directory. It will only preform an action if there is a `.nvmrc` file in the
# current directory. It will not even use the `nvm_find_nvmrc` command because
# any interaction with nvm make the stranded `cd` command extremely sluggish.
maybe_nvm_install() {
local version="$1"
if read -q "do?Node version ${version} is not installed, would you like to install it? (Y/N) "; then
echo ""
nvm install "${version}"
echo "Installing all of the JS developer tools for this version of node with npm"
npm install -g yarn typescript-language-server typescript emmet-ls cspell vscode-langservers-extracted prettier jsdoc eslint
fi
}
load_nvmrc() {
local nvmrc_path=".nvmrc"
if [[ -f "$nvmrc_path" ]]; then
local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
if [[ "$nvmrc_node_version" = "N/A" ]]; then
maybe_nvm_install "$(cat "${nvmrc_path}")"
else
nvm use > /dev/null
fi
fi
}
autoload -U add-zsh-hook
add-zsh-hook chpwd load_nvmrc
load_nvmrc