alqueva/hosts/shared/alarm-clock.nix

76 lines
1.8 KiB
Nix
Raw Normal View History

{
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"}";
};
};
};
}