Regenerated

This commit is contained in:
2026-03-29 11:48:25 +00:00
parent 8f5e8e499e
commit db2f3e522e
3 changed files with 570 additions and 375 deletions
@@ -3,13 +3,75 @@
let
username = config.defaultUser or "henrov";
homeDir = "/home/${username}";
wallpaperSrc = "${flakeRoot}/assets/Wallpapers";
wallpaperDst = "${homeDir}/Wallpapers";
wallpaperSrc = "${flakeRoot}/assets/traveldroid/Wallpapers";
script = pkgs.writeShellScript "wallpaper-sync-and-set.sh" ''
#!/usr/bin/env bash
set -euo pipefail
SRC="${wallpaperSrc}"
DST="${wallpaperDst}"
mkdir -p "$SRC" "$DST"
########################################
# 2-way sync (additive, newer wins)
########################################
# SRC -> DST
rsync -au "$SRC/" "$DST/"
# DST -> SRC
rsync -au "$DST/" "$SRC/"
########################################
# Initialize swww (safe if already running)
########################################
if ! pgrep -x swww-daemon >/dev/null; then
swww init
sleep 1
fi
########################################
# Get workspaces
########################################
WORKSPACES=$(hyprctl workspaces -j | jq -r '.[].id')
########################################
# Function: set random wallpaper for workspace
########################################
set_wallpaper() {
local WS="$1"
WALL=$(find "$DST" -type f | shuf -n 1)
if [ -n "$WALL" ]; then
hyprctl dispatch workspace "$WS"
swww img "$WALL" --transition-type any
fi
}
########################################
# If workspace passed only update that
########################################
if [ "$#" -eq 1 ]; then
set_wallpaper "$1"
exit 0
fi
########################################
# Otherwise: update all workspaces
########################################
for WS in $WORKSPACES; do
set_wallpaper "$WS"
done
'';
in
{
############################
#################################
# Packages
############################
#################################
environment.systemPackages = with pkgs; [
swww
waypaper
@@ -17,43 +79,46 @@ in
rsync
];
############################
# Service (does the work)
############################
systemd.user.services.wallpaperUpdater = {
description = "Sync wallpapers and apply them";
after = [ "default.target" ];
#################################
# Service: main worker
#################################
systemd.user.services.wallpaperSync = {
description = "2-way sync wallpapers + set random per workspace";
after = [ "graphical-session.target" ];
serviceConfig = {
Type = "oneshot";
ExecStart = ''
# Create destination folder
mkdir -p ${wallpaperDst}
# Copy FULL folder contents (mirror)
rsync -a --delete ${wallpaperSrc}/ ${wallpaperDst}/
# Ensure script is executable
chmod +x ${wallpaperDst}/set-wallpapers-per-workspace.sh
# Run script
${wallpaperDst}/set-wallpapers-per-workspace.sh
'';
ExecStart = "${script}";
};
wantedBy = [ "default.target" ]; # run at login
};
############################
# Timer (runs every 15 min)
############################
systemd.user.timers.wallpaperUpdater = {
description = "Run wallpaper updater every 15 minutes";
#################################
# Timer: every hour
#################################
systemd.user.timers.wallpaperSync = {
description = "Run wallpaper sync hourly";
wantedBy = [ "timers.target" ];
timerConfig = {
OnBootSec = "2min"; # run shortly after login
OnUnitActiveSec = "15min"; # repeat every 15 min
OnBootSec = "2min";
OnUnitActiveSec = "1h";
Persistent = true;
};
};
#################################
# Hyprland integration (new workspace)
#################################
# This assumes you manage Hyprland via Nix/Home Manager
#################################
environment.etc."hypr/hyprland.conf".text = lib.mkAfter ''
# Run wallpaper script when workspace changes
bind = SUPER, Return, exec, ${script}
# Hook: when workspace is created/switched
exec-once = hyprctl --batch "dispatch exec ${script}"
'';
}