Files
blomarchy/docs/shell.md
T

3.4 KiB

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/<id>/ 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.

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.

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.