{ lib, config, inputs, system, pkgs, ... }: with lib; let cfg = config.modules.desktop.swww; wallpapersFolder = "${pkgs.my.wallpapers}/share/backgrounds"; lastWallpaper = "$XDG_DATA_HOME/swww-last-wallpaper"; in { options.modules.desktop.swww = { enable = mkEnableOption "Enable swww, a Solution to your Wayland Wallpaper Woes"; package = mkOption { type = types.package; default = pkgs.swww; example = "pkgs.swww"; }; setScript = mkOption { type = types.package; default = pkgs.writeShellScript "swww-set" '' if [ ! -f "${lastWallpaper}" ]; then echo "$(ls ${wallpapersFolder} | shuf -n 1)" > "${lastWallpaper}" fi ${lib.getExe cfg.package} img "${wallpapersFolder}/$(cat ${lastWallpaper})" --transition-type none ''; }; swapScript = mkOption { type = types.package; default = pkgs.writeShellScript "swww-swap" '' file=$(ls ${wallpapersFolder} | ${lib.getExe config.modules.desktop.rofi.package} -dmenu -sep '\n' -i -p "select a wallpaper") wallpaper="${wallpapersFolder}/$file" [ ! -f "$wallpaper" ] && exit 1 ${lib.getExe cfg.package} img "$wallpaper" --transition-type grow --transition-fps 60 --transition-pos 0.915,0.977 --transition-duration 1.5 echo "$file" > "${lastWallpaper}" ''; }; }; config = mkIf cfg.enable { hm.home.packages = [ cfg.package ]; hm.systemd.user.services.swww = { Unit = { Description = "swww, a Solution to your Wayland Wallpaper Woes"; After = [ "graphical-session-pre.target" ]; PartOf = [ "graphical-session.target" ]; }; Install = { WantedBy = [ "graphical-session.target" ]; }; Service = { Type = "simple"; ExecStart = "${cfg.package}/bin/swww-daemon"; ExecStartPost = "${cfg.setScript}"; Restart = "on-failure"; RestartSec = 5; }; }; }; }