How to Apply Themes and Shell Configurations to the Omarchy Shell via IPC
You can apply themes and shell configurations to the Omarchy shell via IPC by using the omarchy-shell command to send instructions to the shell IPC target, invoking verbs like setTheme for theme changes or applyConfig for live configuration updates without restarting the process.
The Omarchy project (basecamp/omarchy) implements a desktop shell built on the Quickshell framework that runs as a long-lived process. According to the IPC contract documented in docs/omarchy-shell.md and implemented in shell/shell.qml, you can apply themes and shell configurations to the Omarchy shell via IPC, enabling instant visual and behavioral changes while the shell remains active.
Understanding the IPC Architecture
The Omarchy shell exposes a single shell IPC target that serves as the central dispatcher for runtime state changes. This target is defined in the IPC contract located at docs/omarchy-shell.md and implemented within shell/shell.qml.
When you execute omarchy-shell, you are communicating with this target to manipulate the active theme or adjust configuration parameters. The dispatcher parses your command and forwards it to the appropriate service modules, such as shell/services/AppLibrary.qml, which handles file operations for theme-related assets.
Applying Themes via IPC
Themes in Omarchy correspond to directories under ~/.config/omarchy/themes/ or system-wide theme paths. The IPC layer allows you to switch themes instantly by updating the internal state and triggering a reload of colour palettes, icons, fonts, and generated configuration files.
Using the CLI to Switch Themes
To change the active theme via IPC, use the setTheme verb followed by the theme name:
omarchy-shell shell setTheme "Tokyo Night"
Internally, this command writes the theme name to ~/.local/state/omarchy/current/theme/name and triggers the shell to reload its visual assets. The implementation in shell/services/AppLibrary.qml handles the file operations, copying colour palettes and generating the necessary *.toml and *.lua files for compatible applications.
Helper Scripts for Theme Management
For convenience, the repository provides bin/omarchy-theme-set, which wraps the IPC call:
omarchy-theme-set "Tokyo Night"
This script forwards the request to the IPC layer using the same setTheme verb, ensuring consistent behavior across manual invocations and automated scripts.
Modifying Shell Configurations via IPC
Configuration files reside in $OMARCHY_PATH/config/ and the user’s ~/.config/omarchy/ directory. The shell IPC target provides specific verbs for manipulating these settings without requiring a shell restart:
reloadConfig– Re-reads all configuration files from disk and applies changes immediately.setConfig <json>– Replaces the entire effective configuration with the supplied JSON payload.applyConfig <json>– Performs a deep merge of the supplied JSON into the existing configuration.listPlugins– Returns a JSON array of loaded plugins, useful for verifying which configuration sections are active.setPluginEnabled <plugin-id> <true|false>– Toggles a specific plugin’s state, affecting its associated configuration handling.
Live Configuration Examples
Refresh the shell after editing configuration files:
omarchy-shell shell reloadConfig
Apply a specific style change, such as adjusting bar opacity:
omarchy-shell shell applyConfig '{"bar":{"opacity":0.85}}'
List currently loaded plugins to identify which IPC handlers are available:
omarchy-shell shell listPlugins
Disable a plugin dynamically to prevent it from processing configuration changes:
omarchy-shell shell setPluginEnabled "notifications" false
Why Use IPC for Theme and Config Changes
Leveraging IPC for shell customization provides distinct architectural advantages:
- Zero-downtime updates – The shell process remains alive while the UI updates instantly, preserving your session state.
- Consistent API surface – All CLIs, including
omarchy-theme-set,omarchy-menu, andomarchy-notification-send, ultimately invoke the same IPC layer defined inshell/shell.qml, ensuring stable contracts across versions. - Fine-grained control – You can target individual plugins via
setPluginEnabledor manipulate specific configuration sections without affecting other shell components.
As documented in shell/plugins/README.md, each first-party plugin registers its own IPC handlers, allowing you to enable or disable specific functionality after a theme change or configuration reload.
Summary
- The
shellIPC target inshell/shell.qmlhandles all theme and configuration requests for the Omarchy desktop environment. - Use
omarchy-shell shell setTheme "<name>"or thebin/omarchy-theme-sethelper to switch themes instantly. - Configuration changes use verbs like
applyConfig,setConfig, andreloadConfigto update the shell without restarting. - The IPC contract is formally documented in
docs/omarchy-shell.mdand implemented through service modules likeshell/services/AppLibrary.qml. - Plugin-specific control is available via
listPluginsandsetPluginEnabled, allowing granular manipulation of shell capabilities.
Frequently Asked Questions
What IPC target handles theme and configuration changes in Omarchy?
The shell target handles these operations. It is the central dispatcher implemented in shell/shell.qml that processes verbs like setTheme, applyConfig, and reloadConfig according to the contract defined in docs/omarchy-shell.md.
How do I change the Omarchy theme without restarting the shell?
Execute omarchy-shell shell setTheme "<theme-name>". This updates ~/.local/state/omarchy/current/theme/name and triggers an immediate reload of the colour palette, icons, and fonts via the shell/services/AppLibrary.qml service.
Can I update specific configuration values without rewriting the entire config file?
Yes. Use the applyConfig verb with a JSON payload containing only the values you want to change. The shell performs a deep merge, updating only the specified keys while preserving the rest of your configuration.
Where is the IPC contract documented in the repository?
The complete IPC specification, including available targets, verbs, and argument formats, is documented in docs/omarchy-shell.md. Implementation details for the dispatcher can be found in shell/shell.qml.
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 →