#!/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 dnf5 &> /dev/null; then echo "Installing \"gcc\" package, which is necessary for Brew to function" dnf5 -y install gcc elif 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 # Check if zstd is installed & install it if it's not if ! command -v zstd &> /dev/null; then if command -v dnf5 &> /dev/null; then echo "Installing \"zstd\" package, which is necessary for Brew to function" dnf5 -y install zstd elif command -v rpm-ostree &> /dev/null; then echo "Installing \"zstd\" package, which is necessary for Brew to function" rpm-ostree install zstd else echo "ERROR: \"zstd\" package could not be found" echo " Brew's installer depends on \"zstd\" in order to function" echo " Please include \"zstd\" 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}" | jq -r 'try .["auto-update"]') if [[ -z "${AUTO_UPDATE}" || "${AUTO_UPDATE}" == "null" ]]; then AUTO_UPDATE=true fi UPDATE_INTERVAL=$(echo "${1}" | jq -r 'try .["update-interval"]') if [[ -z "${UPDATE_INTERVAL}" || "${UPDATE_INTERVAL}" == "null" ]]; then UPDATE_INTERVAL="6h" fi UPDATE_WAIT_AFTER_BOOT=$(echo "${1}" | jq -r 'try .["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}" | jq -r 'try .["auto-upgrade"]') if [[ -z "${AUTO_UPGRADE}" || "${AUTO_UPGRADE}" == "null" ]]; then AUTO_UPGRADE=true fi UPGRADE_INTERVAL=$(echo "$1" | jq -r 'try .["upgrade-interval"]') if [[ -z "${UPGRADE_INTERVAL}" || "${UPGRADE_INTERVAL}" == "null" ]]; then UPGRADE_INTERVAL="8h" fi UPGRADE_WAIT_AFTER_BOOT=$(echo "${1}" | jq -r 'try .["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}" | jq -r 'try .["nofile-limits"]') if [[ -z "${NOFILE_LIMITS}" || "${NOFILE_LIMITS}" == "null" ]]; then NOFILE_LIMITS=false fi BREW_ANALYTICS=$(echo "${1}" | jq -r 'try .["brew-analytics"]') if [[ -z "${BREW_ANALYTICS}" || "${BREW_ANALYTICS}" == "null" ]]; then BREW_ANALYTICS=true fi # Download Brew BREW_TARBALL_LINK="$(curl -fLs https://api.github.com/repos/ublue-os/packages/releases | jq -r '.[] | .assets[] | select(.name? | match("homebrew-x86_64.tar.zst")) | .browser_download_url' | head -n 1)" echo "Downloading Brew tarball..." curl -fLs --create-dirs "${BREW_TARBALL_LINK}" -o "/tmp/homebrew-tarball.tar.zst" echo "Downloaded Brew tarball" # Extract Brew tarball to /usr/share/homebrew/ and set ownership to default user (UID 1000) echo "Extracting Brew tarball to '/usr/share/homebrew/'" mkdir -p "/usr/share/homebrew/" tar -I zstd --preserve-permissions -xf "/tmp/homebrew-tarball.tar.zst" -C "/usr/share/homebrew/" echo "Setting '/usr/share/homebrew/' permissions to UID/GID 1000" 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 < /etc/profile.d/brew.sh </usr/lib/tmpfiles.d/homebrew.conf < "/etc/environment" # touch fails for some reason, probably a bug with it fi CURRENT_ENVIRONMENT=$(cat "/etc/environment") CURRENT_HOMEBREW_CONFIG=$(awk -F= '/HOMEBREW_NO_ANALYTICS/ {print $0}' "/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/' "/etc/environment" elif [[ -z "${CURRENT_HOMEBREW_CONFIG}" ]]; then echo "Disabling Brew analytics" echo "HOMEBREW_NO_ANALYTICS=1" >> "/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" > "/etc/environment" fi fi echo "Brew setup completed"