Add a first-run notification, alongside the keybindings/Wi-Fi toasts, that invites anyone with a fingerprint sensor to enable it. Clicking launches omarchy-setup-security-fingerprint in a floating terminal. Detection lives in a new omarchy-hw-fingerprint helper that reads sysfs (device product descriptor plus a fingerprint-vendor allowlist), so it works before fprintd/usbutils are installed and without nagging machines that have no reader. The setup script reuses the same helper as an early gate, bailing before installing any packages when no reader is found (replacing the old post-install fprintd-list probe). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
135 lines
3.5 KiB
Bash
Executable File
135 lines
3.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# omarchy:summary=Finish first-login setup for Omarchy.
|
|
# omarchy:args=[--force]
|
|
|
|
set -e
|
|
|
|
usage() {
|
|
cat <<USAGE
|
|
Usage: omarchy-first-run [--force]
|
|
|
|
Run first-login user setup and notification hooks. By default this only runs
|
|
once per user. Use --force to rerun the full sequence and refresh user setup.
|
|
USAGE
|
|
}
|
|
|
|
force=0
|
|
finalize_user_args=()
|
|
while (($#)); do
|
|
case "$1" in
|
|
--force)
|
|
force=1
|
|
finalize_user_args+=(--force)
|
|
shift
|
|
;;
|
|
-h|--help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1" >&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"
|
|
sleep 0.3
|
|
run_first_run_step "invite fingerprint setup" \
|
|
bash "$OMARCHY_PATH/install/user/first-run/fingerprint.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
|