A second shell chrome under dotfiles/quickshell/hyprchrome, built around a BarPanel that carries TWO renderings of its data: the default children are the expanded detail view, `summary` the terse one shown while collapsed. Both stay bound to the same sources, so the densities cannot disagree, and the panel cross-fades between them while its height animates. Panels: HostPanel (hostname, user, timezone, clock), VitalsPanel (CPU load and temperature, memory, GPU load and temperature, all metered), TrayPanel (system tray, self-sizing). HyprChromeBar pins them to DP-2 and owns `expanded` for the whole rail — SUPER A, via GlobalShortcut "chrome". GPU busy comes off sysfs rather than the node_exporter scrape VitalsData already does: the hwmon collector carries the card's temps, power and clocks but not its utilisation. The bar's height binds to each panel's `targetHeight` — where it will settle, not where the animation currently is — because the exclusive zone is window-sized by default, and binding to the animated height relayouts every tiled window on the output twelve times per toggle. The zone follows the target immediately so the desktop reflows once, at the start; the surface itself shrinks only after the panels finish, or it would clip them mid-animation. DebugWindow stages a widget in the middle of the secondary monitor (SUPER CTRL D), masked so only the staged widget takes pointer input. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HEtXvseVb5gwAtKNhFx2PU
75 lines
2.3 KiB
QML
75 lines
2.3 KiB
QML
//@ pragma UseQApplication
|
||
|
||
import QtQuick
|
||
import Quickshell
|
||
import Quickshell.Widgets
|
||
import qs.widgets.bar
|
||
import qs.widgets.launcher
|
||
import qs.widgets.notifications
|
||
import qs.widgets.osd
|
||
import qs.widgets.systray
|
||
import qs.widgets.theme
|
||
import qs.widgets.vitals
|
||
import qs.hyprchrome
|
||
import qs.hyprchrome.widgets
|
||
import qs.hyprchrome.widgets.debug
|
||
import qs.hyprchrome.widgets.host
|
||
import qs.hyprchrome.widgets.vitals
|
||
|
||
Scope {
|
||
// Dense multi-monitor status rail; visual core is headlessly renderable.
|
||
HyprChromeBar {}
|
||
|
||
// App launcher variants — SUPER CTRL 1–8; variant 8 is the primary HUD.
|
||
LauncherStack {} // 1 — left vertical list
|
||
LauncherGrid {} // 2 — centered icon grid
|
||
LauncherSpotlight {} // 3 — top-center command bar
|
||
LauncherConsole {} // 4 — full-width deck unfolding from the top bar
|
||
LauncherDock {} // 5 — deck rising from the bottom bar
|
||
LauncherSlant {} // 6 — angular / sheared panel
|
||
LauncherCorner {} // 7 — Slant (V6) copy + floating power panel (shutdown/reboot)
|
||
ApplicationLauncher {} // 8 — dense HUD command index (primary)
|
||
BladeLauncher {} // 9 — asymmetric blade matrix
|
||
OrbitLauncher {} // 10 — radial targeting arena
|
||
|
||
Notifications {}
|
||
VolumeOsd {}
|
||
|
||
// Host vitals HUD — toggle with SUPER CTRL V.
|
||
Vitals {}
|
||
|
||
// Widget staging area, centered on the secondary monitor (HDMI-A-1),
|
||
// toggled with SUPER CTRL D. Swap the children below for whatever widget
|
||
// is being worked on; they must carry their own size (see DebugWindow).
|
||
// DebugWindow {
|
||
// id: debugStage
|
||
|
||
// // VitalsPanel has no implicit width — the slot measures its children, so
|
||
// // each staged panel states its own. Height follows the mode it is in.
|
||
// // Click a panel to collapse or expand it.
|
||
// Column {
|
||
// spacing: 12
|
||
// padding: 12
|
||
|
||
// HostPanel {
|
||
// width: 560
|
||
// }
|
||
|
||
// HostPanel {
|
||
// width: 560
|
||
// expanded: false
|
||
// }
|
||
|
||
// VitalsPanel {
|
||
// width: 560
|
||
// }
|
||
|
||
// VitalsPanel {
|
||
// width: 560
|
||
// expanded: false
|
||
// }
|
||
|
||
// }
|
||
// }
|
||
}
|