summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--machines/firelink.nix1
-rw-r--r--modules/rtc-wakeup.nix45
2 files changed, 46 insertions, 0 deletions
diff --git a/machines/firelink.nix b/machines/firelink.nix
index 3945bc5..c2dd97e 100644
--- a/machines/firelink.nix
+++ b/machines/firelink.nix
@@ -20,6 +20,7 @@ in {
orbekk.gaming.enable = true;
orbekk.desktop.enable = true;
orbekk.builder.enableRemoteBuilds = true;
+ orbekk.rtc-wakeup.enable = true;
orbekk.simple-firewall.allowedTCPPorts = [
# pulseaudio
diff --git a/modules/rtc-wakeup.nix b/modules/rtc-wakeup.nix
new file mode 100644
index 0000000..9477838
--- /dev/null
+++ b/modules/rtc-wakeup.nix
@@ -0,0 +1,45 @@
+{ config, lib, pkgs, ... }:
+
+let cfg = config.orbekk.rtc-wakeup;
+in {
+ options = {
+ orbekk.rtc-wakeup = {
+ enable = lib.mkEnableOption "Enable automatic wakeup using rtc";
+ weekdayWakeupTime = lib.mkOption {
+ type = lib.types.str;
+ default = "05:55";
+ description = "Wakeup time on weekdays";
+ };
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ systemd.services.schedule-rtc-wakeup = {
+ description = "Schedule next wakeup time";
+ script = ''
+ if [[ ! $(cat /sys/class/rtc/rtc0/wakealarm) < $(date +%s) ]]; then
+ echo "No need to reschedule. Current alarm:"
+ cat /proc/driver/rtc
+ fi
+
+ if [[ $(date +%w) == "4" ]]; then
+ WAKEUP_TIME='monday ${cfg.weekdayWakeupTime}'
+ else
+ WAKEUP_TIME='tomorrow ${cfg.weekdayWakeupTime}'
+ fi
+
+ date -d "$WAKEUP_TIME" +%s > /sys/class/rtc/rtc0/wakealarm
+ echo "Scheduled wakeup time"
+ cat /proc/driver/rtc
+ '';
+ };
+ systemd.timers.schedule-rtc-wakeup = {
+ wantedBy = [ "multi-user.target" ];
+ timerConfig = {
+ Persistent = true;
+ OnBootSec = "1m";
+ OnUnitActiveSec = "24h";
+ };
+ };
+ };
+}