Shell functions to load enviroments

Nowadays, tools like rbenv or nvm manipulate your shell environment to provide specific versions of ruby, node, etc. If you add several of those scripts to your .bashrc or .zshrc it takes to long to spawn a new shell, at least for my taste.

The following functions can be added instead and initialize the environments only when the specific commands are invoced for the first time.

# for rbenv
function rbenv {
    echo "~~~ init rbenv ~~~"
    unset -f rbenv

    export PATH=$HOME/.rbenv/bin:$PATH
    eval "$(rbenv init -)"

    rbenv $@
}

# for nvm
function nvm {
    echo "~~~ init nvm ~~~"
    unset -f nvm

    export NVM_DIR="$HOME/.nvm"
    [ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh"

    nvm $@
}

# for miniconda (using zsh)
function conda {
    echo "~~~ init conda ~~~"
    unset -f conda
    eval "$(conda shell.zsh hook)"

    conda $@
}