How can I run two isolated installations of Homebrew?

  1. Install Homebrew natively on Apple Silicon (will install to /opt/homebrew by default):

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    
  2. Install Intel-emulated Homebrew (will install to /usr/local by default):

    arch --x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    

    If you haven’t yet installed Rosetta 2, you’ll need to run softwareupdate --install-rosetta first.

  3. Create an alias for Intel homebrew. I’m calling mine brow because O for old. But hey you do your own thing.

    In ~/.zshrc (or your shell’s equivalent) add:

    alias brow='arch --x86_64 /usr/local/Homebrew/bin/brew'
    
  4. Add ARM Homebrew to your PATH.

    In ~/.zshrc (or your shell’s equivalent) add:

    # Homebrew on Apple Silicon
    path=('/opt/homebrew/bin' $path)
    export PATH
    

    If you’re still on bash it’d be PATH=/opt/homebrew/bin:$PATH

  5. Confirm

    which brew should return /opt/homebrew/bin/brew

    brew --prefix should return /opt/homebrew

    which brow should return brow: aliased to arch --x86_64 /usr/local/Homebrew/bin/brew

    brow --prefix should return /usr/local


If you have the same command installed in both Homebrews, it’ll default to Apple Silicon (/opt/homebrew/) since we prepended that one in our PATH. To override, run the command with its full path (/usr/local/bin/youtube-dl), or override your PATH for one command (PATH=/usr/local/bin youtube-dl).

I also created another handy alias in .zshrc (alias ib='PATH=/usr/local/bin') so I can prepend any Homebrew-installed command with ib to force using the Intel version of that command:

~ ▶ which youtube-dl
/opt/homebrew/bin/youtube-dl
~ ▶ ib which youtube-dl
/usr/local/bin/youtube-dl

If you prefer Intel to be the default brew, add /opt/homebrew/bin to the end of your PATH instead of the beginning.

Leave a Comment