{ lib, config, pkgs, flakeRoot, ... }: { lib, config, pkgs, flakeRoot, ... }: let username = config.defaultUser or "henrov"; homeDir = "/home/${username}"; wallpaperSrc = "${flakeRoot}/assets/traveldroid/Wallpapers"; wallpaperDst = "${homeDir}/Wallpapers"; # Script to set random wallpapers per workspace setWallpaperScript = '' #!/usr/bin/env bash WALLS=("${wallpaperDst}"/*) NUM_WALLS=${#WALLS[@]} # Get workspace IDs WS_IDS=($(hyprctl workspaces -j | jq -r '.[].id')) for i in "${!WS_IDS[@]}"; do WALL="${WALLS[$((i % NUM_WALLS))]}" swww img "$WALL" --workspace "${WS_IDS[$i]}" --transition-type fade slide blend done ''; in { ############################# # System packages ############################# environment.systemPackages = [ pkgs.swww pkgs.waypaper pkgs.rsync pkgs.jq ]; ############################# # Copy wallpaper folder (unchanged) ############################# 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 = '' for i in $(seq 1 10); do id ${username} && break sleep 1 done mkdir -p "${wallpaperDst}" 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 pkgs.jq ]; # Copy script to user home home.file = { ".config/wallpapers/set-wallpapers-per-workspace.sh".text = setWallpaperScript; }; # 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" ]; }; }; # Initialize wallpapers per workspace systemd.user.services.swww-init = { Unit = { Description = "Initialize wallpapers per workspace"; After = [ "swww-daemon.service" ]; }; Service = { Type = "oneshot"; ExecStart = "${homeDir}/.config/wallpapers/set-wallpapers-per-workspace.sh"; }; Install = { WantedBy = [ "graphical-session.target" ]; }; }; }; }; }