{ config, pkgs, lib, flakeRoot, ... }: let username = config.defaultUser or "henrov"; homeDir = "/home/${username}"; wallpaperSrc = "${flakeRoot}/assets/traveldroid/Wallpapers"; wallpaperDst = "${homeDir}/Wallpapers"; scriptFile = "${wallpaperDst}/set-wallpapers-at-logon.sh"; in { ############################ # Systemwide packages ############################ environment.systemPackages = with pkgs; [ swww waypaper jq rsync ]; ############################ # User systemd service to start swww, sync wallpapers, and run the script ############################ systemd.user.services.wallpaperSync = { description = "Sync Wallpapers and run set-wallpapers-at-logon.sh"; wants = [ "graphical-session.target" ]; after = [ "graphical-session.target" ]; serviceConfig.Type = "oneshot"; serviceConfig.ExecStart = '' /bin/sh -c ' # Ensure destination exists mkdir -p ${wallpaperDst} # Copy all wallpapers rsync -au --ignore-existing ${wallpaperSrc}/ ${wallpaperDst}/ rsync -au ${wallpaperSrc}/ ${wallpaperDst}/ # Start swww daemon if not running pgrep swww >/dev/null 2>&1 || swww & # Run the logon wallpaper script if it exists [ -x "${scriptFile}" ] && "${scriptFile}" ' ''; serviceConfig.Restart = "on-failure"; }; ############################ # Timer to run the service every 15 minutes ############################ systemd.user.timers.wallpaperSyncTimer = { description = "Run wallpaperSync service every 15 minutes"; wantedBy = [ "timers.target" ]; timerConfig.OnBootSec = "1min"; timerConfig.OnUnitActiveSec = "15min"; timerConfig.Persistent = true; }; }