"Something went wrong during the update!" on a migration
An Omarchy migration failed and aborted the update. How to find the failing migration id, re-run omarchy-migrate safely, and skip one when it will never pass.
Usually nothing is broken. Re-run the migration step on its own with omarchy-migrate. Markers are only written after a migration exits zero, so finished ones are skipped and the failed one retries from the start. Read /usr/share/omarchy/migrations/<id>.sh to see what it wanted, fix that, then run omarchy update again to finish the steps the abort skipped.
Your update stopped part way and printed a red block ending in “Please review the output above carefully, correct the error, and retry the update.” A few lines above it there is a green Running migration (<number>) line. That number is the migration that failed. The failing script may have got part way through its own work, but the runner stops there and leaves every later migration untouched.
This page covers Omarchy 4.0.0 through 4.0.4, and notes where 3.x behaved differently.
The fix
-
Find the failing migration id. The whole update run is recorded, so read the log rather than scrolling the terminal.
grep -n "Running migration" /tmp/omarchy-update.log | tail -5The last id printed is the one that stopped.
/tmp/omarchy-update.logis overwritten by the next run and wiped on reboot, so read it before either. -
See what is still queued behind it.
omarchy-migrate --pendingIt prints one filename per pending migration. When nothing is pending it prints nothing and exits 1, so
omarchy-migrate --pending; echo $?returning1means you are caught up. The one exception is a pre-Quattro git checkout, where it exits 1 because it cannot find the migrations directory at all (see below). -
Re-run the migration step on its own. This is safe, and it is the normal recovery.
omarchy-migrateDo not use
sudo. The runner keeps its markers in~/.local/state/omarchy/migrations/and writes each one only after that migration exits zero, so a re-run skips everything already applied and retries the failed one from the start. -
If it fails again, read the migration. They are short shell scripts, and the file name is the only documentation you need to find it.
less /usr/share/omarchy/migrations/<id>.shMost failures are a precondition the script assumed. Close the browser it asks you to close, install the package it expects, or make the file it edits writable, then run
omarchy-migrateagain. -
Finish the update. The migration step sits in the middle of
omarchy update, so the abort also skipped the AUR packages, the mise update, the orphan prune and the log check.omarchy update -
Last resort, mark one migration done without running it.
touch ~/.local/state/omarchy/migrations/<id>.shOnly do this after reading the script and either applying its change by hand or confirming it does not apply to your machine. Omarchy 4 has no skip flag. On 3.x the runner asked
Migration <id> failed. Skip and continue?and recorded your answer under~/.local/state/omarchy/migrations/skipped/; that prompt was removed in 4.0.
Verify it worked
omarchy-migrate --pending; echo "exit=$?"
exit=1 with no output above it is the finished state. If you want a second check, the marker count should match the shipped migration count:
ls /usr/share/omarchy/migrations/*.sh | wc -l
ls ~/.local/state/omarchy/migrations/*.sh | wc -l
Then run omarchy update once more and let it reach the restart prompt. If you were getting a “Pending Omarchy Migrations” notification at login, it should not come back on the next login. That toast comes from omarchy-migrate-notify.service, which runs once per login and offers to open omarchy-migrate in a floating terminal.
Why it happens
Migrations are small shell scripts shipped inside the omarchy package at /usr/share/omarchy/migrations/. Each is named for a Unix timestamp, and they run in that order. Their job is to bring an existing machine in line with what a new release assumes: rewrite a config file, drop a retired package, move state to a new path. A fresh install marks them all done at provisioning time, so only upgrades run them.
The state is per user. Markers live in your home, which is why a second account on the same machine sees the whole list as pending and gets the login notification the first time it signs in.
omarchy update runs them in a fixed order: prune the package cache, take a Snapper snapshot, update the keyring, update system packages, then omarchy-migrate, then the post-update hook, AUR packages, mise, and orphan removal. Migrations run after the packages because they are written against the versions that were just installed. The cost of that placement is the one people hit: a migration failure aborts the whole update and everything after it never runs.
On Omarchy 4 the runner executes each migration under bash -euo pipefail and is itself under set -euo pipefail, so a single non-zero exit ends the loop. Issue #7078 is the clearest account of the blast radius: one migration that could not run left 28 more queued behind it, and the update ended with the same generic red block. Issue #7108 describes the same shape for a migration that installs a file from the omarchy-nvim package on a machine where that package was removed.
The individual causes reported against 4.0.x are varied rather than systemic:
- A shell change, not an Omarchy bug. Migration
1787515927failed on every Bash 5.3 machine that reached it, even with nothing to harden, because anEXITtrap ended on a false test and Bash 5.3 adopts the trap’s status as the script’s exit status, where 5.2 did not. Reported in #8832, diagnosed in #8833, fixed by PR #8835 and shipped in v4.0.2. - Stale state that looks live. Migration
1786643346decides a browser is open purely fromSingletonLockandSingletonSocketunder the profile directory. A Chromium-family browser that crashed or lost power leaves those behind, and because they sit under~/.configrather than/tmp, rebooting does not remove them. The migration then loops forever asking you to close a browser that is not running (#6866, #7019). The stuck profile can belong to a browser you rarely open: one report had the lock in a Brave profile last used two days earlier while Chromium was the browser being closed and reopened. Moving the staleSingleton*links out of the profile, with every Chromium-family browser genuinely closed, let the migration complete immediately. The fix in PR #7026 is still unmerged as of 4.0.4. - Running the update through
sudo. In #11257 the theme handover migration looked for per-user theme state under$HOME, whichsudohad set to/root, and aborted. That issue is still open and the migration is unchanged in the 4.0.4 tree. - A pre-Quattro git checkout.
omarchy-migratedefaultsOMARCHY_PATHto/usr/share/omarchy, which does not exist on a legacy self-updating checkout, so--pendingreports nothing while dozens are actually outstanding (#7078). See 3 to 4 Quattro.
If that did not work
If the run stops at “Waiting for pacman transaction to finish before running Omarchy migrations…”, another pacman process holds /var/lib/pacman/db.lck. The runner waits up to 15 minutes, then tells you migrations will retry at next login and exits cleanly. Let the other transaction finish rather than deleting the lock.
If you restored a Snapper snapshot at any point, treat your migration state as suspect. Markers live on the home subvolume and the changes migrations make live on the root subvolume, so a rollback rewinds the work and keeps the markers. Issue #9828 walks through one case where a boot-config migration was silently undone and never re-ran. There is no automatic detection for this; if you know which migration was reverted, delete its marker and run omarchy-migrate. See rollback with Snapper and Limine.
If the failing step was not a migration at all, the red block is the same for every part of the update. Check whether the line above it came from pacman instead: see errors occurred, no packages were upgraded and omarchy update fails or hangs.
If a config file you edited is now shadowed by a .pacnew, the migration may have succeeded while the live file stayed stale. That is covered in pacnew and pacsave files after update.
These are one-off script bugs rather than a fault in the runner, but only the Bash 5.3 one has shipped a fix. The stale-lock fix (PR #7026) and the sleep-lock no-op for legacy installs (PR #7130) were both still open pull requests when 4.0.4 shipped, so for those the workarounds above are what you have.
Related
Upstream threads about this error
337 issues on the Omarchy tracker match this error cluster. Newest fixes often appear as comments on the most-discussed threads.
| Issue | State | Comments | Opened |
|---|---|---|---|
| #4589 The chromium.desktop file became corrupted after the latest stable update | closed | 18 | 2026-02-12 |
| #427 Disable Internal (Laptop) Display on Lid Close | closed | 23 | 2025-07-31 |
| #1684 Slow launches on laptop | closed | 39 | 2025-09-15 |
| #2308 Chromium asks for keyring password on every startup | closed | 22 | 2025-10-08 |
| #5105 Update/reboot left keyring in invalid state, browser sessions and gh auth got cleared | open | 22 | 2026-03-23 |
| #2546 Walker and Elephant missing after system upgrade | closed | 30 | 2025-10-19 |
| #4599 chromium immediate crash after Omarchy 3.3.3 hotfix | closed | 20 | 2026-02-13 |
| #2635 Omarchy 3.1 No Signal to Monitors When Waking from Sleep | open | 18 | 2025-10-20 |
| #2543 Walker and terminal unavailable, 'Error Command not found: "--working-directory"' | closed | 18 | 2025-10-19 |
| #2638 Problem with Walker and Elephant after update | closed | 26 | 2025-10-20 |
Accepted answers upstream
- Quattro lock screen: support FIDO2/YubiKey unlock · answered by wmauz677
- "Error command not found xdg-terminal-exec " After updating omarchy to v3.1.5 when opening any TUI · answered by ryanrhughes
- Proposal: give Omarchy dotfiles automatic history, easy restore, and optional sync with mise · answered by shawnyeager
- SUPER + RETURN not working due to misconfiguration · answered by ryanrhughes
Questions people ask
- Is it safe to run omarchy-migrate again?
- Yes. Every migration has a marker file under ~/.local/state/omarchy/migrations/, and the runner writes that marker only after the script exits zero. Re-running skips everything already applied and retries only what is still pending.
- Where do I see which migrations are still pending?
- Run omarchy-migrate --pending. It prints one filename per pending migration and exits 0. When nothing is pending it prints nothing and exits 1, which is the clean state.
- Can I skip a migration that will never pass?
- On Omarchy 4 there is no skip flag. Create the marker by hand with touch ~/.local/state/omarchy/migrations/<id>.sh. Read the script first, because you are promising Omarchy that its change is already in place. On 3.x the runner asked you instead.
- Should I run the update with sudo?
- No. Run omarchy update as your normal user and let it ask for sudo where it needs it. Migrations read per-user state under your home, and in issue #11257 a sudo run put HOME at /root so the theme migration could not find the user's state and aborted.
Sources and credit
Fixes on this page were worked out by miltonio94 (Traced the Bash 5.3 EXIT trap change that made a successful migration report failure), ryanrhughes (Fixed the Bash 5.3 migration abort and documented that markers are written only after success), rfmyrick (Identified the stale Chromium SingletonLock symlinks that trap the browser migration in a loop), DiegoMirner (Showed that one failing migration strands every migration queued behind it). Text here is our own paraphrase; follow the links for the original threads.
- issueIssue #8832: Migration 1787515927 failed · neheb · 2026-08-28
- issueIssue #8833: omarchy-theme-set-browser-policy exits 1 on success under Bash 5.3, breaking omarchy update at migration 1787515927 · miltonio94 · 2026-08-28
- prPR #8835: Fix migration 1787515927 failing on Bash 5.3 · ryanrhughes · 2026-08-28
- prPR #7026: Prevent migration (1786643346) from hanging on stale browser lock files · joshuafouch · 2026-08-15
- prPR #7130: Skip the sleep lock repair when the unit is not installed · omarchybot · 2026-08-16
- issueIssue #7108: Migration 1781587663 aborts the whole migration queue when omarchy-nvim is not installed · omarchybot · 2026-08-16
- issueIssue #7078: omarchy-migrate mishandles legacy (git-checkout) installs: wrong OMARCHY_PATH default hides pending migrations, and migration 1785608166 aborts the whole queue · DiegoMirner · 2026-08-16
- issueIssue #6866: Migration 1786643346 loops after reboot on stale Chromium SingletonLock · rfmyrick · 2026-08-14
- issueIssue #7019: Cannot run Migration (1786643346) because an "browser window is open" according to the migration. · joshuafouch · 2026-08-15
- issueIssue #11257: omarchy update aborts on the final migration (1788619462, "Hand Hermes Desktop the Omarchy theme as a skin") · SavagePossum · 2026-09-11
- issueIssue #9828: Snapper rollbacks silently un-apply Omarchy migrations · v-h-z · 2026-09-02
- releaseOmarchy v4.0.2 release notes · 2026-08-31
- manualOmarchy Manual: Updates