#!/usr/bin/env bash # ssr-restore — restore brew packages, mackup data, macOS defaults. set -euo pipefail SSR_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" # shellcheck source=../lib/common.sh source "$SSR_ROOT/lib/common.sh" # shellcheck source=../lib/cloud.sh source "$SSR_ROOT/lib/cloud.sh" # shellcheck source=../lib/brew.sh source "$SSR_ROOT/lib/brew.sh" # shellcheck source=../lib/mackup.sh source "$SSR_ROOT/lib/mackup.sh" # shellcheck source=../lib/macos.sh source "$SSR_ROOT/lib/macos.sh" # shellcheck source=../lib/macos-prefs.sh source "$SSR_ROOT/lib/macos-prefs.sh" ssr::require_macos ssr::load_config usage() { cat </BACKUP/ - /Brewfile EOF } [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]] && { usage; exit 0; } ssr::log "ssr restore starting" ssr::cloud::ensure_available backup_dir="$(ssr::cloud::backup_dir)" mackup_dir="$(ssr::cloud::mackup_dir)" brewfile="${1:-$backup_dir/Brewfile}" [[ -f "$brewfile" ]] || ssr::die "Brewfile not found: $brewfile" ssr::log "Using Brewfile: $brewfile" ssr::confirm "Configure iCloud / cloud drive and proceed with restore?" 60 \ || ssr::die "Aborted by user" ssr::macos::disable_gatekeeper ssr::macos::install_rosetta ssr::brew::ensure_installed ssr::brew::update ssr::brew::restore "$brewfile" ssr::mackup::ensure_installed ssr::mackup::configure "$mackup_dir" ssr::mackup::restore ssr::macos::open_installed_casks ssr::macos::apply_defaults # Import the macOS pref snapshot AFTER the declarative defaults so the # snapshot is the last writer (wins for accepted domains). if [[ "${SSR_SNAPSHOT_MACOS_PREFS:-true}" == "true" ]]; then ssr::macos::prefs_import "$backup_dir" fi ssr::ok "ssr restore completed"