Omarchy vs omarchy-settings: Understanding the Two-Package Architecture
Omarchy splits into omarchy (runtime binaries and UI) and omarchy-settings (static configuration files) to enable clean bootstrapping, independent upgrades, and parallel stable/dev channel packaging.
Omarchy is a desktop environment for Arch Linux built around Hyprland and Quickshell. Unlike monolithic distributions, it uses a deliberate two-package architecture that separates executable code from system defaults. Understanding this split is essential for installation, troubleshooting, and contributing to the project.
What the omarchy Package Contains
The omarchy package provides the runtime layer — everything that executes when you run an Omarchy session.
This includes:
bin/omarchy*scripts — core command-line tools likeomarchy-upgrade-to-quattrothat manage the environmentshell/QML files — the Quickshell-based user interface components- Runtime libraries and helper scripts — code that responds to
omarchy …invocations
Without this package, no Omarchy processes can start. It is the package you interact with directly after installation.
What the omarchy-settings Package Contains
The omarchy-settings package provides the static configuration layer — files that must exist before the runtime can function.
This includes:
- Skeleton files under
/etc/skel/— default user configurations copied when new accounts are created - System-wide templates — files like
/etc/fastfetch/config.jsonc, Snapper configurations, and systemd unit files - Shared assets — icons, fonts, and other resources installed to
/usr/share/omarchy/ - ALPM hooks — triggers that run automatically when
omarchy-settingsis upgraded
Every upgrade of omarchy-settings resynchronizes these files, ensuring the runtime always finds expected defaults.
Why Two Packages Instead of One
The separation serves three architectural goals enforced throughout the Omarchy source code.
1. Bootstrapping Without Race Conditions
The runtime depends on paths like /etc/skel/.config/omarchy/ existing before first launch. By packaging defaults separately, the installer lays down required files before any Omarchy binary executes. This eliminates "missing configuration" errors during initial setup.
2. Independent Upgrade Paths
Configuration fixes and new templates ship faster than core code changes. When omarchy-settings upgrades, its PKGBUILD refreshes system defaults without touching binaries. The runtime can then pick up new defaults on next start without requiring a full package reinstall.
3. Symmetric Channel Packaging
Both stable and development channels mirror this split. The channel selection logic in bin/omarchy-channel-set (lines 51-66) explicitly pairs packages:
| Channel | Runtime Package | Settings Package |
|---|---|---|
| Stable | omarchy |
omarchy-settings |
| Development | omarchy-dev |
omarchy-settings-dev |
This symmetry allows clean switching between channels without configuration drift.
Installing and Verifying the Packages
Install Stable Omarchy
# Set channel to stable (default)
omarchy channel set stable
# Install both required packages
sudo pacman -S --needed omarchy omarchy-settings
Install Development (Edge) Omarchy
# Switch to edge channel
omarchy channel set dev
# Install development pair
sudo pacman -S --needed omarchy-dev omarchy-settings-dev
Verify Current Installation
omarchy channel current
Output shows the active pair:
"omarchy-dev omarchy-settings-dev"— edge channel active"omarchy omarchy-settings"— stable channel active
Resynchronize User Defaults
After omarchy-settings upgrades, apply latest skeletons to your user account:
omarchy reinstall-configs
This helper reapplies files from /etc/skel/ without overwriting customizations.
Key Source Files Demonstrating the Split
| File | Purpose |
|---|---|
docs/file-layout.md |
Documents how static defaults ship via omarchy-settings |
bin/omarchy-channel-set |
Defines package pairs per channel at lines 51-66 |
bin/omarchy-upgrade-to-quattro |
Selects between omarchy-settings and omarchy-settings-dev at lines 716-733 |
test/shell.d/config-test.sh |
Unit tests verifying both packages install together at lines 120-123 |
default/libalpm/hooks/90-omarchy-hyprland-reload-resume.hook |
ALPM hook triggered by omarchy-settings updates at lines 5-6 |
These files demonstrate how deeply the two-package architecture is embedded in Omarchy's tooling and testing infrastructure.
Summary
omarchy= runtime binaries, Quickshell UI, and executable tools you invoke directlyomarchy-settings= static defaults, skeleton files, and system templates required before first run- Both required — the runtime fails without the settings package's provided paths
- Channel symmetry — stable and dev channels each use matched pairs (
omarchy/omarchy-settingsoromarchy-dev/omarchy-settings-dev) - Independent upgrades — configuration refreshes without binary changes, and vice versa
Frequently Asked Questions
Can I run Omarchy with only the omarchy package installed?
No. The runtime expects files like /etc/skel/.config/omarchy/ and system templates to exist at startup. Without omarchy-settings, these paths are missing and the environment fails to initialize. The test suite in test/shell.d/config-test.sh explicitly validates that both packages are present.
What happens when I upgrade omarchy-settings?
ALPM hooks in default/libalpm/hooks/ trigger automatically, resynchronizing system files and optionally reloading components. Your user configuration remains untouched unless you manually run omarchy reinstall-configs to pull updated skeleton defaults.
Why does the development channel use different package names instead of a version flag?
The -dev suffix (omarchy-dev, omarchy-settings-dev) allows stable and development versions to coexist in package management without conflicts. The omarchy-channel-set script (lines 51-66) encodes these pairs explicitly, enabling clean channel switching via omarchy channel set dev or omarchy channel set stable.
Where do my personal configurations live if system defaults come from omarchy-settings?
System defaults populate /etc/skel/ and /usr/share/omarchy/. Your personal configurations override these in $HOME/.config/omarchy/ and related paths. The omarchy reinstall-configs command selectively merges new skeleton changes without destroying your customizations.
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 →