From b7c7bab3131a002426c119476439d65949ada655 Mon Sep 17 00:00:00 2001
From: Knut Ahlers <knut@ahlers.me>
Date: Tue, 11 Feb 2025 17:45:50 +0100
Subject: [PATCH] Make sleep-until laptop-sleep-safe

by not waiting for the whole time at once but sleeping in chunks which
then would wake up the device even when it slept most of the time-diff

Signed-off-by: Knut Ahlers <knut@ahlers.me>
---
 bin/sleep-until | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/bin/sleep-until b/bin/sleep-until
index 8f03d0b..1dcdff6 100755
--- a/bin/sleep-until
+++ b/bin/sleep-until
@@ -1,6 +1,8 @@
 #!/bin/bash
 set -euo pipefail
 
+default_sleep=10
+
 source ${HOME}/bin/script_framework.sh
 
 time=${1:-}
@@ -9,5 +11,10 @@ time=${1:-}
 tdiff=$(($(date -d "$1" +%s) - $(date +%s)))
 [ $tdiff -gt 0 ] || tdiff=$((tdiff + 86400))
 
+ttime=$(date -d "now + ${tdiff} seconds" +%s)
+
 step "Sleeping ${tdiff}s until $(date -d "now + ${tdiff} seconds" "+%Y-%m-%d %H:%M:%S")..."
-sleep ${tdiff}
+while [ $(date +%s) -lt $ttime ]; do
+  tremain=$(( ttime - $(date +%s) ))
+  [ $tremain -gt $default_sleep ] && sleep $default_sleep || sleep $tremain
+done