Make Shell a category, the bar legible, and the dock a real dock

Desktop & Dock becomes Shell — Bar, Dock, Control Center, Tiling,
Workspaces — the home for everything Quickshell draws. The settings-
management cluster moves to System as Sync & Backup, Appearance's
Shell tab dissolves, and 24-hour time finally lives on Date & Time,
which always owned it.

The bar gets what it never had: a way to survive the wallpaper. A
second neutral text family (follow theme, or forced light or dark),
a one-layer shadow under every glyph, and a gradient scrim for
wallpapers nothing else survives — all off by default, pixel-identical
until asked. Widgets earn toggles (weather, media, clipboard, calendar
countdown), the vitals cluster stops leaving a dead pill behind, and
Control Center's sections learn to step aside.

The dock graduates from MVP: a context menu with window rows, pin,
unpin, quit and new-window; scroll an icon to cycle its windows; drag
to reorder on the dock itself; hover previews with one-shot captures;
and "Add App to Dock" in the launcher. Three real bugs died en route —
menus that slid away with the autohide, a readonly-property crash on
every menu open, and a drag that drifted half a slot per icon on side
docks. The pinned-apps editor in Settings becomes a drag strip.

166 contracts; the full suite is green except two live display and
switcher tests that cannot run behind a locked session — re-verified
on unlock.

Claude-Session: https://claude.ai/code/session_01Ms2FbjQy31TVf3CEvQhGM8
This commit is contained in:
Gabriel Brown
2026-08-24 04:28:20 -04:00
parent 4d7a194300
commit f8f5b25510
77 changed files with 2982 additions and 800 deletions
@@ -0,0 +1,98 @@
# Shell category — Bar · Dock · Control Center · Tiling · Workspaces
Approved 2026-08-24 (interactive mock). Desktop & Dock becomes **Shell**: the home for
everything Quickshell draws. Five tabs, three of them new surfaces. The settings-
management cluster leaves for System; Appearance's Shell tab dissolves into the Bar
tab; the dock's feature upgrade (drag-reorder on the dock, context menu, previews,
scroll cycling, launcher pin command) lands separately once the research report is in.
## Routing
Category id `shell`, label **Shell**, keeping the old icon. Leafs: `bar`, `dock`,
`control-center`, `tiling`, `workspaces` — five new pages; `DesktopPage.qml` dies.
Retired: `desktop``bar` (first tab). `DockContextMenu`'s "Dock settings" deep-links
to `dock`. System gains leaf `sync` ("Sync & Backup"), ten tabs total.
## Bar (the new surface)
**Visibility.** New schema group `bar`:
- `barTextTone` enum `theme|light|dark` (def `theme`) — drives new Theme tokens
`barFg`/`barFgDim`/`barFgMuted` (theme ⇒ today's fg family; light ⇒ near-white with
derived dims; dark ⇒ near-black likewise). Bar widgets rebind their ~26 neutral
text/glyph bindings to the bar tokens — semantic tones (warn/danger/accent/ok) stay.
- `barTextShadow` bool (def false) — one `layer.effect` MultiEffect shadow over the
whole bar content; one change covers every widget and icon. Event-driven repaints
only; the bar already repaints once a second for the clock.
- `barBackdrop` bool (def false) — a top-down gradient scrim Rectangle behind the
content rows.
**Widgets card.** New bools (group `bar`, all def true): `showWeatherWidget`,
`showMediaWidget`, `showClipboardButton`, `showCalendarCountdown` — each ANDed with
the widget's existing state condition. Moved here: `showCpu/showMemory/showGpu`,
`showBattery`, `showBatteryPercent`, `showAgentUsage`. Fix in passing: VitalsWidget
renders no pill at all when all three fields are off (today an empty dead pill stays).
State-driven indicators (health, activity, focus, wallpaper, calendar-within-window)
stay automatic.
**Clock card.** `showSeconds`, `showWeekday` (group `clock`, now routing to `bar`).
`use24Hour` moves to a new group `datetime` routing to the Date & Time page, which
gains the toggle — it drives the date menu, notifications, and the lock screen, and
was never just the bar's.
**Vitals card.** `vitalsIntervalMs` + the graphics-device ChoiceGrid, moved from
Appearance.
## Dock
`DockPage.qml`: the Dock behavior card (position, screens, autohide, delays, icon
size — unchanged rows), then **Pinned applications** rebuilt as `DockPinsStrip.qml`:
a horizontal strip of app icons (real icons, the dock's own resolution), drag to
reorder, hover-× to unpin, the existing `DockAppPicker` search beneath. The
16-full-rows editor (`DockPinsEditor`) retires; its drag mechanics inform the strip.
The dock-position contract's `preventStealing` pin moves to the strip.
## Control Center
`ControlCenterPage.qml` — the panel's first settings surface. New schema group
`controlCenter`: one show/hide bool per real section of `QuickSettingsPanel`
(verified against the panel's actual structure at build time; the mock showed Focus,
Home, Phone, Media as candidates — only sections that exist get toggles). Plus an
Accessories handoff row to Home My Home.
## Tiling
`TilingPage.qml`: Window layout (+ the Appearance Windows handoff), Master & stack
(visible when master), Window edges, Hyprland notices — all rows moved unchanged.
## Workspaces
`WorkspacesPage.qml`: Workspaces & focus toggles, Focus session length, Projects —
moved unchanged.
## System Sync & Backup
`SyncPage.qml` (leaf `sync`): "Carry settings to another machine" (SettingsSync),
"Settings backups" (SettingsBackup — retitled so it stops colliding with btrfs
Snapshots one tab over), "Reset". The `Restore defaults` search entry re-points here.
## Appearance shrinks
The `shell` tab and its two cards leave `AppearancePage`; five tabs remain.
## Blast radius
- `SettingsSearch.groupPages`: dock/multitasking/edges/master/notices → their new
leafs; `focus``workspaces`; `vitals`+`clock``bar`; new `datetime``datetime`;
new `bar`/`controlCenter` groups. extraEntries: "Restore defaults" → `sync`; new
entries for bar visibility, dock pins, control center.
- Contracts updated in-phase (tests are runnable this pass): settings-jump
(DockContextMenu → `dock`), projects-contract (DesktopPage greps → WorkspacesPage),
dock-position-contract (strip), desktop-style/lock-screen-settings (Appearance card
lists), search fixed cases, ownership groupPages cross-checks, agent-usage
(unchanged gating), plus a new bar-visibility contract.
- Generators re-run; README/manual updated.
## Deferred (dock feature wave, post-research)
Drag-reorder on the live dock, right-click unpin/window actions, window previews,
scroll cycling, the launcher "Add app to dock" command.