# Setup Ruby environment: version managers (rbenv, chruby, rvm), Homebrew Ruby, and gem bin paths _setup_ruby() { [ -n "$ZSH_VERSION" ] && setopt localoptions nonomatch nullglob _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 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