Keep only universal rules in AGENTS.md and point to per-task guides for shell development, acceptance tests, visual verification, command metadata, and install scripts. Fold the migration notes into docs/migrations.md and replace .claude/CLAUDE.md with a root CLAUDE.md importing AGENTS.md. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2.5 KiB
2.5 KiB
Omarchy Shell Development
Read this before editing the Quickshell desktop under shell/.
The Quickshell desktop runs as a single long-running process out of
shell/. Hyprland autostart launches it directly with quickshell -n -p;
do not start additional standalone Quickshell instances for individual
components.
Run omarchy-restart-shell after making changes to QML files.
Plugin contract
- First-party plugins live directly under
shell/plugins/or one category level deeper, such asshell/plugins/panels/weather/. First-party bar-only widgets may use adjacent*.manifest.jsonfiles. Third-party plugins live at~/.config/omarchy/plugins/<id>/with amanifest.jsonat the root. - Every plugin manifest declares
schemaVersion,id,name,version,kinds, andentryPoints. Seedocs/omarchy-shell.mdandshell/services/PluginRegistry.qmlfor the current contract; fields such asactivationare optional. - Entry-point QML files are
Items (notShellRoot), and accept the shell-injected propertiesomarchyPath,shell,manifest, andpluginRegistry/barWidgetRegistryas appropriate. - Panel / overlay / menu plugins must expose
open(payloadJson)andclose()lifecycle methods forshell summonandshell hide.
IPC
bin/omarchy-shellis the canonical IPC entry point. It forwards to the running shell and does not start it. Prefer it over re-implementing direct Quickshell socket calls in every CLI.- The
shellIPC target exposes lifecycle and configuration methods includingping,summon,hide,toggle,call,rescanPlugins,reloadConfig,setPluginEnabled, andlistPlugins.shell.qmlalso registersimage-selector, which drives theomarchy.image-pickerpanel. - Individual plugins register their own IPC targets, named for the plugin rather
than for where they appear: the background switcher registers
background, and bar widgets register one target each —omarchy.indicators,omarchy.system-update,omarchy.clock. There is nobartarget.
Editing widget files with glyphs
Widget files in shell/plugins/bar/widgets/ contain Nerd Font glyphs as raw
unicode characters. Agent file-editing tools can strip multi-byte codepoints
in some positions — do not rewrite widget files wholesale through those
tools. For glyph fixes, make a targeted edit with the surrounding context, or
use a Python script that inserts codepoints via chr(0xXXXXX).