diff --git a/Droidnix/README.org b/Droidnix/README.org index f81bd4f8b..a0b985ed6 100644 --- a/Droidnix/README.org +++ b/Droidnix/README.org @@ -723,86 +723,101 @@ in Setting up wallpaper engine + wall[pa[per gui #+BEGIN_SRC nix :tangle generated/modules/traveldroid/desktop/wallpaper.nix :noweb tangle :mkdirp yes :eval never-html { 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 (FIXED) - ################################# - + ############################# + # 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"; - }; + + 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 + 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" ]; }; }; - ################################# - # Set wallpaper - ################################# - + # Initialize wallpapers per workspace systemd.user.services.swww-init = { Unit = { Description = "Initialize wallpapers per workspace"; @@ -810,7 +825,7 @@ in }; Service = { Type = "oneshot"; - ExecStart = "${wallpaperDst}/set-wallpapers-per-workspace.sh"; + ExecStart = "${homeDir}/.config/wallpapers/set-wallpapers-per-workspace.sh"; }; Install = { WantedBy = [ "graphical-session.target" ]; diff --git a/Droidnix/generated/modules/traveldroid/desktop/wallpaper.nix b/Droidnix/generated/modules/traveldroid/desktop/wallpaper.nix index 2ec339b08..b64783afa 100644 --- a/Droidnix/generated/modules/traveldroid/desktop/wallpaper.nix +++ b/Droidnix/generated/modules/traveldroid/desktop/wallpaper.nix @@ -1,84 +1,99 @@ { 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 (FIXED) - ################################# - + ############################# + # 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"; - }; + + 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 + 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" ]; }; }; - ################################# - # Set wallpaper - ################################# - + # Initialize wallpapers per workspace systemd.user.services.swww-init = { Unit = { Description = "Initialize wallpapers per workspace"; @@ -86,7 +101,7 @@ in }; Service = { Type = "oneshot"; - ExecStart = "${wallpaperDst}/set-wallpapers-per-workspace.sh"; + ExecStart = "${homeDir}/.config/wallpapers/set-wallpapers-per-workspace.sh"; }; Install = { WantedBy = [ "graphical-session.target" ];