--- title: Homebrew / Xcode Tools Installation description: Ensures Xcode tools are installed on macOS and ensures Homebrew is installed on either Linux or macOS sidebar_label: 01 Homebrew / Xcode Tools Installation slug: /scripts/before/run_before_01-install-homebrew.sh.tmpl githubLocation: https://github.com/megabyte-labs/install.doctor/blob/master/home/.chezmoiscripts/universal/run_before_01-install-homebrew.sh.tmpl scriptLocation: https://github.com/megabyte-labs/install.doctor/raw/master/home/.chezmoiscripts/universal/run_before_01-install-homebrew.sh.tmpl repoLocation: home/.chezmoiscripts/universal/run_before_01-install-homebrew.sh.tmpl --- # Homebrew / Xcode Tools Installation Ensures Xcode tools are installed on macOS and ensures Homebrew is installed on either Linux or macOS ## Overview This script ensures macOS has tools like `git` by installing the Xcode command-line developer tools if they are not already installed. Then, on both Linux and macOS, it ensures Homebrew is installed. ## Homebrew Requirement Install Doctor relies on Homebrew for many tools that are currently only available via Homebrew. Removing the dependency would be a nice-to-have but there are currently no plans for supporting systems without Homebrew installed. ## Source Code ``` {{- if (ne .host.distro.family "windows") -}} #!/usr/bin/env bash # @file Homebrew / Xcode Tools Installation # @brief Ensures Xcode tools are installed on macOS and ensures Homebrew is installed on either Linux or macOS # @description # This script ensures macOS has tools like `git` by installing the Xcode command-line developer tools if they are # not already installed. Then, on both Linux and macOS, it ensures Homebrew is installed. # # ## Homebrew Requirement # # Install Doctor relies on Homebrew for many tools that are currently only available via Homebrew. Removing the dependency # would be a nice-to-have but there are currently no plans for supporting systems without Homebrew installed. {{ includeTemplate "universal/profile-before" }} {{ includeTemplate "universal/logg-before" }} ### Install Xcode CLI tools on macOS if [ -d /Applications ] && [ -d /Library ]; then xcode-select -p >/dev/null 2>&1 || sudo xcode-select --install fi ### Install Homebrew ensurePackageManagerHomebrew() { if ! command -v brew > /dev/null; then if command -v sudo > /dev/null && sudo -n true; then echo | bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" else logg info 'Homebrew is not installed. Password may be required.' bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" || BREW_EXIT_CODE="$?" if [ -n "$BREW_EXIT_CODE" ]; then if command -v brew > /dev/null; then logg warn 'Homebrew was installed but part of the installation failed. Attempting to fix..' BREW_DIRS="share/man share/doc share/zsh/site-functions etc/bash_completion.d" for BREW_DIR in $BREW_DIRS; do if [ -d "$(brew --prefix)/$BREW_DIR" ]; then sudo chown -R "$(whoami)" "$(brew --prefix)/$BREW_DIR" fi done brew update --force --quiet fi fi fi fi } ensurePackageManagerHomebrew {{ end -}} ```