made wallpaper settable with xdg config

This commit is contained in:
Hannes
2026-06-08 23:53:18 +02:00
parent b2eadfe9a2
commit c37db71cac
9 changed files with 97 additions and 12 deletions
+16
View File
@@ -103,5 +103,21 @@ download \
"$SCRIPT_DIR/colors/icons/correct.svg" \ "$SCRIPT_DIR/colors/icons/correct.svg" \
"correct.svg" "correct.svg"
# ----------------------------
# Example Wallpaper
# ----------------------------
echo
info "Preparing wallpaper..."
WALLPAPER_DIR=$(scripts/wallpaper_dir.sh)
# 5. Ensure it exists
mkdir -p "$WALLPAPER_DIR"
info "Copying example Wallpaper..."
# 6. Copy example wallpaper
cp $SCRIPT_DIR/colors/example_background.png "$WALLPAPER_DIR/japan_old_emperor_stream_with_bridge.png"
echo echo
ok "All assets prepared successfully." ok "All assets prepared successfully."
+5 -2
View File
@@ -5,6 +5,7 @@ import Quickshell.Io
import Quickshell.Wayland import Quickshell.Wayland
import "../../colors" import "../../colors"
import "../../states/wallpaperdir" as Global
Variants { Variants {
id: root id: root
@@ -32,6 +33,7 @@ Variants {
Keys.onPressed: event => { Keys.onPressed: event => {
if (event.key == Qt.Key_Escape) { if (event.key == Qt.Key_Escape) {
console.log("Pressed Escape, closing Wallpaper Picker") console.log("Pressed Escape, closing Wallpaper Picker")
console.log("Wallpaper Dir:", Global.WallpaperState.wallpaperDir)
wlogoutLoader.active = false wlogoutLoader.active = false
} else { } else {
for (let i = 0; i < buttons.length; i++) { for (let i = 0; i < buttons.length; i++) {
@@ -51,16 +53,17 @@ Variants {
Rectangle { Rectangle {
anchors.fill: parent anchors.fill: parent
Image { Image {
anchors.fill: parent anchors.fill: parent
source: Quickshell.env("HOME") + "/Pictures/Wallpapers/Static/blurred.jpg" source: Global.WallpaperState.wallpaperDir + "/Static/blurred.jpg"
fillMode: Image.PreserveAspectCrop fillMode: Image.PreserveAspectCrop
} }
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
onClicked: { onClicked: {
console.log("Pressed Escape, closing Wallpaper Picker") console.log("clicked ???, closing Wallpaper Picker")
wlogoutLoader.active = false wlogoutLoader.active = false
} }
GridLayout { GridLayout {
+21 -2
View File
@@ -3,14 +3,32 @@ import Quickshell
import Quickshell.Hyprland import Quickshell.Hyprland
import Quickshell.Io import Quickshell.Io
import "../../states/wallpaper" as Global
Item { // container, invisible Item { // container, invisible
id: wlLoader id: wlLoader
Process {
id: getWallpaper
command: ["sh", "-c", Quickshell.env("HOME") + "/.config/quickshell/scripts/wallpaper_dir.sh"]
stdout: StdioCollector {
onStreamFinished: function() {
console.log("getWallpaper: " + this.text)
Global.WallpaperState.wallpaperDir = this.text.trim()
wlogoutLoader.active = true
}
}
}
Loader { Loader {
id: wlogoutLoader id: wlogoutLoader
active: false active: false
sourceComponent: Wlogout { id: wLogout } sourceComponent: Wlogout {
id: wLogout
}
} }
GlobalShortcut { GlobalShortcut {
@@ -19,7 +37,8 @@ Item { // container, invisible
onPressed: { onPressed: {
console.log("Pressed Meta+Shift+W (Hyprland global shortcut)") console.log("Pressed Meta+Shift+W (Hyprland global shortcut)")
wlogoutLoader.active = !wlogoutLoader.active getWallpaper.running = true
// wlogoutLoader.active = !wlogoutLoader.active
} }
} }
+1
View File
@@ -5,6 +5,7 @@ import Quickshell.Hyprland
import Quickshell.Io import Quickshell.Io
import Qt.labs.folderlistmodel import Qt.labs.folderlistmodel
import "../../colors" import "../../colors"
import "../../states/wallpaperdir" as Global
PanelWindow { PanelWindow {
id: picker id: picker
+10 -3
View File
@@ -1,10 +1,15 @@
#!/usr/bin/env bash #!/usr/bin/env bash
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
# Folder with full-size wallpapers # Folder with full-size wallpapers
WALLPAPER_DIR="$HOME/Pictures/Wallpapers" WALLPAPER_DIR=$("$SCRIPT_DIR/../../scripts/wallpaper_dir.sh")
echo "$WALLPAPER_DIR"
# Folder to store thumbnails # Folder to store thumbnails
THUMB_DIR="$HOME/.cache/wallpaper-thumbs" THUMB_DIR="$HOME/.cache/wallpaper-thumbs"
echo "$THUMB_DIR"
if [ ! -d $THUMB_DIR ]; then if [ ! -d $THUMB_DIR ]; then
mkdir -p $THUMB_DIR; mkdir -p $THUMB_DIR;
@@ -66,12 +71,14 @@ for img in "$WALLPAPER_DIR"/*.{jpg,jpeg,png}; do
continue continue
fi fi
num+=1 ((num++))
# Generate thumbnail using ImageMagick # Generate thumbnail using ImageMagick
if [ -x "/usr/bin/magick" ]; then if [ -x "/usr/bin/magick" ]; then
magick "$img" -resize "${MAX_DIM}x${MAX_DIM}" "$thumb" magick "$img" -resize "${MAX_DIM}x${MAX_DIM}" "$thumb"
rm $temp_image_name if [ -f "$temp_image_name" ]; then
rm "$temp_image_name"
fi
else else
if [ -f "$temp_image_name" ] && [ "$temp_image_name" -nt "$img" ]; then if [ -f "$temp_image_name" ] && [ "$temp_image_name" -nt "$img" ]; then
continue continue
+15 -5
View File
@@ -1,9 +1,18 @@
#!/bin/bash #!/bin/bash
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
# Folder with full-size wallpapers
WALLPAPER_DIR=$("$SCRIPT_DIR/../../scripts/wallpaper_dir.sh")
if [ -z "$WALLPAPER_DIR" ]; then
echo "Failed to determine wallpaper directory. Exiting."
exit 1
fi
# Path to the image is the first argument # Path to the image is the first argument
IMAGE="$1" IMAGE="$1"
image_name=$(basename "$IMAGE") image_name=$(basename "$IMAGE")
image="$HOME/Pictures/Wallpapers/$image_name" image="$WALLPAPER_DIR/$image_name"
echo "start" echo "start"
@@ -45,6 +54,7 @@ elif [ -x "/usr/bin/hyprpaper" ]; then
sed -i "3s|path = .*|path = ${image}|" ~/.config/hypr/hyprpaper.conf sed -i "3s|path = .*|path = ${image}|" ~/.config/hypr/hyprpaper.conf
hyprctl monitors -j | jq -r 'sort_by(.id) | .[].name' | while IFS= read -r display; do hyprctl monitors -j | jq -r 'sort_by(.id) | .[].name' | while IFS= read -r display; do
echo "hyprctl hyprpaper wallpaper $display, $image"
hyprctl hyprpaper wallpaper "$display, $image" hyprctl hyprpaper wallpaper "$display, $image"
done done
fi fi
@@ -74,9 +84,9 @@ if [ -x "/usr/bin/sddm" ]; then
else else
cp $image $blurred_wp cp $image $blurred_wp
fi fi
if [ -x "/usr/bin/sddm" ] && [ -d "/usr/share/backgrounds" ]; then # if [ -x "/usr/bin/sddm" ] && [ -d "/usr/share/backgrounds" ]; then
sddm_background="/usr/share/backgrounds/background.jpg" # sddm_background="/usr/share/backgrounds/background.jpg"
cp "$image" "$sddm_background" # cp "$image" "$sddm_background"
fi # fi
echo "test" echo "test"
+21
View File
@@ -0,0 +1,21 @@
#!/bin/bash
# Setting wallpaper_dir
WALLPAPER_DIR="${XDG_PICTURES_DIR:-}"
# 2. If empty, use xdg-user-dir (most reliable)
if [ -z "$WALLPAPER_DIR" ]; then
if command -v xdg-user-dir >/dev/null 2>&1; then
WALLPAPER_DIR="$(xdg-user-dir PICTURES 2>/dev/null)"
fi
fi
# 3. Final fallback (hardcoded default)
if [ -z "$WALLPAPER_DIR" ] || [ ! -d "$WALLPAPER_DIR" ]; then
WALLPAPER_DIR="$HOME/Pictures"
fi
# 4. Your wallpaper subfolder
WALLPAPER_DIR="$WALLPAPER_DIR/Wallpapers"
echo $WALLPAPER_DIR
+7
View File
@@ -0,0 +1,7 @@
pragma Singleton
import QtQuick
import Quickshell
QtObject {
property string wallpaperDir: Quickshell.env("HOME") + "/Pictures/Wallpapers"
}
+1
View File
@@ -0,0 +1 @@
singleton WallpaperState WallpaperState.qml