IPC Methods Available for the Omarchy Shell: Complete API Reference
The Omarchy shell exposes 13 public IPC methods through its IpcHandler component targeting "shell", enabling remote theme application, dynamic plugin management, bar widget manipulation, and configuration reloading from external scripts or DBus clients.
The basecamp/omarchy repository implements a robust inter-process communication system that allows external tools to control the desktop shell without restarting it. These IPC methods available for the Omarchy shell are defined within the IpcHandler block in shell/shell.qml (lines 71-100) and are accessible via the omarchy-summon CLI wrapper or direct DBus calls.
Core IPC Architecture
Omarchy’s shell leverages Quickshell’s IPC framework to expose functions remotely. The IpcHandler component in shell/shell.qml acts as the central dispatcher, routing incoming messages to specific QML functions based on the method name. Each method accepts string parameters (often Base64-encoded JSON) and returns string responses, making them compatible with standard Unix piping and DBus interfaces.
The handler is configured with target: "shell", meaning clients must address their IPC messages to the omarchy.shell namespace. Individual plugins may register their own handlers (e.g., omarchy.image-picker), but the core shell IPC remains centralized in the main QML file.
Complete List of Shell IPC Methods
The following methods are implemented in shell/shell.qml and are available to any authorized client:
System Health and Configuration
ping()– Returns"ok"for health checks. Implemented at lines 75-77.reloadConfig()– Hot-reloads the user’sshell.jsonviauserConfigFile.reload(). Returns"ok"on success.listShellConfig()– Returns the effective merged configuration as a JSON string, useful for debugging user settings.debugBarGeometry()– Outputs a JSON description of the bar’s current geometry and positioning for troubleshooting layout issues.
Theme and Appearance Management
applyTheme(colorsB64: string, shellB64: string)– Decodes Base64-encoded theme data and shell configuration JSON, then invokesColor.loadColors()andColor.loadShell()before scheduling a UI refresh. Defined at lines 79-88.toggleBarTransparency()– Toggles compositor transparency for the bar if one exists. Returns"ok"when successful or"no-bar"if no bar component is active.
Plugin Lifecycle Management
rescanPlugins()– Forces the shell to reload all installed plugins by callingshell.reloadPlugins(). Defined at lines 90-92. Returns void.listPlugins()– Returns a JSON array describing every installed plugin, includingid,name,kinds, and current state. Implemented at lines 52-88.setPluginEnabled(id: string, enabled: string)– Enables or disables a plugin by ID, whereenabledmust be the string"true"or"false".enablePlugin(id: string, placementJson: string)– Activates a plugin and optionally assigns it a placement configuration (used primarily for bar widgets).
Bar Widget Manipulation
putBarWidget(id: string, placementJson: string)– Adds a bar widget if not already present, using the provided placement JSON to determine position and sizing.moveBarWidget(id: string, placementJson: string)– Relocates an existing bar widget to a new placement defined in the JSON parameter.setBarWidget(id: string, key: string, valueJson: string, selectorJson: string)– Modifies a specific property on a bar widget. ThevalueJsonparameter contains the JSON-encoded value, whileselectorJsonoptionally scopes the change to specific widget instances.
Invoking IPC Methods via Command Line
For shell scripting and terminal usage, Omarchy provides the omarchy-summon helper that forwards arguments to the IPC layer. The syntax follows omarchy-summon shell <method> [args...].
Health check and configuration commands:
# Verify shell responsiveness
omarchy-summon shell ping
# → ok
# Reload configuration without restarting the session
omarchy-summon shell reloadConfig
# → ok
# Export current configuration for backup or inspection
omarchy-summon shell listShellConfig > current-shell.json
Theme application requires Base64 encoding:
# Apply new theme colors and shell configuration
COLORS_B64=$(base64 -w0 < theme-colors.json)
SHELL_B64=$(base64 -w0 < shell-config.json)
omarchy-summon shell applyTheme "$COLORS_B64" "$SHELL_B64"
# → ok
Plugin enumeration and management:
# List all installed plugins with jq formatting
omarchy-summon shell listPlugins | jq .
# Disable a specific plugin
omarchy-summon shell setPluginEnabled "weather-widget" "false"
# Rescan plugin directory after installing new extensions
omarchy-summon shell rescanPlugins
Bar widget operations:
# Add a widget to the bar with placement configuration
omarchy-summon shell putBarWidget "clock" '{"anchor": "right", "margin": 10}'
# Move existing widget to center
omarchy-summon shell moveBarWidget "clock" '{"anchor": "center"}'
# Toggle transparency for aesthetic changes
omarchy-summon shell toggleBarTransparency
Programmatic IPC Access via DBus
Scripts and applications written in JavaScript or Qt can communicate directly with the shell over DBus without spawning subprocesses. The shell.summon() method accepts the target namespace and a JSON-serialized request object.
Example JavaScript invocation:
// Query available plugins programmatically
let result = shell.summon("omarchy.shell", JSON.stringify({
method: "listPlugins"
}));
let plugins = JSON.parse(result);
console.log(`Found ${plugins.length} installed plugins`);
// Enable a plugin with specific placement
shell.summon("omarchy.shell", JSON.stringify({
method: "enablePlugin",
args: ["system-monitor", '{"panel": "top", "index": 3}']
}));
This approach reduces overhead for frequent operations and enables tight integration with system trays or settings panels.
Source Code Location and Implementation Details
The IPC system is implemented across several key files in the basecamp/omarchy repository:
-
shell/shell.qml– Contains the primaryIpcHandlerblock (lines 71-100) implementing all 13 core methods. Individual method implementations are located at:ping(): lines 75-77applyTheme(): lines 79-88rescanPlugins(): lines 90-92listPlugins(): lines 52-88
-
shell/Ui/Panel.qml– Provides a genericIpcHandlerpattern used by panel plugins, demonstrating howipcTargetis wired for individual plugin namespaces (e.g.,omarchy.<plugin>). -
shell/plugins/*/*.qml– Individual plugin directories containing specialized IPC handlers that extend the core shell functionality with domain-specific remote procedures.
All methods return strings to ensure compatibility with DBus string type constraints, with complex data structures serialized as JSON strings within those returns.
Summary
- The Omarchy shell exposes 13 public IPC methods centralized in
shell/shell.qmlvia theIpcHandlercomponent targeting"shell". - Configuration and theme changes can be applied dynamically without process restarts using
reloadConfig()andapplyTheme(). - Plugin management supports enumeration, enabling/disabling, and rescanning through methods like
listPlugins()andsetPluginEnabled(). - Bar widget manipulation provides granular control over placement and properties via
putBarWidget(),moveBarWidget(), andsetBarWidget(). - Integration options include the
omarchy-summonCLI for shell scripts and direct DBus calls for applications requiring low-latency communication.
Frequently Asked Questions
How do I check if the Omarchy shell is running and responsive?
Use the ping() IPC method, which is implemented at lines 75-77 in shell/shell.qml. From the terminal, run omarchy-summon shell ping; if the shell process is active, it returns the string "ok" immediately without modifying any state.
Can I change themes without restarting the Omarchy shell?
Yes. The applyTheme(colorsB64, shellB64) method accepts Base64-encoded JSON configurations for both color schemes and shell layouts, then hot-applies them via Color.loadColors() and Color.loadShell(). This allows instant theme switching without session interruption.
What is the difference between enablePlugin() and setPluginEnabled()?
setPluginEnabled(id, enabled) toggles a plugin’s active state using a boolean string ("true" or "false"), while enablePlugin(id, placementJson) specifically activates a plugin and simultaneously assigns it a placement configuration required for bar widgets. Use the latter when adding UI elements to the bar, and the former for general state management.
Where are the IPC method implementations located in the source code?
All core shell IPC methods are defined within the IpcHandler block in shell/shell.qml between lines 71 and 100. Specific functions like ping() occupy lines 75-77, applyTheme() spans lines 79-88, and rescanPlugins() is found at lines 90-92. Plugin-specific IPC handlers follow the same pattern in their respective shell/plugins/*/ directories.
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 →