a
This commit is contained in:
77
hosts/default/apps/files/crontab-executable.ts
Normal file
77
hosts/default/apps/files/crontab-executable.ts
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
import fs from "fs";
|
||||||
|
import path from "path";
|
||||||
|
import { exec } from "child_process";
|
||||||
|
|
||||||
|
const stateFilePath = path.join(
|
||||||
|
process.env.HOME || "~",
|
||||||
|
".regretevator-challenge-state"
|
||||||
|
);
|
||||||
|
|
||||||
|
const regretevatorStateFile = path.join(
|
||||||
|
process.env.HOME || "~",
|
||||||
|
".regretevator_state"
|
||||||
|
);
|
||||||
|
|
||||||
|
if (fs.existsSync(regretevatorStateFile)) process.exit(0);
|
||||||
|
|
||||||
|
function sendReminderNotification() {
|
||||||
|
exec(
|
||||||
|
`notify-send -a "tuxstrap" -u low "OCbwoy3's Dotfiles" "It's time for Regretevator!"`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendReminderNotificationPlayed(floors: number) {
|
||||||
|
exec(
|
||||||
|
`notify-send -a "tuxstrap" -u low "OCbwoy3's Dotfiles" "Man... Only ${floors} floors, really? You can do better than that."`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendSpamNotifications() {
|
||||||
|
for (let i = 0; i < 2; i++) {
|
||||||
|
exec(
|
||||||
|
`notify-send -a "tuxstrap" -u low "OCbwoy3's Dotfiles" "HURRY UP!!!!!"`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function writeState(floorsSurvived: number) {
|
||||||
|
const state = {
|
||||||
|
date: new Date().toISOString().split("T")[0],
|
||||||
|
floors: floorsSurvived,
|
||||||
|
};
|
||||||
|
fs.writeFileSync(stateFilePath, JSON.stringify(state, null, 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkChallengeState() {
|
||||||
|
if (fs.existsSync(stateFilePath)) {
|
||||||
|
const state = JSON.parse(fs.readFileSync(stateFilePath, "utf-8"));
|
||||||
|
const today = new Date().toISOString().split("T")[0];
|
||||||
|
const stateDate = state.date;
|
||||||
|
const floorsSurvived = state.floors;
|
||||||
|
|
||||||
|
const now = new Date();
|
||||||
|
const hoursLeft = 24 - now.getHours();
|
||||||
|
|
||||||
|
if (stateDate === today) {
|
||||||
|
if (floorsSurvived < 25) {
|
||||||
|
if (floorsSurvived === 0) {
|
||||||
|
sendReminderNotification();
|
||||||
|
} else {
|
||||||
|
sendReminderNotificationPlayed(floorsSurvived);
|
||||||
|
}
|
||||||
|
if (hoursLeft <= 4) {
|
||||||
|
sendSpamNotifications();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
sendReminderNotification();
|
||||||
|
writeState(0); // Write state with 0 floors if the user hasn't played today
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
sendReminderNotification();
|
||||||
|
writeState(0); // Write state with 0 floors if no state file exists
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run the check
|
||||||
|
checkChallengeState();
|
||||||
@@ -2,22 +2,24 @@
|
|||||||
|
|
||||||
pkgs.stdenv.mkDerivation {
|
pkgs.stdenv.mkDerivation {
|
||||||
name = "tuxstrap-cron-executable";
|
name = "tuxstrap-cron-executable";
|
||||||
src = pkgs.fetchFromGitHub {
|
src = ./files/crontab-executable.ts;
|
||||||
owner = "ocbwoy3";
|
|
||||||
repo = "tuxstrap";
|
|
||||||
rev = "v1.2.0";
|
|
||||||
sha256 = "sha256-YZ+GD9hs8PAf45kFklrR3j1hUWovKWllr2iQuh3gRms="; # Replace with the actual sha256
|
|
||||||
};
|
|
||||||
|
|
||||||
buildInputs = [ pkgs.bun ];
|
unpackPhase = ''
|
||||||
|
mkdir -p $out
|
||||||
buildPhase = ''
|
cp $src tuxstrap-crontab.bin
|
||||||
bun build ./daily-challenge-reminder-crontab.ts --compile --outfile=tuxstrap-crontab
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir -p $out/bin
|
mkdir -p $out/bin
|
||||||
# cp daily-challenge-reminder-crontab.ts $out/bin/crontab-script.ts
|
mkdir -p $out/lib
|
||||||
cp tuxstrap-crontab $out/bin/
|
echo '${"#"}!/bin/bash' > $out/bin/tuxstrap-crontab
|
||||||
|
echo '${pkgs.bun}/bin/bun run $out/lib/crontab-executable.ts' >> $out/bin/tuxstrap-crontab
|
||||||
|
chmod +x $out/bin/tuxstrap-crontab
|
||||||
|
|
||||||
|
mv crontab-executable $out/lib/
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
meta = with nixpkgs.lib; {
|
||||||
|
description = "tuxstrap crontab executable";
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user