# The shell `blob-shell` is one long-running Quickshell process hosting the bar, panels, notifications, lock screen, OSD, and both menus. Everything runs inside it as a plugin, so summoning a panel is an IPC call into a process that is already up. ## Layout ``` shell/ shell.qml entry point Commons/ Style, Color, Border, Util Ui/ shared components services/ plugin registry, bar widget registry, app library plugins/ bar/ the bar and its widgets menu/ both menus notifications/ daemon, popups, DND, history notification-center/ lock/ polkit/ osd/ background/ clipboard/ emojis/ image-picker/ reminders/ panels/ audio bluetooth clock disk-speedtest monitor network power quick-settings speedtest sysmon weather wifiqr services/ battery idle media nightlight ``` First-party plugins are discovered under `shell/plugins` at a depth of two or three and are enabled without being listed anywhere. Third-party plugins live in `~/.config/blob/plugins//` and are enabled through `shell.json`. ## Config `shell.json` is the whole bar config. It hot-reloads on save, and dragging a bar widget rewrites `~/.config/blob/shell.json` directly, so after rearranging by hand copy it back: ``` cp ~/.config/blob/shell.json shell.json ``` `./install.sh --check` reports the drift. Defaults live at `config/blob/shell.json`. A valid user file replaces them entirely rather than merging. ## Bar layout | Section | Widgets | | --- | --- | | left | `blob.menu`, `blob.workspaces` | | center | `blob.clock` (anchored), `blob.system-update` | | right | `blob.tray`, `blob.bluetooth`, `blob.network`, `blob.audio`, `blob.monitor`, `blob.power`, `blob.notifications` | `blob.clock` and `blob.notifications` are `type: "command"` modules, which is how they carry their own click actions: the clock opens quick settings on left click, the shell's calendar on middle, and the timezone picker on right; the bell opens the notification centre on left and toggles silencing on right. The centre module named by `centerAnchor` cannot be dragged out of the centre. Every other widget still reorders. ## Differences from upstream This shell was forked from Omarchy 4.0.4 and is not tracked against it. The changes beyond renaming: - `agents`, `tailscale`, `dropbox`, and `dev-gallery` plugins removed, about 7,000 lines. - The `Dictation` bar indicator removed with voice typing. - Persistent workspaces 1-9 instead of 1-5. - Menu cards 440 wide instead of 300, with the Blob icon on the bar button. - The lock screen carries `branding/screensaver.txt` and an AGS-style password field: square corners, a 2px border on the blue slot at half alpha going to solid accent once typing starts, and urgent on a failed attempt. - `quick-settings`, `sysmon`, and `notification-center` are new, ported from the GTK widgets. See [widgets.md](widgets.md). None of these are clones or overrides. They are edits to first-party source, so there is no clone machinery and nothing to re-apply after an upstream release. The fork base is recorded in [upstream.md](upstream.md). ## Debugging ``` journalctl --user -t blob-shell -f blob-shell-restart ``` A QML error in a `service` plugin means that service never loads. For the lock that leaves the machine unlockable rather than locked open, so test it with `blob-shell lock lock` before trusting a change to it.