Skip to content

omarchy-shell

Recipe card from the charly-distros plugin (Images — the deployable catalog).

Omarchy’s entire desktop shell is one Quickshell QML tree, shipped by the omarchy package at /usr/share/omarchy/shell.

This is the single most common wrong assumption about Omarchy 4.x. The 3.x stack was waybar + mako + walker + swayosd + swaybg, and every one of those is gone from the 4.x base package set. There is no bar config to write, no notifier to install, and no launcher to wire up — there is one QML tree and a process that runs it.

omarchy-shell:
candy:
candy: [omarchy-osd, omarchy-quickshell]
Member Role
omarchy-quickshell Quickshell itself plus the supervised omarchy-shell service
omarchy-osd the tools the shell’s indicators shell out to

Why the service does not use omarchy-launch-shell

Section titled “Why the service does not use omarchy-launch-shell”

Upstream’s launcher runs systemd-cat -t omarchy-shell -- quickshell. A pod has neither a systemd user manager nor a journald socket for systemd-cat to write to. Supervisord already provides the same capture and restart semantics, so the service execs quickshell directly:

exec: quickshell -n -p /usr/share/omarchy/shell
priority: 14
wait_for: {paths: ["${XDG_RUNTIME_DIR}/wayland-2"], timeout: 60s}

Priority 14 places it after the compositor (12) and before the streaming transport (18). The socket is wayland-2, not wayland-0: this stack runs TWO compositors, and gst-wayland-display (the streaming parent) takes wayland-1 while Hyprland binds the next name for its own clients. Nothing in the stack ever creates wayland-0.

Measured: without a session bus Quickshell still starts and still draws, but logs Could not connect to DBus and disables its bluetooth and NetworkManager modules — Network will not work. Could not find an available backend. Two bar widgets are then dead with no other symptom, so pod-dbus is a require:, not a suggestion.

The bar is a layer-shell surface, not a toplevel, so it does not appear in hyprctl clients and a wl: hypr-clients probe will not see it. Assert it with a screenshot (wl: screenshot with artifact_not_uniform) or via the supervised service’s own stable-uptime check.

Two degradations are expected in a container and are not defects: polkit logs failed to create subject: No session for pid (it wants a logind session), and the shell reports Layershell screen does not correspond to a real screen on a headless output.