{ lib, config, pkgs, ... }: { options = let inherit (lib) mkOption types; in { hyprpaper = { wallpaperFolder = mkOption { type = types.str; }; }; }; config = let cfg = config.hyprpaper; hyprlandCfg = config.hyprland; changeWallpaperScript = pkgs.writeShellScriptBin "change-wallpaper" ( lib.concatStringsSep "\n" ( lib.flatten ( map ( m: let output = m.name; wallpaper = "\"$(${pkgs.findutils}/bin/find -L \"${cfg.wallpaperFolder}\" -type f | ${pkgs.coreutils}/bin/shuf -n 1)\""; in [ "wallpaper=${wallpaper}" "${pkgs.hyprland}/bin/hyprctl hyprpaper preload $wallpaper" "${pkgs.hyprland}/bin/hyprctl hyprpaper wallpaper ${output},$wallpaper" ] ) hyprlandCfg.monitors ) ++ [ "${pkgs.hyprland}/bin/hyprctl hyprpaper unload all" ] ) ); in { hyprland.autoStart = [ "${pkgs.hyprpaper}/bin/hyprpaper" "sleep 2; ${changeWallpaperScript}/bin/change-wallpaper" ]; home-manager.users.kalle.home.packages = with pkgs; [ hyprpaper changeWallpaperScript ]; }; }