diff --git a/modules/nixos/frajul-auto-upgrade.nix b/modules/nixos/frajul-auto-upgrade.nix index 4b9006b..feda4ef 100644 --- a/modules/nixos/frajul-auto-upgrade.nix +++ b/modules/nixos/frajul-auto-upgrade.nix @@ -8,7 +8,8 @@ flagFile = "/var/lib/frajul-auto-upgrade/flag"; lockFile = "/var/lib/frajul-auto-upgrade/lock"; - lastStatusFile = "/var/lib/nixos-auto-upgrade/last-status"; + lastStatusFile = "/var/lib/frajul-auto-upgrade/last-status"; + lastAttemptFile = "/var/lib/frajul-auto-upgrade/last-attempt"; in { options.modules.frajulAutoUpgrade = { enable = lib.mkEnableOption "NixOS auto-upgrade on boot"; @@ -31,6 +32,7 @@ in { "d /var/lib/frajul-auto-upgrade 0755 root root -" "f ${flagFile} 0766 root root -" "f ${lastStatusFile} 0644 root root -" + "f ${lastAttemptFile} 0644 root root -" ]; environment.systemPackages = [ @@ -39,11 +41,24 @@ in { FLAG_FILE="${flagFile}" LOCK_FILE="${lockFile}" LAST_STATUS_FILE="${lastStatusFile}" + LAST_ATTEMPT_FILE="${lastAttemptFile}" + + TODAY=$(date +%Y-%m-%d) if [ ! -f "$FLAG_FILE" ] || [ "$(cat "$FLAG_FILE")" != "enabled" ]; then + echo "Auto upgrade disabled. Exiting." exit 0 fi + # Check if already attempted today + if [ -f "$LAST_ATTEMPT_FILE" ]; then + LAST_ATTEMPT_DATE=$(cut -d' ' -f1 "$LAST_ATTEMPT_FILE") + if [ "$LAST_ATTEMPT_DATE" = "$TODAY" ]; then + echo "Update already attempted today. Skipping." + exit 0 + fi + fi + if [ -f "$LOCK_FILE" ]; then echo "Already running" exit 1 @@ -57,6 +72,9 @@ in { else echo "failure" > "$LAST_STATUS_FILE" fi + + # Write full timestamp + date '+%Y-%m-%d %H:%M:%S' > "$LAST_ATTEMPT_FILE" '') (pkgs.writeShellScriptBin "frajul-auto-upgrade-status" '' @@ -64,25 +82,31 @@ in { FLAG_FILE="${flagFile}" LOCK_FILE="${lockFile}" LAST_STATUS_FILE="${lastStatusFile}" + LAST_ATTEMPT_FILE="${lastAttemptFile}" if [ -f "$LOCK_FILE" ]; then ICON=" " STATUS="running" elif [ -f "$FLAG_FILE" ] && [ "$(cat "$FLAG_FILE")" == "enabled" ]; then - LAST="unknown" + LAST_STATUS="unknown" + LAST_ATTEMPT="never" if [ -f "$LAST_STATUS_FILE" ]; then - LAST=$(cat "$LAST_STATUS_FILE") + LAST_STATUS=$(cat "$LAST_STATUS_FILE") fi - if [ "$LAST" = "success" ]; then + if [ -f "$LAST_ATTEMPT_FILE" ]; then + LAST_ATTEMPT=$(cat "$LAST_ATTEMPT_FILE") + fi + + if [ "$LAST_STATUS" = "success" ]; then ICON="" - elif [ "$LAST" = "failure" ]; then + elif [ "$LAST_STATUS" = "failure" ]; then ICON="" else ICON="" fi - STATUS="enabled (last: $LAST)" + STATUS="enabled (last attempt: $LAST_ATTEMPT, $LAST_STATUS)" else ICON=" " STATUS="disabled"