Skip to content

Commit

Permalink
plugins/nvm: add nvmrc autoload option
Browse files Browse the repository at this point in the history
  • Loading branch information
sanzoghenzo committed Dec 4, 2022
1 parent 1c7f6d6 commit d8fc8a0
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 3 deletions.
11 changes: 11 additions & 0 deletions plugins/nvm/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,16 @@ completions=(
)
```

## `.nvmrc` autoload

If set, the plugin will automatically load a node version when if finds a
`.nvmrc` file[3] in the current working directory indicating which node version to load.
This can be done adding the following to your `.bashrc`:

```bash
export OMB_PLUGIN_NVM_AUTO_USE=true
```

[1]: https://github.com/nvm-sh/nvm
[2]: https://github.com/nvm-sh/nvm#manual-install
[3]: https://github.com/nvm-sh/nvm#nvmrc
62 changes: 59 additions & 3 deletions plugins/nvm/nvm.plugin.sh
Original file line number Diff line number Diff line change
@@ -1,12 +1,68 @@
#! bash oh-my-bash.module
# Description: automatically load nvm
#
# @var[opt] OMB_PLUGIN_NVM_AUTO_USE enable .nvmrc autoload

# Set NVM_DIR if it isn't already defined
[[ -z "$NVM_DIR" ]] && export NVM_DIR="$HOME/.nvm"


# Try to load nvm only if command not already available
if ! _omb_util_command_exists nvm; then
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
# This is done as part of completions!!!
# [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
# shellcheck source=/dev/null
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
fi

# Optional .nvmrc autoload
if _omb_util_command_exists nvm && [[ ${OMB_PLUGIN_NVM_AUTO_USE} == true ]]; then
find-up () {
path=$(pwd)
while [[ "$path" != "" && ! -e "$path/$1" ]]; do
path=${path%/*}
done
echo "$path"
}

cdnvm(){
cd "$@" || return $?
nvm_path=$(find-up .nvmrc | tr -d '\n')

# If there are no .nvmrc file, use the default nvm version
if [[ ! $nvm_path = *[^[:space:]]* ]]; then

declare default_version;
default_version=$(nvm version default);

# If there is no default version, set it to `node`
# This will use the latest version on your machine
if [[ $default_version == "N/A" ]]; then
nvm alias default node;
default_version=$(nvm version default);
fi

# If the current version is not the default version, set it to use the default version
if [[ $(nvm current) != "$default_version" ]]; then
nvm use default;
fi

elif [[ -s $nvm_path/.nvmrc && -r $nvm_path/.nvmrc ]]; then
declare nvm_version
nvm_version=$(<"$nvm_path"/.nvmrc)

# Add the `v` suffix if it does not exists in the .nvmrc file
if [[ $nvm_version != v* ]]; then
nvm_version="v""$nvm_version"
fi

# If it is not already installed, install it
if [[ $(nvm ls "$nvm_version" | tr -d '[:space:]') == "N/A" ]]; then
nvm install "$nvm_version";
fi

if [[ $(nvm current) != "$nvm_version" ]]; then
nvm use "$nvm_version";
fi
fi
}
alias cd='cdnvm'
fi

0 comments on commit d8fc8a0

Please sign in to comment.