Omarchy File Organization Structure: Complete Directory Layout Guide
Omarchy organizes its codebase into a clear, purpose-driven hierarchy that separates executable CLI scripts in bin/, default configuration assets in default/, documentation in docs/, and test suites in test/, with runtime paths controlled via the $OMARCHY_PATH environment variable.
The basecamp/omarchy repository follows a strict directory convention designed to keep runtime code separate from source-only documentation and user-specific configurations. Understanding this file organization structure is essential for contributors modifying the CLI dispatcher or users customizing their desktop environment through Omarchy’s configuration system.
Top-Level Directory Overview
The repository root—typically checked out as the quattro branch—contains seven primary directories and assorted metadata files. Each top-level folder serves a distinct architectural purpose:
bin/– Executable bash wrappers that form the Omarchy CLIdefault/– Default configuration templates, themes, fonts, and menu definitionsdocs/– Human-readable Markdown documentation for developersagents/– Contributor skill documents and meta-guidestest/– Automated CLI and shell integration testsdefault/agents/– Runtime agents invoked by the Omarchy daemon
Root-level files include AGENTS.md, version, and branding assets (logo.*, icon.*), which provide repository metadata but are not installed on target systems.
The bin/ Directory: CLI Command Wrappers
All user-facing Omarchy commands live in the bin/ directory as individual bash scripts following the omarchy-* naming convention. Each script acts as a thin dispatcher that invokes the core runtime or helper utilities.
For example, bin/omarchy-toggle-touchpad handles touchpad state toggling, while omarchy-refresh-config manages configuration deployment. These files are shipped executable and remain in $OMARCHY_PATH/bin after installation.
The install script automatically adds $OMARCHY_PATH/bin to the user’s $PATH, enabling direct command invocation:
# Repository location
$OMARCHY_PATH/bin/omarchy-toggle-touchpad
# After installation (available via PATH)
omarchy toggle-touchpad
The default/ Directory: Configuration Assets and Themes
The default/ directory contains factory settings that Omarchy copies into the user’s home directory on first run or when explicitly refreshed. This folder is organized into subdirectories for specific configuration domains:
- `default/config/`` – Window manager configs, application settings, and shell initialization files
- **
default/themes/``** – Color schemes and appearance packages (symlinked to$OMARCHY_PATH/themes/`) - `default/omarchy/`` – Menu definitions and runtime metadata
- `default/fonts/`` – Typography assets for UI rendering
- `default/agents/`` – Executable agents the Omarchy daemon invokes for menu generation and notifications
The helper omarchy-refresh-config uses $OMARCHY_PATH/config (a symlink pointing to default/config/) as its source. When refreshing configurations, it copies files to ~/.config/ while preserving existing user files with backups:
# Refresh Hyprland compositor configuration
omarchy-refresh-config hypr/hyprland.lua
Themes reside under $OMARCHY_PATH/themes/ and are managed through dedicated CLI commands:
# List available themes
omarchy-theme-list
# Activate solarized-dark theme
omarchy-theme-set solarized-dark
Documentation and Agents
The **docs/``** folder contains Markdown files explaining Omarchy’s architecture, including [docs/file-layout.md](https://github.com/basecamp/omarchy/blob/main/docs/file-layout.md), [docs/menu.md](https://github.com/basecamp/omarchy/blob/main/docs/menu.md), and [docs/theming.md`](https://github.com/basecamp/omarchy/blob/main/docs/theming.md). These files remain repository-only assets and are not installed on target systems.
The **agents/``** directory holds contributor-facing documentation under agents/skills/, such as [agents/skills/command-metadata.md](https://github.com/basecamp/omarchy/blob/main/agents/skills/command-metadata.md), which describes how to add new omarchy-*commands. Unlikedefault/agents/`, these documents are meta-guides for development and are excluded from runtime payloads.
Testing Infrastructure
Quality assurance lives in the `test/`` directory, separated by test type:
test/all– Aggregates and executes the complete test suite (CLI + shell tests)test/cli– Command routing and argument parsing validationtest/shell– Shell integration and environment setup verification
These files remain in the repository and execute locally via:
./test/all
No graphical acceptance tests are included in this directory; the suite focuses exclusively on CLI behavior and shell integration.
Installation and Runtime Paths
Omarchy’s installation flow creates a clear separation between repository files and user configurations:
- Repository checkout – The quattro branch checkout directory becomes
$OMARCHY_PATH - PATH modification –
$OMARCHY_PATH/binis added to the user’s$PATHenvironment variable - Configuration deployment – Default files copy from
$OMARCHY_PATH/default/config/to~/.config/only when explicitly refreshed or during initial setup - Theme activation – Active themes are symlinked from
$OMARCHY_PATH/themes/into the user’s configuration tree (e.g.,~/.config/qtile/or~/.config/alacritty/)
This architecture allows users to update Omarchy by pulling the latest quattro commit and re-running refresh commands without overwriting personal customizations.
Summary
- Executable commands reside in
bin/asomarchy-*bash scripts and become available through$OMARCHY_PATH/binin the user PATH. - Default configurations live in
default/config/, copied to~/.config/via theomarchy-refresh-configutility. - Themes and fonts are stored in
default/themes/anddefault/fonts/, managed byomarchy-theme-listandomarchy-theme-set. - Documentation in
docs/and contributor guides inagents/remain repository-only and are never installed on target systems. - Test suites in
test/validate CLI routing and shell integration but stay confined to the source repository. - Runtime agents differ from contributor documentation:
default/agents/contains executable code, whileagents/contains instructional Markdown.
Frequently Asked Questions
Where are Omarchy configuration files installed on my system?
User-specific configurations are installed in your home directory under ~/.config/, populated by copying files from $OMARCHY_PATH/default/config/ when you run omarchy-refresh-config <relative-path>. The system preserves existing files by creating backups before overwriting, ensuring your customizations remain safe during updates.
How do I add the Omarchy CLI commands to my PATH?
The Omarchy install script automatically appends $OMARCHY_PATH/bin to your shell’s PATH variable, where $OMARCHY_PATH represents the root directory of your repository checkout. Once installed, you can execute any omarchy-* script directly by name, such as omarchy toggle-touchpad or omarchy theme-set solarized-dark.
What is the difference between the agents/ and default/agents/ directories?
The agents/ directory contains contributor documentation and skill guides (like agents/skills/command-metadata.md) that explain how to extend Omarchy; these are instructional files excluded from runtime. The default/agents/ directory contains executable scripts that the Omarchy daemon invokes during operation, such as menu generators and notification helpers, and these are actively loaded from $OMARCHY_PATH/default/agents at runtime.
How do I update Omarchy without losing my personal configurations?
Update by pulling the latest commit from the quattro branch into your $OMARCHY_PATH directory, then selectively refresh only the configuration files you want to update using omarchy-refresh-config. Because Omarchy separates default templates in default/ from live configurations in ~/.config/, your personal settings remain untouched unless you explicitly overwrite them with the refresh command.
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 →