#!/usr/bin/env bash set -euo pipefail # Debugging DEBUG="${DEBUG:-false}" if [[ "${DEBUG}" == true ]]; then set -x fi # Check if gcc is installed & install it if it's not # (add VanillaOS package manager in the future when it gets supported) if ! command -v gcc &> /dev/null; then if command -v rpm-ostree &> /dev/null; then echo "Installing \"gcc\" package, which is necessary for Brew to function" rpm-ostree install gcc else echo "ERROR: \"gcc\" package could not be found" echo " Brew depends on \"gcc\" in order to function" echo " Please include \"gcc\" in the list of packages to install with the system package manager" exit 1 fi fi # Module-specific directories and paths MODULE_DIRECTORY="${MODULE_DIRECTORY:-/tmp/modules}" # Configuration values AUTO_UPDATE=$(echo "${1}" | yq -I=0 ".auto-update") if [[ -z "${AUTO_UPDATE}" || "${AUTO_UPDATE}" == "null" ]]; then AUTO_UPDATE=true fi UPDATE_INTERVAL=$(echo "${1}" | yq -I=0 ".update-interval") if [[ -z "${UPDATE_INTERVAL}" || "${UPDATE_INTERVAL}" == "null" ]]; then UPDATE_INTERVAL="6h" fi UPDATE_WAIT_AFTER_BOOT=$(echo "${1}" | yq -I=0 ".update-wait-after-boot") if [[ -z "${UPDATE_WAIT_AFTER_BOOT}" || "${UPDATE_WAIT_AFTER_BOOT}" == "null" ]]; then UPDATE_WAIT_AFTER_BOOT="10min" fi AUTO_UPGRADE=$(echo "${1}" | yq -I=0 ".auto-upgrade") if [[ -z "${AUTO_UPGRADE}" || "${AUTO_UPGRADE}" == "null" ]]; then AUTO_UPGRADE=true fi UPGRADE_INTERVAL=$(echo "$1" | yq -I=0 ".upgrade-interval") if [[ -z "${UPGRADE_INTERVAL}" || "${UPGRADE_INTERVAL}" == "null" ]]; then UPGRADE_INTERVAL="8h" fi UPGRADE_WAIT_AFTER_BOOT=$(echo "${1}" | yq -I=0 ".upgrade-wait-after-boot") if [[ -z "${UPGRADE_WAIT_AFTER_BOOT}" || "${UPGRADE_WAIT_AFTER_BOOT}" == "null" ]]; then UPGRADE_WAIT_AFTER_BOOT="30min" fi NOFILE_LIMITS=$(echo "${1}" | yq -I=0 ".nofile-limits") if [[ -z "${NOFILE_LIMITS}" || "${NOFILE_LIMITS}" == "null" ]]; then NOFILE_LIMITS=false fi BREW_ANALYTICS=$(echo "${1}" | yq -I=0 ".brew-analytics") if [[ -z "${BREW_ANALYTICS}" || "${BREW_ANALYTICS}" == "null" ]]; then BREW_ANALYTICS=true fi # Create necessary directories mkdir -p /var/home mkdir -p /var/roothome # Convince the installer that we are in CI touch /.dockerenv # Always install Brew echo "Downloading and installing Brew..." curl -Lo /tmp/brew-install https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh chmod +x /tmp/brew-install /tmp/brew-install # Move Brew installation and set ownership to default user (UID 1000) tar --zstd -cvf /usr/share/homebrew.tar.zst /home/linuxbrew/.linuxbrew cp -R /home/linuxbrew /usr/share/homebrew chown -R 1000:1000 /usr/share/homebrew # Write systemd service files dynamically echo "Writing brew-setup service" cat >/usr/lib/systemd/system/brew-setup.service </usr/lib/systemd/system/brew-update.service </usr/lib/systemd/system/brew-upgrade.service </usr/lib/systemd/system/brew-update.timer </usr/lib/systemd/system/brew-upgrade.timer < "/usr/etc/profile.d/brew.sh" fi # Copy shell configuration files echo "Copying Brew bash & fish shell completions" cp -r "${MODULE_DIRECTORY}"/brew/brew-fish-completions.fish /usr/share/fish/vendor_conf.d/brew-fish-completions.fish cp -r "${MODULE_DIRECTORY}"/brew/brew-bash-completions.sh /usr/etc/profile.d/brew-bash-completions.sh # Register path symlink # We do this via tmpfiles.d so that it is created by the live system. echo "Writing brew tmpfiles.d configuration" cat >/usr/lib/tmpfiles.d/homebrew.conf < "/usr/etc/environment" # touch fails for some reason, probably a bug with it fi CURRENT_ENVIRONMENT=$(cat "/usr/etc/environment") CURRENT_HOMEBREW_CONFIG=$(awk -F= '/HOMEBREW_NO_ANALYTICS/ {print $0}' "/usr/etc/environment") if [[ -n "${CURRENT_ENVIRONMENT}" ]]; then if [[ "${CURRENT_HOMEBREW_CONFIG}" == "HOMEBREW_NO_ANALYTICS=0" ]]; then echo "Disabling Brew analytics" sed -i 's/HOMEBREW_NO_ANALYTICS=0/HOMEBREW_NO_ANALYTICS=1/' "/usr/etc/environment" elif [[ -z "${CURRENT_HOMEBREW_CONFIG}" ]]; then echo "Disabling Brew analytics" echo "HOMEBREW_NO_ANALYTICS=1" >> "/usr/etc/environment" elif [[ "${CURRENT_HOMEBREW_CONFIG}" == "HOMEBREW_NO_ANALYTICS=1" ]]; then echo "Brew analytics are already disabled!" fi elif [[ -z "${CURRENT_ENVIRONMENT}" ]]; then echo "Disabling Brew analytics" echo "HOMEBREW_NO_ANALYTICS=1" > "/usr/etc/environment" fi fi echo "Brew setup completed"