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
40 lines
1.6 KiB
QML
40 lines
1.6 KiB
QML
pragma ComponentBehavior: Bound
|
|
|
|
import QtQuick
|
|
import qs.hyprchrome.theme
|
|
import qs.hyprchrome.widgets.panels
|
|
|
|
// Staging widget for the debug window: a BarPanel carrying filler copy in both
|
|
// of the panel's densities — the full block when expanded, one elided line when
|
|
// collapsed. Both read the same `text`, so the two modes cannot disagree.
|
|
//
|
|
// Give it a width; the height follows whichever body is showing.
|
|
BarPanel {
|
|
id: lorem
|
|
|
|
property string text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since 1966, when designers at Letraset and James Mosley, the librarian at St Bride Printing Library in London, took a 1914 Cicero translation and scrambled it to make dummy text for Letraset's Body Type sheets. It has survived not only many decades, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised thanks to these sheets and more recently with desktop publishing software like Aldus PageMaker and Microsoft Word including versions of Lorem Ipsum."
|
|
|
|
title: "LOREM IPSUM"
|
|
|
|
// Collapsed: one line, cut off where the panel ends.
|
|
summary: Text {
|
|
width: parent.width
|
|
text: lorem.text
|
|
color: Theme.muted
|
|
font.family: Theme.displayFont
|
|
font.pixelSize: 12
|
|
maximumLineCount: 1
|
|
elide: Text.ElideRight
|
|
}
|
|
|
|
// Expanded: the whole thing, wrapped.
|
|
Text {
|
|
width: parent.width
|
|
text: lorem.text
|
|
color: Theme.text
|
|
font.family: Theme.displayFont
|
|
font.pixelSize: 12
|
|
wrapMode: Text.WordWrap
|
|
}
|
|
}
|