{ lib, config, pkgs, flakeRoot, ... }: let username = config.defaultUser or "henrov"; homeDir = "/home/${username}"; wallpaperSrc = "${flakeRoot}/assets/traveldroid/Wallpapers"; wallpaperDst = "${homeDir}/Wallpapers"; scriptFile = "${homeDir}/Wallpapers/scripts/set-wallpapers-at-logon.sh"; in { # Make bash available environment.systemPackages = [ pkgs.bash pkgs.rsync pkgs.jq pkgs.swww pkgs.waypaper ]; # Create the copy script using Home Manager, following Waybar style home-manager.users = { ${username} = { home.file = { "copy-wallpapers.sh" = { text = '' #!/usr/bin/env bash set -e echo "Copying wallpapers from ${wallpaperSrc} to ${wallpaperDst} ..." if [ ! -d "${wallpaperSrc}" ]; then echo "ERROR: ${wallpaperSrc} does not exist" exit 1 fi mkdir -p "${wallpaperDst}" # Simple copy, overwrite everything cp -r "${wallpaperSrc}/." "${wallpaperDst}/" # Fix permissions chmod -R u+rwx "${wallpaperDst}" echo "Done copying wallpapers." ''; executable = true; force = true; }; }; }; }; # User service to run the script systemd.user.services.copyWallpapers = { description = "Copy wallpapers from repo to ~/Wallpapers"; after = [ "graphical-session.target" ]; wants = [ "graphical-session.target" ]; serviceConfig = { Type = "oneshot"; ExecStart = "${homeDir}/copy-wallpapers.sh"; Restart = "no"; }; wantedBy = [ "default.target" ]; }; ############################ # User service to run wallpaper script ############################ systemd.user.services.wallpaperAtLogon = { description = "Run wallpaper logon script"; after = [ "graphical-session.target" ]; wants = [ "graphical-session.target" ]; serviceConfig = { Type = "oneshot"; ExecStart = scriptFile; Restart = "no"; }; wantedBy = [ "default.target" ]; }; ############################ # Timer to run the script at login and every 15 minutes ############################ systemd.user.timers.wallpaperAtLogonTimer = { description = "Run wallpaper script at login and every 15 minutes"; wantedBy = [ "timers.target" ]; timerConfig = { OnBootSec = "1min"; # run 1 minute after login OnUnitActiveSec = "15min"; # repeat every 15 minutes Persistent = true; # catch up missed runs }; }; ############################ # Random background per workspace at boot ############################ systemd.user.services.workspaceWallpapers = { description = "Dynamic wallpapers per workspace for Hyprland"; after = [ "graphical-session.target" ]; wants = [ "graphical-session.target" ]; serviceConfig = { ExecStart = "${HOME}/Wallpapers/scripts/workspace-wallpapers.sh"; Restart = "always"; }; wantedBy = [ "default.target" ]; }; }