this repo has no description
at main 58 lines 1.8 kB view raw
1#!/usr/bin/env bash 2set -euo pipefail 3ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" 4source "$ROOT/lib.sh" 5 6need_cmd brew 7 8#────────────────────────────────────────────────────────────── 9# STATE: Cask applications to install (edit this list) 10#────────────────────────────────────────────────────────────── 11CASKS=( 12 orion 13 ghostty 14 raycast 15 obsidian 16 iina 17 zed 18 font-jetbrains-mono-nerd-font 19 protonvpn 20 proton-drive 21 proton-pass 22 libreoffice 23 logi-options+ 24) 25 26#────────────────────────────────────────────────────────────── 27# LOGIC: Idempotent convergence (strict mode) 28#────────────────────────────────────────────────────────────── 29 30log "Syncing casks (strict mode)" 31 32mapfile -t installed < <(brew list --cask 2>/dev/null || true) 33 34# Install missing 35for cask in "${CASKS[@]}"; do 36 if ! brew list --cask "$cask" &>/dev/null; then 37 log "Installing: $cask" 38 brew install --cask "$cask" 39 else 40 log "Already installed: $cask" 41 fi 42done 43 44# Remove extras (strict convergence) 45for pkg in "${installed[@]}"; do 46 [[ -z "$pkg" ]] && continue 47 keep=false 48 for cask in "${CASKS[@]}"; do 49 [[ "$cask" == "$pkg" ]] && keep=true && break 50 done 51 if [[ "$keep" == "false" ]]; then 52 log "Removing: $pkg (not in state)" 53 brew uninstall --cask "$pkg" || true 54 fi 55done 56 57brew cleanup 58log "Casks synced"