{ 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"; }; startScript = mkOption { type = types.package; default = pkgs.writeScript "swww-start" '' if [ ! -f "${lastWallpaper}" ]; then echo "$(ls ${wallpapersFolder} | shuf -n 1)" > "${lastWallpaper}" fi ${cfg.package}/bin/swww-daemon & ${lib.getExe cfg.package} img "${wallpapersFolder}/$(cat ${lastWallpaper})" --transition-type none ''; }; swapScript = mkOption { type = types.package; default = pkgs.writeScript "swww-swap" '' file=$(ls ${wallpapersFolder} | ${lib.getExe pkgs.rofi-wayland} -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 ]; modules.desktop.execOnStart = [ "${cfg.startScript}" ]; }; }