{ lib, config, pkgs, flakeRoot, ... }: let username = config.defaultUser or "henrov"; homeDir = "/home/${username}"; wallpaperSrc = "${flakeRoot}/assets/traveldroid/Wallpapers"; wallpaperDst = "${homeDir}/Wallpapers"; in { ################################# # System packages ################################# environment.systemPackages = [ pkgs.swww pkgs.waypaper pkgs.rsync ]; ################################# # Copy wallpaper folder (FIXED) ################################# systemd.services.copyWallpaperStuff = { description = "Copy wallpaper assets to user home"; wantedBy = [ "multi-user.target" ]; after = [ "systemd-user-sessions.service" ]; wants = [ "systemd-user-sessions.service" ]; serviceConfig = { Type = "oneshot"; }; script = '' # Wait until user exists (robust) for i in $(seq 1 10); do id ${username} && break sleep 1 done mkdir -p "${wallpaperDst}" # Copy only if empty (prevents overwrite) if [ -z "$(ls -A ${wallpaperDst})" ]; then cp -r ${wallpaperSrc}/* "${wallpaperDst}/" fi chown -R ${username} "${wallpaperDst}" chmod -R u+rwx "${wallpaperDst}" ''; }; ################################# # Home Manager integration ################################# _module.args.hmUsers = { ${username} = { home.packages = [ pkgs.swww pkgs.waypaper ]; ################################# # swww daemon ################################# systemd.user.services.swww-daemon = { Unit = { Description = "swww wallpaper daemon"; After = [ "graphical-session.target" ]; }; Service = { ExecStart = "${pkgs.swww}/bin/swww-daemon"; Restart = "on-failure"; }; Install = { WantedBy = [ "graphical-session.target" ]; }; }; ################################# # Set wallpaper ################################# systemd.user.services.swww-init = { Unit = { Description = "Initialize wallpapers per workspace"; After = [ "swww-daemon.service" ]; }; Service = { Type = "oneshot"; ExecStart = "${wallpaperDst}/set-wallpapers-per-workspace.sh"; }; Install = { WantedBy = [ "graphical-session.target" ]; }; }; }; }; }