{ lib, config, inputs, system, pkgs, ... }: with lib; let cfg = config.modules.desktop.awww; in { options.modules.desktop.awww = { enable = mkEnableOption "Enable awww, an Answer to your Wayland Wallpaper Woes"; package = mkOption { type = types.package; default = pkgs.awww; example = "pkgs.awww"; }; wallpapersFolder = mkOption { type = types.str; default = "${pkgs.my.wallpapers}/share/backgrounds"; example = "$XDG_PICTURES_DIR/wallpapers"; }; lastWallpaper = mkOption { type = types.str; default = "$XDG_DATA_HOME/awww-last-wallpaper"; example = "$XDG_DATA_HOME/awww-last-wallpaper"; }; lastWallpaperSym = mkOption { type = types.str; default = "$XDG_DATA_HOME/awww-last-wallpaper-sym"; example = "$XDG_DATA_HOME/awww-last-wallpaper-sym"; }; setScript = mkOption { type = types.package; default = pkgs.writeShellScript "awww-set" '' set -euo pipefail if [ ! -f "${cfg.lastWallpaper}" ]; then echo "$(ls ${cfg.wallpapersFolder} | shuf -n 1)" > "${cfg.lastWallpaper}" fi ln -sf "${cfg.wallpapersFolder}/$(cat ${cfg.lastWallpaper})" "${cfg.lastWallpaperSym}" # in case the hash of the pkg changes ${lib.getExe cfg.package} img "${cfg.wallpapersFolder}/$(cat ${cfg.lastWallpaper})" --transition-type none ''; }; swapScript = mkOption { type = types.package; default = pkgs.writeShellScript "awww-swap" '' set -euo pipefail file=$(ls ${cfg.wallpapersFolder} | dmenu -p "select a wallpaper") wallpaper="${cfg.wallpapersFolder}/$file" [ ! -f "$wallpaper" ] && exit 1 ${lib.getExe cfg.package} img "$wallpaper" --transition-type grow --transition-fps 60 --transition-pos 1.0,1.0 --transition-duration 1.5 ln -sf "$wallpaper" "${cfg.lastWallpaperSym}" echo "$file" > "${cfg.lastWallpaper}" ''; }; }; config = mkIf cfg.enable { hm.home.packages = [ cfg.package ]; hm.systemd.user.services.awww = { Unit = { Description = "awww, an Answer 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/awww-daemon"; ExecStartPost = "${cfg.setScript}"; Restart = "on-failure"; RestartSec = 5; }; }; }; }