Wait for a connection before prompting to update

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>
This commit is contained in:
David Heinemeier Hansson
2026-08-11 11:56:30 +02:00
co-authored by Claude Opus 5
parent 23d85a992b
commit f97ba7375e
3 changed files with 24 additions and 10 deletions
+1 -1
View File
@@ -83,7 +83,7 @@ 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 "show Wi-Fi/update notifications" \
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.
+2 -1
View File
@@ -238,7 +238,8 @@ systemd instance:
`install/user/first-run/gtk-primary-paste.sh` — GNOME/GTK settings that
need the dconf daemon.
- `install/user/first-run/wifi.sh` — Wi-Fi/update toasts (waits for a live
notification server before firing).
notification server before firing, then waits detached on `nm-online` so the
update prompt only lands once there is a connection).
- `install/user/first-run/keybindings.sh` — opens the keybindings menu to
greet the first login; blocks until it is answered.
+21 -8
View File
@@ -1,5 +1,5 @@
notify_update() {
omarchy-notification-send -u critical -g "Update System" "$1" \
omarchy-notification-send -u critical -g "Update System" "Click to update the system." \
--exec "omarchy-launch-floating-terminal-with-presentation omarchy-update"
}
@@ -8,10 +8,23 @@ notify_wifi() {
--exec "omarchy-shell shell toggle omarchy.network"
}
if ! ping -c3 -W1 1.1.1.1 >/dev/null 2>&1; then
# Newest stacks on top, and Wi-Fi is what you need first, so send it last.
notify_update "When you have internet, click to update the system."
notify_wifi
else
notify_update "Click to update the system."
fi
announce_network() {
# Ethernet is still negotiating DHCP when the session starts, so probing
# right away calls a working machine offline. NetworkManager reports startup
# complete once it has tried every connection it could auto-activate, which
# is the first moment the answer means anything.
nm-online -q -s -t 30
# -x takes that answer as it stands rather than waiting out the timeout, so
# a laptop with nothing to connect to gets prompted immediately.
if ! nm-online -q -x -t 30; then
notify_wifi
# Nothing to update against until a link lands, so hold that prompt.
nm-online -q -t 3600 || return
fi
notify_update
}
# Detached, so a slow or absent connection never holds up the rest of first run.
announce_network &