nixos/shared/modules/services/wallpaper-rotator.nix
2026-01-23 13:44:07 -07:00

101 lines
2.7 KiB
Nix

{ config, lib, pkgs, ... }:
let
cfg = config.services.wallpaperRotator;
in
{
options.services.wallpaperRotator = {
enable = lib.mkEnableOption "wallpaper rotation service using wpaperd";
user = lib.mkOption {
type = lib.types.str;
description = "Username for the wallpaper service";
};
wallpaperPath = lib.mkOption {
type = lib.types.str;
default = "/home/${cfg.user}/nixos/shared/modules/services/wallpapers";
description = "Path to the wallpaper directory";
};
duration = lib.mkOption {
type = lib.types.str;
default = "5m";
example = "30s";
description = "How long to display each wallpaper (e.g., 30s, 5m, 1h)";
};
sorting = lib.mkOption {
type = lib.types.enum [ "random" "ascending" "descending" ];
default = "random";
description = "Order in which to display wallpapers";
};
mode = lib.mkOption {
type = lib.types.enum [ "center" "fit" "fit-border-color" "stretch" "tile" ];
default = "center";
description = "How to display wallpapers when size differs from display resolution";
};
transition = {
effect = lib.mkOption {
type = lib.types.str;
default = "fade";
example = "hexagonalize";
description = ''
Transition effect name. Available effects include:
fade, hexagonalize, simple-zoom, swirl, circle, wipe, slide, etc.
See wpaperd documentation for full list.
'';
};
duration = lib.mkOption {
type = lib.types.int;
default = 300;
example = 2000;
description = "Transition duration in milliseconds";
};
};
queueSize = lib.mkOption {
type = lib.types.int;
default = 10;
description = "Size of wallpaper history queue for random mode";
};
initialTransition = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable transition effect at wpaperd startup";
};
};
config = lib.mkIf cfg.enable {
home-manager.users.${cfg.user} = {
services.wpaperd = {
enable = true;
settings = {
# Default configuration for all displays
default = {
path = cfg.wallpaperPath;
duration = cfg.duration;
sorting = cfg.sorting;
mode = cfg.mode;
transition-time = cfg.transition.duration;
queue-size = cfg.queueSize;
initial-transition = cfg.initialTransition;
};
# Apply transition effect
"default.transition.${cfg.transition.effect}" = {};
};
};
# Add wpaperd CLI tool to user packages for manual control
home.packages = with pkgs; [
wpaperd
];
};
};
}