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
This commit is contained in:
Amstel 2025-06-11 14:50:31 +08:00
parent fcbcffc782
commit 9308c9b67f
2 changed files with 79 additions and 8 deletions

View file

@ -19,17 +19,67 @@ Row {
radius: Appearance.rounding.full
color: Colours.palette.m3surfaceContainerHigh
MaterialIcon {
anchors.centerIn: parent
text: "person"
fill: 1
font.pointSize: (info.implicitHeight / 2) || 1
}
CachingImage {
anchors.fill: parent
path: `${Paths.home}/.face`
fillMode: Image.PreserveAspectCrop
smooth: true
}
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
}
}
MouseArea {
id: mouseArea
anchors.fill: parent
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!"
]
}
}

View file

@ -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"