Skip to content

First-run never completes: timezone.sh passes --exec as one quoted string, so "Update System" is re-notified on every login #306

Description

@mantisdotdev

What happened

I get a critical "Update System — Click to update the system." notification on
every single login, on a machine that is fully up to date. I ran the update,
rebooted, and got the same notification again.

It is not an update check. It is the first-run onboarding notification from
install/user/first-run/wifi.sh, replayed on every login because first-run never
gets marked complete.

omarchy-update-available correctly reports the system is up to date, at the same
time the notification claims otherwise:

$ omarchy-update-available
Omarchy is up to date          # exit 1
$ checkupdates --nocolor
                               # empty

The stored notification confirms which one it is:

$ cat ~/.local/state/omarchy/notifications/history/1788202735879-2.json
{"id":2,"app":"omarchy-action","summary":"Update System",
 "body":"Click to update the system.","urgency":2,
 "execArgv":"[\"omarchy-launch-floating-terminal-with-presentation\",\"omarchy-update\"]", ...}

Root cause

install/user/first-run/timezone.sh passes its click command to --exec as a
single quoted string:

omarchy-notification-send -u critical -g 󰥔 "Set your timezone" \
  "This machine is on $(current_timezone). Click to choose yours." \
  --exec "omarchy-launch-floating-terminal-with-presentation omarchy-cmd-tzupdate-enhanced"

Since bf2013e ("Make --exec take the command as rest-of-line words"),
omarchy-notification-send rejects that form:

$ bash /usr/share/omarchy/install/user/first-run/timezone.sh
--exec takes the command as separate words, not one quoted string.
Write:  --exec omarchy-launch-floating-terminal-with-presentation omarchy-cmd-tzupdate-enhanced
$ echo $?
1

bf2013e converted every other call site — welcome.sh, wifi.sh, the three
.hook files, omarchy-migrate-notify, and others — but timezone.sh was not in
that commit, and bf57d35 touched the file afterwards without catching it. It is
still unfixed on origin/quattro today.

That non-zero exit sets first_run_failed=1 in omarchy-provision-first-run, so
omarchy-done mark first-run-user is never reached and the whole sequence reruns
at every login:

[2026-08-30 22:23:18] Failed: prompt for the timezone (exit code: 1)
[2026-08-30 22:23:18] One or more first-run steps failed; first-run will retry next login
[2026-08-31 05:25:24] Failed: prompt for the timezone (exit code: 1)
[2026-08-31 05:25:24] One or more first-run steps failed; first-run will retry next login
[2026-08-31 18:58:55] Failed: prompt for the timezone (exit code: 1)
[2026-08-31 18:58:55] One or more first-run steps failed; first-run will retry next login
$ ls ~/.local/state/omarchy/done/
agent-setup-invitation  finalize-user  voxtype-install-invitation
# no first-run-user

wifi.sh then re-fires unconditionally — it never consults
omarchy-update-available — so the update prompt appears regardless of whether
anything is actually out of date. welcome.sh's "Learn Keybindings" toast is
replayed on every login for the same reason.

Two knock-on effects

  1. The timezone prompt never appears at all. This machine is still on UTC,
    which is exactly the case the script exists to catch, and the notification it
    would send dies on the argument error before reaching the user. So the bug
    also silently defeats the feature it lives in.
  2. First-run is not idempotent in practice. Every login re-runs hook installs,
    unit enables, GNOME theme, GTK paste and audio tuning. Those appear to be
    harmless to repeat, but they are running far more often than intended.

Steps to reproduce

  1. Install on an Apple Silicon Mac (fresh install, timezone left at UTC).
  2. Log in. Note the "Update System" toast.
  3. Run omarchy-update to completion, reboot.
  4. The "Update System" toast appears again, while omarchy-update-available
    reports "Omarchy is up to date".
  5. cat ~/.local/state/omarchy/first-run.log shows Failed: prompt for the timezone (exit code: 1) for every login.

Suggested fix

Drop the quotes so --exec takes rest-of-line words, matching every other call
site as of bf2013e:

  --exec omarchy-launch-floating-terminal-with-presentation omarchy-cmd-tzupdate-enhanced

Two things worth considering alongside it, both optional:

  • wifi.sh's notify_update could gate on omarchy-update-available so the
    prompt reflects real state even if first-run does replay.
  • A step whose only job is to invite the user could avoid failing the whole
    first-run batch, so one bad notification cannot wedge provisioning permanently.

Users already affected are stuck: the file ships broken, so no amount of updating
or rebooting clears it. omarchy-done mark first-run-user is the manual escape,
which suggests a migration may be worth pairing with the fix.

System

omarchy version   4.0.2rc2-1
kernel            7.1.6-1-1-ARCH
hardware          apple,j313 apple,t8103 (M1 MacBook Air)
timezone          UTC
pacman -Qkk omarchy → 1815 total files, 0 altered files

The package files are unmodified, so this is the shipped timezone.sh, not local
drift.


Filed by Claude Opus 5 via Claude Code.

Activity

  1. malik-na commented on Sep 10, 2026

    @malik-na
    Member

    Fixed via #377 (timezone first-run --exec). Closing as completed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions