{ config, lib, pkgs, ... }: let cfg = config.alqueva.programs.sleep-or-die; inherit (lib) mkOption mkEnableOption types mkIf; sleep-or-die = let image = if cfg.image == null then "" else "-i ${cfg.image}"; sound = if cfg.sound == null then "" else "ffplay -nodisp -autoexit ${cfg.sound}"; in pkgs.writeShellApplication { name = "sod"; runtimeInputs = [ pkgs.libnotify pkgs.ffmpeg ]; text = '' notify-send -u critical "${cfg.title}" "${cfg.message}" ${image} ${sound} shutdown +60 "This was automatically invoked by 'sleep-or-die'" ''; }; in { options.alqueva.programs.sleep-or-die = { enable = mkEnableOption "sleep-or-die"; title = mkOption { type = types.str; description = "The title of the notification"; default = "Go to sleep!"; }; message = mkOption { type = types.str; description = "The message of the notification"; default = "You are missing on sleep! You have one hour to use your PC before it shuts off."; }; image = mkOption { type = types.nullOr types.path; description = "The image to display on the notification."; default = null; }; sound = mkOption { type = types.nullOr types.path; description = "The sound to play on notification."; default = null; }; startAt = mkOption { type = types.str; default = "20:00:00"; description = "The time to start the daemon."; }; }; config = mkIf cfg.enable { systemd.user.services.sleep-or-die = { inherit (cfg) startAt; serviceConfig = { RestartSec = 5; ExecStart = "${lib.getExe' sleep-or-die "sod"}"; }; }; }; }