summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmstel <shinamusuteru.rdc@gmail.com>2025-06-11 14:50:31 +0800
committerAmstel <shinamusuteru.rdc@gmail.com>2025-06-11 14:50:31 +0800
commit9308c9b67f491ff32c57d037f16ac6e9148f9dae (patch)
treee18f5cc757fe04d0a89a3f98f6e06d1183020135
parentFixed Logout Function (diff)
downloadcaelestia-shell-9308c9b67f491ff32c57d037f16ac6e9148f9dae.tar.gz
caelestia-shell-9308c9b67f491ff32c57d037f16ac6e9148f9dae.tar.bz2
caelestia-shell-9308c9b67f491ff32c57d037f16ac6e9148f9dae.zip
Dashboard Avatar Picker 1.0a
This will allows users to update/change their profile icon from the dashboard by clicking the profile icon. ### How it works? > Once the profile icon is clicked it will launch zenity file picker. Once selected the target new profile Icon this script will do the following: - Deletes the current ~/.face - Deletes all .face cached files in ~/.cache/caelestia/thumbnails/ - Copies the new selected profile-icon to ~/.face ### Issues - Once the profile is update, the user must manually reload the shell by restarting the shell session. **NOTE:** Make sure to chmod +x the picker.sh before using. Dependencies: - zenity
-rw-r--r--modules/dashboard/dash/User.qml64
-rwxr-xr-xscripts/caelestia-avatar-picker.sh21
2 files changed, 78 insertions, 7 deletions
diff --git a/modules/dashboard/dash/User.qml b/modules/dashboard/dash/User.qml
index c7d2bfd..4aefb31 100644
--- a/modules/dashboard/dash/User.qml
+++ b/modules/dashboard/dash/User.qml
@@ -19,17 +19,67 @@ Row {
radius: Appearance.rounding.full
color: Colours.palette.m3surfaceContainerHigh
- MaterialIcon {
- anchors.centerIn: parent
+ CachingImage {
+ anchors.fill: parent
+ path: `${Paths.home}/.face`
+ fillMode: Image.PreserveAspectCrop
+ smooth: true
+ }
- text: "person"
- fill: 1
- font.pointSize: (info.implicitHeight / 2) || 1
+ Rectangle {
+ id: overlay
+ anchors.fill: parent
+ radius: avatarRect.radius
+ color: Qt.rgba(0, 0, 0, 0.4)
+ opacity: mouseArea.containsMouse ? 1.0 : 0.0
+ visible: opacity > 0
+ Behavior on opacity {
+ NumberAnimation {
+ duration: 300
+ easing.type: Easing.InOutQuad
+ }
+ }
+
+ MaterialIcon {
+ anchors.centerIn: parent
+ text: "photo_camera"
+ color: "white"
+ font.pointSize: info.implicitHeight / 4
+ }
}
- CachingImage {
+ MouseArea {
+ id: mouseArea
anchors.fill: parent
- path: `${Paths.home}/.face`
+ hoverEnabled: true
+ onClicked: avatarUpdateProc.running = true
+ cursorShape: Qt.PointingHandCursor
+ }
+
+ Process {
+ id: avatarUpdateProc
+ running: false
+ command: [`${Paths.home}/.local/share/caelestia/shell/scripts/caelestia-avatar-picker.sh`]
+
+ stdout: SplitParser {
+ onRead: {
+ notifyProc.running = true
+ }
+ }
+ }
+
+ Process {
+ id: notifyProc
+ running: false
+ command: [
+ "notify-send",
+ "-u", "low",
+ "-i", "dialog-information-symbolic",
+ "Profile Updated",
+ "Your avatar has been successfully changed.",
+ "-a", "Shell",
+ "-A", "OK=Got it!"
+ ]
}
}
diff --git a/scripts/caelestia-avatar-picker.sh b/scripts/caelestia-avatar-picker.sh
new file mode 100755
index 0000000..4ca5cfb
--- /dev/null
+++ b/scripts/caelestia-avatar-picker.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+export DISPLAY=${DISPLAY:-:0}
+export DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS:-"unix:path=/run/user/$UID/bus"}
+
+# Pick an image file with zenity
+FILE=$(zenity --file-selection --file-filter="Images | *.png *.jpg *.jpeg *.webp")
+
+# Exit if cancelled
+[ -z "$FILE" ] && exit 1
+
+# Deletes existing ~/.face & caches
+rm -f "$HOME/.face"
+rm -f "$HOME/.cache/caelestia/thumbnails/@0x0-exact.png"
+rm -f "$HOME/.cache/caelestia/thumbnails/@93x93-exact.png"
+rm -f "$HOME/.cache/caelestia/thumbnails/@93x94-exact.png"
+rm -f "$HOME/.cache/caelestia/thumbnails/@94x94-exact.png"
+
+cp "$FILE" "$HOME/.face"
+
+echo "$HOME/.face"