summaryrefslogtreecommitdiff
path: root/modules/dashboard/dash/User.qml
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-05-18 00:23:21 +0800
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-05-18 00:23:21 +0800
commit086c5c9f0239b230d75c8365da0ab365bafaf0c1 (patch)
tree43032550fc7c74b337f108f3a53de7e9e5dd9bc7 /modules/dashboard/dash/User.qml
parentdashboard: fill current tab icon (diff)
downloadcaelestia-shell-086c5c9f0239b230d75c8365da0ab365bafaf0c1.tar.gz
caelestia-shell-086c5c9f0239b230d75c8365da0ab365bafaf0c1.tar.bz2
caelestia-shell-086c5c9f0239b230d75c8365da0ab365bafaf0c1.zip
feat: dashboard user
Diffstat (limited to 'modules/dashboard/dash/User.qml')
-rw-r--r--modules/dashboard/dash/User.qml122
1 files changed, 122 insertions, 0 deletions
diff --git a/modules/dashboard/dash/User.qml b/modules/dashboard/dash/User.qml
new file mode 100644
index 0000000..f8acdfd
--- /dev/null
+++ b/modules/dashboard/dash/User.qml
@@ -0,0 +1,122 @@
+import "root:/widgets"
+import "root:/services"
+import "root:/config"
+import "root:/utils"
+import Quickshell
+import Quickshell.Io
+import Quickshell.Widgets
+import QtQuick
+import Qt.labs.platform
+
+Row {
+ id: root
+
+ padding: Appearance.padding.large
+ spacing: Appearance.spacing.large
+
+ ClippingRectangle {
+ implicitWidth: DashboardConfig.sizes.faceSize
+ implicitHeight: DashboardConfig.sizes.faceSize
+
+ radius: Appearance.rounding.full
+ color: Colours.palette.m3surfaceContainerHigh
+
+ MaterialIcon {
+ anchors.centerIn: parent
+
+ text: "person"
+ font.pointSize: DashboardConfig.sizes.faceSize / 2
+ }
+
+ CachingImage {
+ anchors.fill: parent
+ path: `${StandardPaths.standardLocations(StandardPaths.HomeLocation)[0]}/.face`
+ }
+
+ Behavior on color {
+ ColorAnimation {
+ duration: Appearance.anim.durations.normal
+ easing.type: Easing.BezierSpline
+ easing.bezierCurve: Appearance.anim.curves.standard
+ }
+ }
+ }
+
+ Column {
+ spacing: Appearance.spacing.normal
+
+ InfoLine {
+ icon: Icons.osIcon
+ text: Icons.osName
+ colour: Colours.palette.m3primary
+ }
+
+ InfoLine {
+ icon: "select_window_2"
+ text: Quickshell.env("XDG_CURRENT_DESKTOP") || Quickshell.env("XDG_SESSION_DESKTOP")
+ colour: Colours.palette.m3secondary
+ }
+
+ InfoLine {
+ icon: "timer"
+ text: uptimeProc.uptime
+ colour: Colours.palette.m3tertiary
+
+ Timer {
+ running: true
+ repeat: true
+ interval: 15000
+ onTriggered: uptimeProc.running = true
+ }
+
+ Process {
+ id: uptimeProc
+
+ property string uptime
+
+ running: true
+ command: ["uptime", "-p"]
+ stdout: SplitParser {
+ onRead: data => uptimeProc.uptime = data
+ }
+ }
+ }
+ }
+
+ component InfoLine: Item {
+ id: line
+
+ required property string icon
+ required property string text
+ required property color colour
+
+ implicitWidth: icon.implicitWidth + text.width + text.anchors.leftMargin
+ implicitHeight: Math.max(icon.implicitHeight, text.implicitHeight)
+
+ MaterialIcon {
+ id: icon
+
+ anchors.left: parent.left
+ anchors.leftMargin: (DashboardConfig.sizes.infoIconSize - implicitWidth) / 2
+
+ text: line.icon
+ color: line.colour
+ font.pointSize: Appearance.font.size.normal
+ font.variableAxes: ({
+ FILL: 1
+ })
+ }
+
+ AnchorText {
+ id: text
+
+ prevAnchor: icon
+ anchors.leftMargin: icon.anchors.leftMargin
+ text: `: ${line.text}`
+ font.pointSize: Appearance.font.size.normal
+
+ width: DashboardConfig.sizes.infoWidth
+ elide: Text.ElideRight
+ }
+ }
+}