From 1db3907838161b309ee034dff1dbcb957e21d36e Mon Sep 17 00:00:00 2001 From: Lucas <43530291+LuckShiba@users.noreply.github.com> Date: Thu, 11 Dec 2025 05:01:14 -0300 Subject: [PATCH] nix: fix greeter per-monitor and per-mode wallpapers (#974) --- distro/nix/greeter.nix | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/distro/nix/greeter.nix b/distro/nix/greeter.nix index 3e36f679..6f87942a 100644 --- a/distro/nix/greeter.nix +++ b/distro/nix/greeter.nix @@ -139,10 +139,32 @@ in )} if [ -f session.json ]; then - if cp "$(${jq} -r '.wallpaperPath' session.json)" wallpaper.jpg; then - mv session.json session.orig.json - ${jq} '.wallpaperPath = "${cacheDir}/wallpaper.jpg"' session.orig.json > session.json - fi + copy_wallpaper() { + local path=$(${jq} -r ".$1 // empty" session.json) + if [ -f "$path" ]; then + cp "$path" "$2" + ${jq} ".$1 = \"${cacheDir}/$2\"" session.json > session.tmp + mv session.tmp session.json + fi + } + + copy_monitor_wallpapers() { + ${jq} -r ".$1 // {} | to_entries[] | .key + \":\" + .value" session.json 2>/dev/null | while IFS=: read monitor path; do + local dest="$2-$(echo "$monitor" | tr -c '[:alnum:]' '-')" + if [ -f "$path" ]; then + cp "$path" "$dest" + ${jq} --arg m "$monitor" --arg p "${cacheDir}/$dest" ".$1[\$m] = \$p" session.json > session.tmp + mv session.tmp session.json + fi + done + } + + copy_wallpaper "wallpaperPath" "wallpaper" + copy_wallpaper "wallpaperPathLight" "wallpaper-light" + copy_wallpaper "wallpaperPathDark" "wallpaper-dark" + copy_monitor_wallpapers "monitorWallpapers" "wallpaper-monitor" + copy_monitor_wallpapers "monitorWallpapersLight" "wallpaper-monitor-light" + copy_monitor_wallpapers "monitorWallpapersDark" "wallpaper-monitor-dark" fi if [ -f settings.json ]; then