sane-deadlines: port from bash -> ysh

This commit is contained in:
2025-05-11 15:16:21 +00:00
parent 4645e6389e
commit 3ca0b9ae28
2 changed files with 26 additions and 24 deletions

View File

@@ -82,7 +82,7 @@ let
srcRoot = ./src;
pkgs = [ "nix" ];
};
deadlines = static-nix-shell.mkBash {
deadlines = static-nix-shell.mkYsh {
pname = "sane-deadlines";
srcRoot = ./src;
pkgs = [ "coreutils-full" "gnused" ];

View File

@@ -1,5 +1,5 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p bash -p coreutils-full -p gnused
#!nix-shell -i ysh -p coreutils-full -p gnused -p oils-for-unix
# processes a tab-separated "deadlines" file and alerts for any upcoming events.
#
@@ -17,29 +17,31 @@
# 2023-04-01 7d the other pie day :o
# configurables:
deadlines=~/knowledge/planner/deadlines.tsv
var deadlines = "$[ENV.HOME]/knowledge/planner/deadlines.tsv"
if ! test -f "$deadlines"; then
echo "WARNING: $deadlines sane-deadlines file not found"
exit 1
fi
if ! test -f "$deadlines" {
echo "WARNING: $deadlines sane-deadlines file not found"
exit 1
}
now=$(date +%s)
sort "$deadlines" | while read line; do
# parse line
deadline_field=$(echo "$line" | cut -f 1)
threshold_field=$(echo "$line" | cut -f 2)
description_field=$(echo "$line" | cut -f 3)
var now=$(date +%s)
for line in ($(cat "$deadlines") => split(u'\n')) {
# parse line
var deadline_field=$(echo "$line" | cut -f 1)
var threshold_field=$(echo "$line" | cut -f 2)
var description_field=$(echo "$line" | cut -f 3)
# normalize dates into seconds since unix epoch
deadline=$(date -d "$deadline_field" +%s)
threshold=$(echo "$threshold_field" | sed 's/d/day /g')
birthtime=$(date -d "$deadline_field - $threshold" +%s)
# normalize dates into seconds since unix epoch
var deadline=$(date -d "$deadline_field" +%s)
var threshold=$(echo "$threshold_field" | sed 's/d/day /g')
var birthtime=$(date -d "$deadline_field - $threshold" +%s)
# show the event iff it's near
# 86400 = 24*60*60 = # of seconds in a day
if test "$now" -ge "$birthtime"; then
days_until=$(( ($deadline - $now + 86399) / 86400 ))
echo "in $days_until day(s): $description_field"
fi
done
# show the event iff it's near
# 86400 = 24*60*60 = # of seconds in a day
# 10080 = 24*60*7 = # of seconds between UTC and UTC-7
# 11520 = 24*60*8 = # of seconds between UTC and UTC-8
if (now >= birthtime) {
var days_until = int((deadline - now + 86399) / 86400)
echo "in $days_until day(s): $description_field"
}
}