88 lines
2.2 KiB
Nix
88 lines
2.2 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
...
|
|
}:
|
|
with lib; let
|
|
cfg = config.home.desktop.hyprpaper;
|
|
in {
|
|
options.home.desktop.hyprpaper = {
|
|
enable = mkEnableOption "Enables Hyprpaper";
|
|
default = mkOption {
|
|
type = types.str;
|
|
default = "/home/phundrak/Pictures/Wallpapers/nord/Nordic6.jpg";
|
|
example = "/home/user/image.jpg";
|
|
};
|
|
wallpapers-dir = mkOption {
|
|
type = types.str;
|
|
default = "/home/phundrak/Pictures/Wallpapers/nord/";
|
|
example = "/home/user/Pictures/";
|
|
};
|
|
rotation-interval = mkOption {
|
|
type = types.str;
|
|
default = "5m";
|
|
example = "10m";
|
|
description = "Interval between wallpaper rotations";
|
|
};
|
|
};
|
|
config = mkIf cfg.enable {
|
|
services.hyprpaper = {
|
|
inherit (cfg) enable;
|
|
settings = {
|
|
ipc = "on";
|
|
splash = false;
|
|
preload = cfg.default;
|
|
wallpaper = ", ${cfg.default}";
|
|
};
|
|
};
|
|
systemd.user = {
|
|
services.hyprpaper-rotation = {
|
|
Unit = {
|
|
Description = "Rotate Hyprpaper wallpaper";
|
|
After = "graphical-session.target";
|
|
};
|
|
Service = {
|
|
Type = "oneshot";
|
|
ExecCondition = "pidof Hyprland";
|
|
ExecStart = "${config.home.homeDirectory}/.config/hypr/hyprpaper-rotate.sh";
|
|
};
|
|
};
|
|
|
|
timers.hyprpaper-rotation = {
|
|
Unit = {
|
|
Description = "Timer for rotating Hyprpaper wallpaper";
|
|
};
|
|
Timer = {
|
|
OnBootSec = cfg.rotation-interval;
|
|
OnUnitActiveSec = cfg.rotation-interval;
|
|
};
|
|
Install = {
|
|
WantedBy = ["timers.target"];
|
|
};
|
|
};
|
|
};
|
|
home.file.".config/hypr/hyprpaper-rotate.sh" = {
|
|
text = ''
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
WALLPAPER_DIR="${cfg.wallpapers-dir}"
|
|
|
|
# Find a random wallpaper
|
|
WP=$(find "$WALLPAPER_DIR" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) | shuf -n 1)
|
|
|
|
if [ -z "$WP" ]; then
|
|
echo "No wallpapers found in $WALLPAPER_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Setting wallpaper to: $WP"
|
|
|
|
# Load and set the wallpaper
|
|
hyprctl hyprpaper preload "$WP" && hyprctl hyprpaper wallpaper ",$WP"
|
|
'';
|
|
executable = true;
|
|
};
|
|
};
|
|
}
|