feat: hyprpaper separate config with auto wallpaper

This commit is contained in:
Lucien Cartier-Tilet 2025-11-02 13:10:25 +01:00
parent 1d5f428cb1
commit 7b929c0b02
2 changed files with 90 additions and 14 deletions

View File

@ -12,6 +12,7 @@ in {
./swaync.nix
./waybar.nix
./wlsunset.nix
./hyprpaper.nix
];
options.home.desktop.hyprland = {
@ -33,6 +34,7 @@ in {
config = mkIf cfg.enable {
home.desktop = {
hyprpaper.enable = true;
rofi.enable = mkDefault true;
swaync.enable = mkDefault true;
waybar = {
@ -41,6 +43,7 @@ in {
};
wlsunset.enable = mkDefault true;
};
services.blueman-applet.enable = true;
wayland.windowManager.hyprland = {
enable = true;
xwayland.enable = true;
@ -274,19 +277,5 @@ in {
bind = SUPER_SHIFT, asterisk, movetoworkspace, 10
'';
};
services = {
blueman-applet.enable = true;
hyprpaper = let
img = "/home/phundrak/Pictures/Wallpapers/nord/Nordic6.jpg";
in {
enable = true;
settings = {
ipc = "on";
splash = false;
preload = img;
wallpaper = ", ${img}";
};
};
};
};
}

View File

@ -0,0 +1,87 @@
{
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;
};
};
}