1#!/usr/bin/env bash
2set -euo pipefail
3
4ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5source "$ROOT/lib.sh"
6
7usage() {
8 cat <<EOF
9Usage: $(basename "$0") [module-names...]
10
11Examples:
12 ./run.sh # all modules
13 ./run.sh brew casks # specific modules
14 ./run.sh dock # single module
15
16Modules:
17EOF
18 for mod in "$ROOT/modules"/*.sh; do
19 echo " $(basename "$mod" .sh)"
20 done
21}
22
23if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
24 usage
25 exit 0
26fi
27
28# Collect modules to run
29if [[ $# -eq 0 ]]; then
30 # Run all modules in order
31 mapfile -t modules < <(find "$ROOT/modules" -name '*.sh' | sort)
32else
33 # Run specified modules only
34 modules=()
35 for name in "$@"; do
36 found=false
37 for module in "$ROOT/modules"/*"$name"*.sh; do
38 if [[ -f "$module" ]]; then
39 modules+=("$module")
40 found=true
41 fi
42 done
43 if [[ "$found" == "false" ]]; then
44 warn "Module not found: $name"
45 exit 1
46 fi
47 done
48fi
49
50# Execute modules
51log "Starting macOS setup"
52for module in "${modules[@]}"; do
53 log "━━━ Running: $(basename "$module" .sh) ━━━"
54 "$module"
55 echo
56done
57
58log "Setup complete!"