A ping at hyprland.start answers for a machine that has not finished coming up. Ethernet is still negotiating DHCP, so a working desktop was told to set up Wi-Fi and offered an update it could already have run. Ask NetworkManager instead: -s returns once it has tried every connection it could auto-activate, which is the first moment the answer means anything, and -x then takes that answer as it stands rather than waiting out a timeout that a laptop with nothing to connect to would spend in silence. The update prompt now waits for a connection rather than being phrased around not having one. There is nothing to update against until a link lands, and one usually does land later on the machines that started without it, so the prompt follows the connection whenever it arrives. That wait runs detached. It outlasts first run by design, and the keybindings menu is on screen behind it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
98 lines
2.6 KiB
Bash
Executable File
98 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# omarchy:summary=Finish first-login setup for Omarchy.
|
|
# omarchy:args=[--force]
|
|
# omarchy:hidden=true
|
|
|
|
set -e
|
|
|
|
usage() {
|
|
cat <<USAGE
|
|
Usage: omarchy-provision-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-provision-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"
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
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 "install fingerprint setup post-update hook" \
|
|
omarchy-hook-install post-update "$OMARCHY_PATH/install/user/first-run/setup-fingerprint.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"
|
|
run_first_run_step "apply speaker tuning" \
|
|
bash "$OMARCHY_PATH/install/user/first-run/audio-tuning.sh"
|
|
|
|
omarchy-notification-wait || log_first_run "Timed out waiting for notification service; continuing"
|
|
run_first_run_step "schedule Wi-Fi/update notifications" \
|
|
bash "$OMARCHY_PATH/install/user/first-run/wifi.sh"
|
|
# Waits for the menu to be answered, so it goes last and leaves the toasts
|
|
# waiting underneath.
|
|
run_first_run_step "show keybindings" \
|
|
bash "$OMARCHY_PATH/install/user/first-run/keybindings.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
|