{ config, pkgs, lib, flakeRoot, ... }: let username = config.defaultUser or "henrov"; homeDir = "/home/${username}"; wallpaperDst = "${homeDir}/Wallpapers"; scriptSrc = "${flakeRoot}/assets/traveldroid/Wallpapers/set-wallpapers-per-workspace.sh"; in { ############################ # Packages ############################ environment.systemPackages = with pkgs; [ swww waypaper jq ]; ############################ # Copy Wallpapers and Script ############################ systemd.user.services.copyWallpapers = { description = "Copy Wallpapers and script to home"; after = [ "network.target" ]; serviceConfig.Type = "oneshot"; serviceConfig.ExecStart = '' mkdir -p ${wallpaperDst} cp -r ${flakeRoot}/assets/traveldroid/Wallpapers/* ${wallpaperDst}/ chown -R ${username}:${username} ${wallpaperDst} chmod +x ${wallpaperDst}/set-wallpapers-per-workspace.sh ''; enable = true; }; ############################ # Periodic wallpaper updater ############################ systemd.user.services.wallpaperPerWorkspace = { description = "Set wallpapers per workspace every 15 minutes"; after = [ "copyWallpapers.service" ]; wants = [ "copyWallpapers.service" ]; serviceConfig.Type = "simple"; serviceConfig.ExecStart = "${wallpaperDst}/set-wallpapers-per-workspace.sh"; install.WantedBy = [ "default.target" ]; }; systemd.user.timers.wallpaperPerWorkspace = { description = "Run wallpaper updater every 15 minutes"; wantedBy = [ "timers.target" ]; timerConfig = { OnBootSec = "1min"; OnUnitActiveSec = "15min"; Persistent = true; # ensures catch-up if missed }; unit = "wallpaperPerWorkspace.service"; enable = true; }; }