{ pkgs, config, lib, ... }: with lib; let cfg = config.programs.hyprpaper; in { options = { programs.hyprpaper = { enable = mkEnableOption "Hyprpaper - Wayland wallpaper utility"; systemd = { enable = mkEnableOption "autostart service for Hyprpaper"; target = mkOption { type = types.str; default = "graphical-session.target"; example = "hyprland-session.target"; description = '' The systemd target that will automatically start the Hyprpaper service. ''; }; }; settings = with types; { preload = mkOption { type = listOf path; default = []; description = '' Wallpaper images that should be preloaded into memory ''; example = [./wallpapers/tensura.png]; }; wallpapers = mkOption { type = attrsOf str; default = {}; example = {"DP-1" = ./wallpapers/tensura.png;}; description = '' Wallpaper to monitor mapper ''; }; extraConfig = mkOption { type = str; default = ""; description = "Check https://github.com/hyprwm/hyprpaper#usage for info"; example = '' newConfigOption = foo,bar ''; }; }; }; }; config = { home.packages = mkIf cfg.enable [pkgs.hyprpaper]; systemd.user.services.hyprpaper = mkIf cfg.systemd.enable { Unit = { Description = "autostart service for Hyprpaper"; Documentation = "https://github.com/hyprwm/hyprpaper"; BindsTo = ["graphical-session.target"]; After = ["graphical-session-pre.target"]; }; Service = { ExecStart = "${pkgs.hyprpaper}/bin/hyprpaper"; ExecReload = "${pkgs.coreutils}/bin/kill -SIGUSR2 $MAINPID"; Restart = "on-failure"; KillMode = "mixed"; }; Install = {WantedBy = [cfg.systemd.target];}; }; xdg.configFile = mkIf cfg.enable { "hypr/hyprpaper.conf".text = '' # Auto-generated by Nix home-manager module # hyprpaper.settings.preload ${(lists.foldl (acc: v: acc + '' preload = ${v} '') "" cfg.settings.preload)} # hyprpaper.settings.wallpapers ${(lists.foldl (acc: v: acc + '' wallpaper = ${v} '') "" (pkgs.lib.attrsets.mapAttrsToList (name: val: name + "," + val) cfg.settings.wallpapers))} # hyprpaper.settings.extraConfig ${cfg.settings.extraConfig} ''; }; }; }