How to Trigger Omarchy Migrations: Complete Command Reference and Automation Guide
Omarchy migrations are triggered by running the omarchy-migrate command, which executes pending shell scripts from the migrations/ directory and records completion state per-user under ~/.local/state/omarchy/migrations/.
Understanding how to trigger Omarchy migrations is essential for keeping your Arch Linux-based system up to date. Migrations are small shell scripts that handle per-user upgrades and system repairs after package updates, making them a core part of the Omarchy maintenance workflow according to the omacom/omarchy source code.
What Omarchy Migrations Are and Where They Live
Migration scripts in Omarchy serve as automated, idempotent upgrade procedures. Each script lives in the repository's migrations/*.sh directory and performs specific transition tasks when the system or user configuration needs to change.
State tracking happens per-user. When a migration completes successfully, Omarchy creates a marker file under ~/.local/state/omarchy/migrations/<script-name>. This prevents re-execution and ensures each migration runs exactly once per user account.
The omarchy-migrate Command: Core Trigger Mechanism
The primary way to trigger Omarchy migrations is through the omarchy-migrate script located at bin/omarchy-migrate. This thin wrapper handles discovery, locking, and execution with strict error handling.
What the Command Does
- Waits for pacman transactions – Ensures no package manager conflicts
- Scans
migrations/directory – Identifies scripts without completion markers - Executes with
bash -euo pipefail– Strict mode: exits on any error - Records success or failure – Creates state marker regardless of outcome
Running Migrations Manually
To trigger all pending migrations immediately:
omarchy-migrate
This executes every migration that lacks a completion marker in your user state directory, stopping at the first failure.
Checking Pending Migrations Without Running Them
Use the diagnostic flag to preview what's queued:
omarchy-migrate --pending
Exit status 0 means migrations are waiting; non-zero means you're fully up to date. This flag powers automation tools and notification systems.
Automatic Trigger Points: When Migrations Run Without Manual Action
Omarchy provides three built-in trigger mechanisms beyond manual invocation.
After Package Updates via omarchy update
The standard omarchy update command automatically triggers migrations once Pacman finishes. The sequence is: update packages, then run omarchy-migrate. No separate step required.
# This triggers migrations automatically after pacman completes
omarchy update
Post-Manual Pacman Upgrade
If you run pacman directly, trigger migrations afterward:
sudo pacman -Syu # standard Arch system update
omarchy-migrate # apply any new migrations the update introduced
Desktop Notification Service
A per-user systemd unit handles GUI environments. The omarchy-migrate-notify.service (defined at default/systemd/user/omarchy-migrate-notify.service) runs at login and:
- Monitors for pending migrations using
omarchy-migrate --pending - Displays a clickable desktop notification when work is needed
- Launches
omarchy-migratewhen the user clicks the notification
No configuration required—this provides zero-friction migration triggering for desktop users.
Migration Script Structure and Requirements
Understanding script anatomy helps when debugging or writing custom migrations.
Standard Migration Template
#!/usr/bin/env bash
set -euo pipefail
# Migration work here
# -e: exit on error
# -u: treat unset variables as errors
# -o pipefail: pipeline fails if any command fails
# Create directories, update configs, etc.
mkdir -p ~/.config/omarchy/custom
# Exit 0 marks completion (success or handled failure)
Privilege Handling
Migrations run as the current user. For tasks requiring root access, delegate to helper scripts that request administrator rights through standard mechanisms. The migration marks complete regardless of privilege-helper success to avoid infinite prompting loops.
Migration State and Idempotency
The completion tracking system enforces single execution per user.
State Directory Layout
~/.local/state/omarchy/migrations/
├── 001-fix-paths.sh # marker file exists = completed
├── 002-update-themes.sh # missing = pending
└── 003-new-defaults.sh # missing = pending
Idempotency Guarantees
- Script absence from state directory → eligible for execution
- Script presence in state directory → skipped permanently
- Failed scripts still create markers → no retry without manual intervention
To re-run a migration, manually remove its marker file from the state directory.
Troubleshooting Migration Triggers
Migrations Not Running Automatically
- Verify the notification service is enabled:
systemctl --user status omarchy-migrate-notify.service - Check for pending migrations manually:
omarchy-migrate --pending - Review the update process documentation at
docs/update-process.md
Migration Failures Abort the Queue
When one migration fails, subsequent migrations do not run. Fix the failing script or temporarily bypass it by creating its marker file manually (not recommended for production systems).
State Directory Permissions
Ensure ~/.local/state/omarchy/ is owned by your user. Migration recording will fail silently if the state directory is unwritable.
Summary
- Primary trigger command:
omarchy-migrateexecutes pending migration scripts frommigrations/*.sh - Automatic triggers:
omarchy updateand systemd notification service (omarchy-migrate-notify.service) - State tracking: Per-user completion markers in
~/.local/state/omarchy/migrations/<script-name> - Diagnostic mode:
omarchy-migrate --pendinglists queued work without executing - Execution model:
bash -euo pipefailwith fail-fast behavior across the migration queue
Frequently Asked Questions
How do I know if I have pending Omarchy migrations?
Run omarchy-migrate --pending. Exit code 0 indicates pending migrations exist; non-zero means all migrations are complete. The notification service also visualizes this status graphically on desktop environments.
Can I run Omarchy migrations as root?
Migrations are designed for per-user execution and run as the calling user. Root execution would create state markers in root's home directory, not your user's. For privileged operations, migrations should call privilege-escalation helpers rather than running as root directly.
What happens if a migration fails?
The failing migration creates its completion marker to prevent retry loops, and omarchy-migrate exits immediately without running subsequent migrations. You must fix the underlying issue manually or remove the marker file to reattempt that specific migration.
How are migrations triggered after a manual pacman update?
The omarchy-migrate command does not automatically detect manual pacman -Syu runs. You must invoke it manually after package updates when using pacman directly instead of omarchy update, which handles the trigger automatically.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →