diff --git a/scripts/transform.sh b/scripts/transform.sh index 355b3d2..5f0ff67 100755 --- a/scripts/transform.sh +++ b/scripts/transform.sh @@ -6,6 +6,13 @@ set -euo pipefail source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/lib.sh" +# --- Parse arguments --- + +DRY_RUN=false +if [[ "${1:-}" == "--dry-run" ]]; then + DRY_RUN=true +fi + # ============================================================ # Phase 1: Prerequisites & Detection # ============================================================ @@ -38,9 +45,15 @@ fi # ============================================================ echo "" -log "============================================" -log " Moonarch Transform — Pre-flight Summary" -log "============================================" +if $DRY_RUN; then + log "============================================" + log " Moonarch Transform — Dry Run" + log "============================================" +else + log "============================================" + log " Moonarch Transform — Pre-flight Summary" + log "============================================" +fi echo "" log "Wayland session: detected" @@ -65,10 +78,62 @@ log " 3. Disable conflicting DMs, enable greetd" log " 4. Overwrite ALL system configs (/etc/xdg/, /etc/greetd/, ...)" log " 5. Overwrite ALL user configs (~/.config/)" log " 6. Configure zsh, GTK themes, firewall, services" +echo "" + +# Show package diff +MISSING_OFFICIAL=$(comm -23 <(read_packages "$OFFICIAL_PACKAGES" | sort) <(pacman -Qqe | sort) 2>/dev/null || true) +MISSING_AUR="" +if [[ -f "$AUR_PACKAGES" ]]; then + MISSING_AUR=$(comm -23 <(read_packages "$AUR_PACKAGES" | sort) <(pacman -Qqe | sort) 2>/dev/null || true) +fi + +if [[ -n "$MISSING_OFFICIAL" ]] || [[ -n "$MISSING_AUR" ]]; then + log "Packages to install:" + if [[ -n "$MISSING_OFFICIAL" ]]; then + OFFICIAL_COUNT=$(echo "$MISSING_OFFICIAL" | wc -l) + log " Official ($OFFICIAL_COUNT):" + echo "$MISSING_OFFICIAL" | sed 's/^/ /' + fi + if [[ -n "$MISSING_AUR" ]]; then + AUR_COUNT=$(echo "$MISSING_AUR" | wc -l) + log " AUR ($AUR_COUNT):" + echo "$MISSING_AUR" | sed 's/^/ /' + fi +else + log "Packages: all already installed" +fi + +# Show config diff summary +CHANGED_XDG=0 +CHANGED_BIN=0 +for src_dir in "$DEFAULTS_DIR/xdg/"*/; do + app_name="$(basename "$src_dir")" + dest_dir="$HOME/.config/$app_name" + if [[ -d "$dest_dir" ]]; then + if ! diff -rq "$src_dir" "$dest_dir" &>/dev/null 2>&1; then + ((CHANGED_XDG++)) || true + fi + else + ((CHANGED_XDG++)) || true + fi +done +for bin in "$DEFAULTS_DIR/bin/moonarch-"*; do + name=$(basename "$bin") + if ! cmp -s "$bin" "/usr/local/bin/$name" 2>/dev/null; then + ((CHANGED_BIN++)) || true + fi +done +log "Config changes: $CHANGED_XDG XDG app(s), $CHANGED_BIN helper script(s)" + echo "" err "This will REPLACE your current desktop configuration." echo "" +if $DRY_RUN; then + log "Dry run complete — no changes were made." + exit 0 +fi + if ! confirm "Proceed?"; then log "Transform cancelled." exit 0