diff --git a/install.sh b/install.sh index 897459317a..04e85d8705 100755 --- a/install.sh +++ b/install.sh @@ -135,6 +135,24 @@ nvm_do_install() { fi fi + # Actions for fish shell + if (which fish > /dev/null); then + echo "=> fish found, copying nvm function" + FISH_CONFIG_DIR=$HOME/.config/fish + FISH_FUNCTIONS_DIR=$FISH_CONFIG_DIR/functions + + mkdir -p $FISH_FUNCTIONS_DIR + cp $NVM_DIR/nvm.fish $FISH_FUNCTIONS_DIR + + # Apply nvm in fish configuration + FISH_CONFIG_STRING="nvm > /dev/null ^&1" + FISH_CONFIG_FILE=$FISH_CONFIG_DIR/config.fish + if ! grep -q "$FISH_CONFIG_STRING" $FISH_CONFIG_FILE 2> /dev/null ; then + echo "=> appending nvm to fish configuration" + echo $FISH_CONFIG_STRING >> $FISH_CONFIG_DIR/config.fish + fi + fi + echo "=> Close and reopen your terminal to start using nvm" nvm_reset } diff --git a/nvm b/nvm new file mode 100755 index 0000000000..820985c4d0 --- /dev/null +++ b/nvm @@ -0,0 +1,14 @@ +#!/bin/bash + +# Get this script after dereferincing all symlinks +# !! Doesn't check for circular symlinks !! +SOURCE="${BASH_SOURCE[0]}" +while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink + DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + SOURCE="$(readlink "$SOURCE")" + [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located +done +DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + +source "$DIR/nvm.sh" +'nvm' $@ diff --git a/nvm.fish b/nvm.fish new file mode 100644 index 0000000000..a4072bc2a6 --- /dev/null +++ b/nvm.fish @@ -0,0 +1,24 @@ +function nvm --description "Node version manager" -a nvm_command nvm_command_arg1 + set nvm_dir ~/.nvm + set nvm_ $nvm_dir/nvm + + # This sets some environment vars that we need to set too + if test "$nvm_command" = "use" + eval $nvm_ use --print-paths $nvm_command_arg1 | sed -re "s|^(\w+=)|set -x \1|g" -e "s|[=:]| |g" | grep "set -x" | . + else + # Make sure we can use node + if test ! (which node) + # Have we installed node at all ? + if eval $nvm_ ls | grep "N/A" > /dev/null + echo "No node installation found, installing stable" + eval $nvm_ install stable + end + # Make sure we have a default picked + if eval $nvm_ ls default | grep "N/A" + eval $nvm_ alias default stable + end + nvm use default + end + eval $nvm_ $argv + end +end diff --git a/nvm.sh b/nvm.sh index 969af37d06..9809e8d2cb 100644 --- a/nvm.sh +++ b/nvm.sh @@ -531,22 +531,22 @@ nvm() { echo "Node Version Manager" echo echo "Usage:" - echo " nvm help Show this message" - echo " nvm --version Print out the latest released version of nvm" - echo " nvm install [-s] Download and install a , [-s] from source. Uses .nvmrc if available" - echo " nvm uninstall Uninstall a version" - echo " nvm use Modify PATH to use . Uses .nvmrc if available" - echo " nvm run [] Run with as arguments. Uses .nvmrc if available for " - echo " nvm current Display currently activated version" - echo " nvm ls List installed versions" - echo " nvm ls List versions matching a given description" - echo " nvm ls-remote List remote versions available for install" - echo " nvm deactivate Undo effects of NVM on current shell" - echo " nvm alias [] Show all aliases beginning with " - echo " nvm alias Set an alias named pointing to " - echo " nvm unalias Deletes the alias named " - echo " nvm copy-packages Install global NPM packages contained in to current version" - echo " nvm unload Unload NVM from shell" + echo " nvm help Show this message" + echo " nvm --version Print out the latest released version of nvm" + echo " nvm install [-s] Download and install a , [-s] from source. Uses .nvmrc if available" + echo " nvm uninstall Uninstall a version" + echo " nvm [--print-paths] use Modify PATH (and optionally print it) to use . Uses .nvmrc if available" + echo " nvm run [] Run with as arguments. Uses .nvmrc if available for " + echo " nvm current Display currently activated version" + echo " nvm ls List installed versions" + echo " nvm ls List versions matching a given description" + echo " nvm ls-remote List remote versions available for install" + echo " nvm deactivate Undo effects of NVM on current shell" + echo " nvm alias [] Show all aliases beginning with " + echo " nvm alias Set an alias named pointing to " + echo " nvm unalias Deletes the alias named " + echo " nvm copy-packages Install global NPM packages contained in to current version" + echo " nvm unload Unload NVM from shell" echo echo "Example:" echo " nvm install v0.10.24 Install a specific version number" @@ -794,20 +794,35 @@ nvm() { fi ;; "use" ) + shift # start treating the args given to "use" + if [ $# -eq 0 ]; then - nvm help - return 127 - fi - if [ $# -eq 1 ]; then nvm_rc_version if [ -n "$NVM_RC_VERSION" ]; then VERSION=`nvm_version $NVM_RC_VERSION` fi - elif [ "_$2" != '_system' ]; then - VERSION="$(nvm_version "$2")" else - VERSION="$2" + # Handle options + while [ $# > 0 ]; do + key="$1" + shift + case $key in + --print-paths) + PRINT_PATHS=true + ;; + + *) + if [ "_$key" != '_system' ]; then + VERSION="$(nvm_version "$key")" + else + VERSION="$key" + fi + break + ;; + esac + done fi + if [ -z "$VERSION" ]; then nvm help return 127 @@ -822,7 +837,7 @@ nvm() { return 127 fi elif [ "_$VERSION" = "_∞" ]; then - echo "The alias \"$2\" leads to an infinite loop. Aborting." >&2 + echo "The alias \"$key\" leads to an infinite loop. Aborting." >&2 return 8 fi @@ -858,6 +873,12 @@ nvm() { if [ "$NVM_SYMLINK_CURRENT" = true ]; then rm -f "$NVM_DIR/current" && ln -s "$NVM_VERSION_DIR" "$NVM_DIR/current" fi + if [ $PRINT_PATHS ]; then + echo PATH=$PATH + echo NODE_PATH=$NODE_PATH + echo NVM_PATH=$NVM_PATH + echo NVM_BIN=$NVM_BIN + fi echo "Now using node $VERSION" ;; "run" )