Build the Panama Hyprland desktop
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
// The top bar: edge-to-edge system chrome with no surface of its own. Content
|
||||
// floats directly over the desktop, while individual controls still provide
|
||||
// hover and press feedback. The entire bar is a hit target so the top-left
|
||||
// corner remains a dependable workspace-scroll gesture.
|
||||
//
|
||||
// Instantiate one per screen:
|
||||
//
|
||||
// Variants {
|
||||
// model: Quickshell.screens
|
||||
// Bar {}
|
||||
// }
|
||||
//
|
||||
// Layout mirrors GNOME's: workspaces + vitals left, clock + weather centre,
|
||||
// media + tray + status cluster right.
|
||||
|
||||
import Quickshell
|
||||
import Quickshell.Wayland
|
||||
import QtQuick
|
||||
import qs.config
|
||||
import qs.modules.clipboard
|
||||
import qs.modules.focus
|
||||
|
||||
PanelWindow {
|
||||
id: root
|
||||
|
||||
// Set by Variants. Left as a plain property (not `required`) so the bar can
|
||||
// also be instantiated standalone on the default screen while testing.
|
||||
property var modelData: null
|
||||
|
||||
// Raised when the status cluster is clicked; the shell wires this to the
|
||||
// quick settings panel, which this module does not own.
|
||||
signal requestQuickSettings
|
||||
|
||||
// Bound by the shell when an idle inhibitor is held, so the cluster can
|
||||
// show the caffeine glyph.
|
||||
property alias idleInhibited: statusCluster.idleInhibited
|
||||
|
||||
screen: root.modelData
|
||||
|
||||
anchors {
|
||||
top: true
|
||||
left: true
|
||||
right: true
|
||||
}
|
||||
|
||||
// PanelWindow defaults to an opaque white background.
|
||||
color: "transparent"
|
||||
|
||||
implicitHeight: Theme.barHeight
|
||||
|
||||
exclusiveZone: Theme.barHeight
|
||||
|
||||
// Stable namespace for compositor inspection and shell diagnostics.
|
||||
WlrLayershell.namespace: "qs-bar"
|
||||
WlrLayershell.layer: WlrLayer.Top
|
||||
WlrLayershell.keyboardFocus: WlrKeyboardFocus.None
|
||||
|
||||
// The full-width region is intentional: unlike a floating island, a menu
|
||||
// bar owns the screen edge. In particular, Workspaces starts at x=0 and
|
||||
// spans the full height so scrolling at the literal corner always works.
|
||||
mask: Region {
|
||||
item: barContent
|
||||
}
|
||||
|
||||
Item {
|
||||
id: barContent
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
// ── Left ────────────────────────────────────────────────────────────
|
||||
Row {
|
||||
anchors.left: parent.left
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
spacing: Theme.itemSpacing
|
||||
|
||||
Workspaces {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
screen: root.screen
|
||||
}
|
||||
|
||||
VitalsWidget {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
}
|
||||
|
||||
// ── Centre ──────────────────────────────────────────────────────────
|
||||
Row {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
spacing: 2
|
||||
|
||||
Clock {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
WeatherWidget {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
}
|
||||
|
||||
// ── Right ───────────────────────────────────────────────────────────
|
||||
Row {
|
||||
anchors.right: parent.right
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
spacing: Theme.itemSpacing
|
||||
|
||||
ActivityIndicator {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
FocusIndicator {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
MediaWidget {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
ClipboardWidget {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
Tray {
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
StatusCluster {
|
||||
id: statusCluster
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
onRequestQuickSettings: root.requestQuickSettings()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user