Cleans up ruby script.

This commit is contained in:
2026-09-07 18:09:09 -07:00
parent 2e309ce15f
commit 23a42cda46

View File

@@ -1,6 +1,100 @@
# Ruby # Setup Ruby environment: version managers (rbenv, chruby, rvm), Homebrew Ruby, and gem bin paths
if [[ $(command -v rbenv) ]]; then _setup_ruby() {
eval "$(rbenv init -)" [ -n "$ZSH_VERSION" ] && setopt localoptions nonomatch nullglob
export PATH="$HOME/.gem/ruby/3.0.0/bin:$PATH"
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1)" _add_to_path() {
[ -d "$1" ] || return 0
case ":$PATH:" in
*":$1:"*) ;;
*) PATH="$1:$PATH"; export PATH ;;
esac
}
_ruby_manager_active=0
# 1. Check for rbenv (prefer managed Ruby)
if [ -d "$HOME/.rbenv/bin" ]; then
_add_to_path "$HOME/.rbenv/bin"
fi fi
if command -v rbenv >/dev/null 2>&1; then
eval "$(rbenv init - 2>/dev/null)"
_ruby_manager_active=1
# Fast OpenSSL detection for ruby-build without calling slow `brew --prefix`
if [ -z "$RUBY_CONFIGURE_OPTS" ]; then
for _ssl_dir in \
"/opt/homebrew/opt/openssl@3" \
"/opt/homebrew/opt/openssl@1.1" \
"/usr/local/opt/openssl@3" \
"/usr/local/opt/openssl@1.1"
do
if [ -d "$_ssl_dir" ]; then
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$_ssl_dir"
break
fi
done
fi
fi
# 2. Check for chruby
if [ "$_ruby_manager_active" -eq 0 ]; then
for _chruby_sh in \
"/opt/homebrew/opt/chruby/share/chruby/chruby.sh" \
"/usr/local/share/chruby/chruby.sh" \
"/usr/share/chruby/chruby.sh"
do
if [ -r "$_chruby_sh" ]; then
\. "$_chruby_sh"
[ -r "${_chruby_sh%/*}/auto.sh" ] && \. "${_chruby_sh%/*}/auto.sh"
_ruby_manager_active=1
break
fi
done
fi
# 3. Check for RVM
if [ "$_ruby_manager_active" -eq 0 ]; then
if [ -s "$HOME/.rvm/scripts/rvm" ]; then
\. "$HOME/.rvm/scripts/rvm"
_ruby_manager_active=1
fi
fi
# 4. If no version manager is active, fallback to Homebrew keg-only Ruby or standard locations
# (Avoids Apple's deprecated /usr/bin/ruby on macOS when Homebrew Ruby is installed)
if [ "$_ruby_manager_active" -eq 0 ]; then
for _brew_ruby in $(
for _r in /opt/homebrew/opt/ruby/bin \
/opt/homebrew/opt/ruby@*/bin \
/usr/local/opt/ruby/bin \
/usr/local/opt/ruby@*/bin; do
[ -x "$_r/ruby" ] && echo "$_r"
done | sort -V -r 2>/dev/null
); do
_add_to_path "$_brew_ruby"
break
done
fi
# 5. Add user gem binaries to PATH (dynamically resolved, not hardcoded to a fixed version)
if command -v ruby >/dev/null 2>&1; then
_gem_user_bin="$(ruby -e 'puts Gem.user_dir' 2>/dev/null)/bin"
if [ -n "$_gem_user_bin" ] && [ -d "$_gem_user_bin" ]; then
_add_to_path "$_gem_user_bin"
fi
unset _gem_user_bin
for _gbin in $(
for _gd in "$HOME/.gem/ruby"/*/bin "$HOME/.local/share/gem/ruby"/*/bin; do
[ -d "$_gd" ] && echo "$_gd"
done | sort -V -r 2>/dev/null
); do
_add_to_path "$_gbin"
break
done
fi
unset _ruby_manager_active
}
_setup_ruby
unset -f _setup_ruby _add_to_path