diff --git a/plugins/available/goenv.plugin.bash b/plugins/available/goenv.plugin.bash index c8d0f5ba..7bcf1bb1 100644 --- a/plugins/available/goenv.plugin.bash +++ b/plugins/available/goenv.plugin.bash @@ -1,21 +1,29 @@ cite about-plugin about-plugin 'Init goenv, if installed. Plays nicely with package managers' -# Try to set GOENV_ROOT if not already set -if [ -z "${GOENV_ROOT}" ]; then - # Bail if cannot be set - if [ ! -d "$HOME/.goenv" ]; then - return - fi - export GOENV_ROOT="$HOME/.goenv" +# GOENV_ROOT does not need to be configured. +# If it is configured, it should not be overridden. +# However, let's try to handle the case where: +# - goenv is not already on the path +# - GOENV_ROOT is not configured +# - User has installed goenv in ~/.goenv +# In this case, we'll do the user a solid and configure +# the goenv they've taken the time to install. +if ! _command_exists goenv && [ -z "${GOENV_ROOT}" ] && [ -x "${HOME}/.goenv/bin/goenv" ]; then + export GOENV_ROOT="${HOME}/.goenv" fi -# Add GOENV_ROOT/bin to path if goenv not already on path -if ! _command_exists goenv && [ -x "${GOENV_ROOT}/bin/goenv" ]; then - pathmunge "$GOENV_ROOT/bin" +# Add GOENV_ROOT/bin to path if: +# - goenv not already on path +# - GOENV_ROOT is configured +# - User has installed goenv in GOENV_ROOT +if ! _command_exists goenv && [ -n "${GOENV_ROOT}" ] && [ -x "${GOENV_ROOT}/bin/goenv" ]; then + pathmunge "${GOENV_ROOT}/bin" fi -# Initialize goenv - Play nicely if goenv not on path +# Initialize goenv - Play nicely if goenv never made it to the path +# NOTE: In the off-chance that goenv has already been initialized, +# it should be safe to re-initialize if _command_exists goenv ; then eval "$(goenv init - bash)" fi