diff --git a/Containerfile b/Containerfile index 0971a2a..8e0cb5e 100644 --- a/Containerfile +++ b/Containerfile @@ -131,6 +131,15 @@ COPY configs/kargs-plymouth.toml /usr/lib/bootc/kargs.d/plymouth.toml COPY --chmod=755 scripts/notify-bootc-user.sh /usr/bin/ COPY --chmod=755 scripts/kanshi-autoconfig /usr/bin/kanshi-autoconfig COPY --chmod=755 scripts/seed-labwc-skel.sh /usr/bin/seed-labwc-skel +COPY --chmod=755 scripts/bing-wallpaper.sh /usr/bin/bing-wallpaper.sh +COPY --chmod=755 scripts/bing-wallpaper-toggle.sh /usr/bin/bing-wallpaper-toggle.sh + +# Desktop-Datei fuer den Toggle (Noctalia-Launcher findet ihn als App) +COPY configs/applications/bing-wallpaper-toggle.desktop /usr/share/applications/bing-wallpaper-toggle.desktop + +# User-Units (Bing-Wallpaper-Timer; Enable weiter unten via --global) +COPY configs/systemd/user/bing-wallpaper.service /usr/lib/systemd/user/bing-wallpaper.service +COPY configs/systemd/user/bing-wallpaper.timer /usr/lib/systemd/user/bing-wallpaper.timer # labwc/kanshi-Defaults fuer neue Benutzer (Bestand bleibt via seed-labwc-skel) COPY configs/skel/ /etc/skel/ @@ -186,6 +195,10 @@ RUN systemctl enable \ flatpak-preinstall.service \ greetd.service +# User-Units global enablen (fuer alle Benutzer; danach pro User per +# systemctl --user disable abschaltbar). Muss NACH dem COPY oben stehen. +RUN systemctl --global enable bing-wallpaper.timer + # SELinux-Labels fuer Greeter/Skel/Sessions (Fehler tolerieren, Labels # werden beim Deployment ggf. erneut gesetzt) RUN restorecon -Rv /etc/greetd /etc/skel /usr/share/wayland-sessions 2>/dev/null || true diff --git a/build/22-noctalia.sh b/build/22-noctalia.sh index 1542854..2afeb08 100755 --- a/build/22-noctalia.sh +++ b/build/22-noctalia.sh @@ -39,21 +39,4 @@ dnf5 install -y \ f${FEDORA_VERSION}-backgrounds \ fedora-workstation-backgrounds -# Flacher Wallpaper-Pool fuer Noctalias Picker (der ist NICHT rekursiv und -# sieht Unterordner unter /usr/share/backgrounds nicht). Symlinks statt -# Kopien: null Mehrbytes im Image. Deterministisch benannt, vollstaendig. -mkdir -p /usr/share/noctalia-wallpapers -i=0 -while IFS= read -r img; do - i=$((i + 1)) - ext="${img##*.}" - ln -sf "$img" "/usr/share/noctalia-wallpapers/fluffy-pool-$(printf '%02d' "$i").${ext}" -done < <(find /usr/share/backgrounds -type f \( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' \) | sort) -if [ "$i" -lt 1 ]; then - echo "FEHLER: keine Wallpaper unter /usr/share/backgrounds gefunden" - exit 1 -fi -echo "Wallpaper-Pool: $i Motive" -ls /usr/share/noctalia-wallpapers - dnf5 clean all diff --git a/configs/applications/bing-wallpaper-toggle.desktop b/configs/applications/bing-wallpaper-toggle.desktop new file mode 100644 index 0000000..f97576c --- /dev/null +++ b/configs/applications/bing-wallpaper-toggle.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Bing-Wallpaper an/aus +GenericName=Tages-Wallpaper umschalten +Comment=Tägliches Bing-Wallpaper ein- oder ausschalten +Exec=/usr/bin/bing-wallpaper-toggle.sh +Icon=preferences-desktop-wallpaper +Terminal=false +Type=Application +Categories=Settings;DesktopSettings; +Keywords=wallpaper;bing;hintergrund; diff --git a/configs/skel/.config/noctalia/wallpaper.toml b/configs/skel/.config/noctalia/wallpaper.toml index 3367e6d..56f7833 100644 --- a/configs/skel/.config/noctalia/wallpaper.toml +++ b/configs/skel/.config/noctalia/wallpaper.toml @@ -1,7 +1,8 @@ # Noctalia Wallpaper-Defaults – fluffy-pancake (Noctalia-Zweig) -# Picker zeigt den flachen System-Pool (alle Fedora-Motive inkl. Extras als -# Symlinks, da der Picker keine Unterordner sieht). Eigene Bilder: in der -# GUI (Wallpaper-Panel) auf ~/Bilder umstellen oder hier eintragen. +# Picker zeigt /usr/share/backgrounds (alle Fedora-Motive inkl. Extras). +# Unterordner: im Panel einmalig "Flatten" einschalten (bleibt gespeichert), +# oder in Ordner navigieren. Eigene Bilder: in der GUI (Wallpaper-Panel) +# auf ~/Bilder umstellen oder hier eintragen. # GUI-Aenderung landet in settings.toml und gewinnt ueber dieser Datei. [wallpaper] -directory = "/usr/share/noctalia-wallpapers" +directory = "/usr/share/backgrounds" diff --git a/configs/systemd/user/bing-wallpaper.service b/configs/systemd/user/bing-wallpaper.service new file mode 100644 index 0000000..e01e8d8 --- /dev/null +++ b/configs/systemd/user/bing-wallpaper.service @@ -0,0 +1,8 @@ +[Unit] +Description=Tages-Wallpaper von Bing laden und setzen +After=network-online.target +Wants=network-online.target + +[Service] +Type=oneshot +ExecStart=/usr/bin/bing-wallpaper.sh diff --git a/configs/systemd/user/bing-wallpaper.timer b/configs/systemd/user/bing-wallpaper.timer new file mode 100644 index 0000000..70ef5b3 --- /dev/null +++ b/configs/systemd/user/bing-wallpaper.timer @@ -0,0 +1,12 @@ +# Taeglich frisches Bing-Wallpaper (06:00, bei ausgeschaltetem Rechner +# nachgeholt). Abschalten pro User mit: +# systemctl --user disable --now bing-wallpaper.timer +[Unit] +Description=Taeglich Bing-Wallpaper laden + +[Timer] +OnCalendar=*-*-* 06:00:00 +Persistent=true + +[Install] +WantedBy=timers.target diff --git a/scripts/bing-wallpaper-toggle.sh b/scripts/bing-wallpaper-toggle.sh new file mode 100644 index 0000000..c360406 --- /dev/null +++ b/scripts/bing-wallpaper-toggle.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +# bing-wallpaper-toggle: Bing-Tages-Wallpaper an/aus schalten (User-Timer). +# Fuer den Noctalia-Launcher (.desktop-Datei) - kein Terminal noetig. +set -euo pipefail + +NOTIFY="/usr/bin/notify-send" + +if systemctl --user is-enabled --quiet bing-wallpaper.timer; then + systemctl --user disable --now bing-wallpaper.timer + msg="Bing-Wallpaper ausgeschaltet" +else + systemctl --user enable --now bing-wallpaper.timer + msg="Bing-Wallpaper eingeschaltet (taeglich 06:00 Uhr)" +fi + +if command -v "$NOTIFY" >/dev/null; then + "$NOTIFY" "Bing-Wallpaper" "$msg" --app-name="Bing-Wallpaper" --icon=preferences-desktop-wallpaper || true +else + echo "$msg" +fi diff --git a/scripts/bing-wallpaper.sh b/scripts/bing-wallpaper.sh new file mode 100644 index 0000000..533b6b7 --- /dev/null +++ b/scripts/bing-wallpaper.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +# bing-wallpaper: Tages-Wallpaper von Bing laden und direkt setzen. +# Quelle: HPImageArchive-API (inoffiziell, aber seit Jahren stabil), +# Markt de-DE, UHD-Aufloesung. Lizenz: nur zur privaten Nutzung als +# Hintergrund (keine Redistribution - es wird nur heruntergeladen). +# Ablage: ~/Bilder/Bing/bing-YYYY-MM-DD.jpg, Retention 7 Tage. +# Setzen via Noctalia-IPC (persistiert + triggert Theme-Resolve neu). +# Laeuft die Shell gerade nicht, bleibt die Datei fuer spaeter liegen. +set -euo pipefail + +API="https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=de-DE" +OUTDIR="${HOME}/Bilder/Bing" +[[ -d "${HOME}/Bilder" ]] || OUTDIR="${HOME}/Pictures/Bing" +mkdir -p "${OUTDIR}" + +TODAY="$(date +%F)" +TARGET="${OUTDIR}/bing-${TODAY}.jpg" + +if [[ ! -s "${TARGET}" ]]; then + JSON="$(curl -fsSL --retry 3 --retry-delay 5 "${API}")" + URLBASE="$(printf '%s' "${JSON}" | jq -r '.images[0].urlbase // empty')" + [[ -n "${URLBASE}" ]] || { echo "Bing-Antwort ohne urlbase"; exit 1; } + curl -fsSL --retry 3 --retry-delay 5 -o "${TARGET}" "https://www.bing.com${URLBASE}_UHD.jpg" + echo "Geladen: ${TARGET}" +else + echo "Bereits vorhanden: ${TARGET}" +fi + +# Alte behalten wir 7 Tage (Rotation via Noctalia-Automation moeglich) +ls -t "${OUTDIR}"/bing-*.jpg 2>/dev/null | tail -n +8 | xargs -r rm -f -- +echo "Bereinigt, behalten: $(ls "${OUTDIR}"/bing-*.jpg 2>/dev/null | wc -l)" + +# Direkt setzen (schlaegt fehl ohne laufende Shell -> Datei bleibt liegen) +noctalia msg wallpaper-set "${TARGET}" && echo "Gesetzt: ${TARGET}" || echo "Noctalia laeuft nicht - Datei liegt bereit"