Omarchy Shell Theme Tokens: Complete Configuration Guide
The Omarchy shell exposes a comprehensive design token system through shell/Commons/Style.qml and shell/Commons/Color.qml that allows deep customization of colors, spacing, typography, and component states via TOML configuration files.
The Omarchy shell from basecamp/omarchy implements a token-driven architecture that separates visual design from implementation logic. These Omarchy shell theme tokens are loaded at startup through Color.loadColors and Style.applyShellValues, and can be customized either within a theme's shell.toml or overridden globally in ~/.config/omarchy/shell.toml.
State Color and Appearance Tokens
Visual feedback for interactive states is controlled through specific color and alpha tokens defined in shell/Commons/Style.qml. These define how components behave during user interaction.
According to the source code in Style.qml lines 70-76, the following state color tokens are available:
normal-color— Default component statehover-cursor-color— Mouse hover indicatorsselected-color— Highlighted selection statespressed-color— Active press feedbackfocus-color— Keyboard focus ringsselection-color— Text or item selection highlights
Border widths for these states are controlled separately in lines 77-81 through state border-width tokens: normal-border-width, hover-cursor-border-width, selected-border-width, and focus-border-width.
Transparency levels use state alpha tokens (lines 82-92) for both fill and border properties:
- Fill alphas:
normal-fill-alpha,hover-cursor-fill-alpha,selected-fill-alpha,pressed-fill-alpha,focus-fill-alpha,selection-fill-alpha - Border alphas:
normal-border-alpha,hover-cursor-border-alpha,selected-border-alpha,focus-border-alpha
Layout and Spacing Tokens
The shell uses a consistent spacing scale defined in Style.qml lines 31-45. These spacing tokens range from microscopic gaps to large panel padding:
- Scale tokens:
xxs,xs,sm,md,lg,xl,xxl,xxxl,huge - Control dimensions:
control-gap,control-padding-x,control-padding-y,control-height,input-padding-y - Popup sizing:
popup-row-height,popup-padding,searchable-popup-min-height - Dropdown widths:
dropdown-width,searchable-dropdown-width,number-field-width - Layout spacing:
row-gap,row-padding-x,label-gap,panel-gap,panel-padding
Typography and Icon Tokens
Font sizing follows a semantic scale rather than arbitrary pixel values. As implemented in Style.qml lines 27-34, the font tokens include:
- Text sizes:
caption,body-small,body,subtitle,title,heading,display,display-large - Icon sizes:
icon-small,icon,icon-large
Bar Configuration Tokens
The shell's top and side bars expose specific sizing and slot tokens in Style.qml lines 41-48:
size-horizontal— Height of horizontal barssize-vertical— Width of vertical barsicon-slot— Reserved space for icon placementicon-canvas— Drawing area for iconsicon-font— Font family used for bar iconsstatus-slot— Area reserved for status indicators
Surface Color Tokens
Complex UI surfaces expose granular color controls through the Color singleton in shell/Commons/Color.qml lines 73-102. Each surface supports background, background-alpha, text, border, and border-alpha properties where applicable:
- Bar surfaces:
bar.background,bar.text,bar.active - Popup surfaces:
popups.background,popups.text,popups.border - Tooltip surfaces:
tooltip.background,tooltip.text,tooltip.border - Notification surfaces:
notifications.background,notifications.text,notifications.border,notifications.countdown - Menu surfaces:
menu.background,menu.text,menu.border,menu.scrim,menu.selected-background,menu.selected-text - Polkit surfaces:
polkit.background,polkit.text,polkit.text-error,polkit.border,polkit.border-error,polkit.accent,polkit.scrim - Lock screen surfaces:
lock.background,lock.text,lock.placeholder,lock.text-error,lock.border,lock.border-active,lock.border-error,lock.selection - Image picker surfaces:
image-picker.scrim,image-picker.text,image-picker.selected-border,image-picker.unselected-border
Foundational Palette Tokens
Global color references are defined in Color.qml lines 19-23 as foundational palette tokens:
foreground— Primary text colorbackground— Canvas backgroundaccent— Brand/interactive highlighturgent— Error or critical statesmuted— Secondary or disabled content
How to Customize Theme Tokens
Users can modify Omarchy shell theme tokens through TOML configuration. Theme authors define defaults in the theme's shell.toml, while end users can override values in ~/.config/omarchy/shell.toml without modifying theme files.
# Override button appearance
[style]
normal-color = "foreground"
normal-fill-alpha = 0.07
hover-cursor-fill-alpha = 0.15
# Adjust bar dimensions
[bar]
size-vertical = 30
size-horizontal = 28
# Customize menu surfaces
[menu]
background = "#202020"
background-alpha = 0.95
selected-background = "accent"
Apply changes using the Omarchy CLI:
# Apply a complete theme refresh
omarchy refresh-config themes/my-theme
# Reload configuration without shell restart
omarchy reload-config
The system re-evaluates tokens during theme switches, making omarchy reload-config sufficient for most token adjustments.
Summary
- Omarchy shell theme tokens are defined in
shell/Commons/Style.qml(spacing, fonts, states) andshell/Commons/Color.qml(surfaces, palette). - State tokens control interactive feedback through color, border-width, and alpha properties for normal, hover, selected, pressed, and focus states.
- Surface tokens provide granular control over bars, popups, menus, notifications, the lock screen, and polkit dialogs.
- Customization occurs through
shell.tomlfiles, with user overrides supported in~/.config/omarchy/shell.toml. - Changes are loaded at runtime via
Color.loadColorsandStyle.applyShellValues, and can be hot-reloaded usingomarchy reload-config.
Frequently Asked Questions
Where are Omarchy shell theme tokens defined?
The tokens are defined in two primary QML files within the basecamp/omarchy repository: shell/Commons/Style.qml contains spacing, typography, bar configuration, and interactive state tokens (lines 27-92), while shell/Commons/Color.qml defines the foundational palette and surface-specific color tokens (lines 19-102).
How do I override theme tokens without modifying theme files?
Create or edit ~/.config/omarchy/shell.toml and add TOML sections matching the token categories (such as [style], [bar], or [menu]). Values specified here take precedence over theme defaults but remain independent of theme updates. Run omarchy reload-config to apply changes without restarting the shell.
What is the difference between Style.qml and Color.qml tokens?
Style.qml tokens primarily control dimensions, spacing, and interactive state styling (normal, hover, selected, pressed), while Color.qml manages the color system including the foundational palette (foreground, background, accent) and surface-specific colors for UI components like bars, popups, and menus.
Do theme token changes require restarting the shell?
No. The Omarchy shell supports hot-reloading of configuration values. After editing shell.toml files, run omarchy reload-config to trigger Style.applyShellValues and Color.loadColors, which re-evaluates the token values without requiring a shell restart.
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 →