#!/bin/bash # omarchy:summary=Finish first-login setup for Omarchy. # omarchy:args=[--force] set -e usage() { cat <&2 usage >&2 exit 1 ;; esac done state_dir=~/.local/state/omarchy FIRST_RUN_DONE="first-run-user" if omarchy-done check "$FIRST_RUN_DONE" && (( force == 0 )); then echo "First-run already complete (rerun with --force to refresh)." exit 0 fi omarchy-finalize-user "${finalize_user_args[@]}" || true mkdir -p "$state_dir" FIRST_RUN_LOG="$state_dir/first-run.log" first_run_failed=0 log_first_run() { printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$*" >>"$FIRST_RUN_LOG" } notification_server_ready() { if omarchy-cmd-present gdbus; then gdbus call --session \ --dest org.freedesktop.Notifications \ --object-path /org/freedesktop/Notifications \ --method org.freedesktop.Notifications.GetServerInformation >/dev/null 2>&1 elif omarchy-cmd-present busctl; then busctl --user call \ org.freedesktop.Notifications \ /org/freedesktop/Notifications \ org.freedesktop.Notifications \ GetServerInformation >/dev/null 2>&1 else return 0 fi } wait_for_notifications() { omarchy-cmd-present omarchy-shell || return 0 for _ in {1..100}; do if omarchy-shell notifications ping >/dev/null 2>&1 && notification_server_ready; then return 0 fi sleep 0.1 done log_first_run "Timed out waiting for notification service; continuing" return 0 } run_first_run_step() { local name="$1" shift log_first_run "Starting: $name" if "$@"; then log_first_run "Completed: $name" else local status=$? first_run_failed=1 log_first_run "Failed: $name (exit code: $status)" fi } wait_for_notifications run_first_run_step "enable migration notification watcher" \ systemctl --user enable --now omarchy-update-user-notify.path run_first_run_step "notify about pending migrations" omarchy-migrate-notify run_first_run_step "install Voxtype post-update hook" \ omarchy-hook-install post-update "$OMARCHY_PATH/install/user/first-run/install-voxtype.hook" run_first_run_step "enable user systemd units" \ bash "$OMARCHY_PATH/install/user/first-run/enable-user-units.sh" run_first_run_step "set GNOME theme" \ bash "$OMARCHY_PATH/install/user/first-run/gnome-theme.sh" run_first_run_step "set GTK primary paste" \ bash "$OMARCHY_PATH/install/user/first-run/gtk-primary-paste.sh" wait_for_notifications run_first_run_step "show welcome notification" \ bash "$OMARCHY_PATH/install/user/first-run/welcome.sh" # The first-run notification scripts register action callbacks in background # notify-send processes. Give the notification server a tick to ingest the # welcome toast before queueing the Wi-Fi/update toasts. sleep 0.3 run_first_run_step "show Wi-Fi/update notifications" \ bash "$OMARCHY_PATH/install/user/first-run/wifi.sh" if (( first_run_failed == 0 )); then omarchy-done mark "$FIRST_RUN_DONE" else log_first_run "One or more first-run steps failed; first-run will retry next login" fi