#!/bin/bash # PC Startup Monitor status script for i3blocks # Shows compact startup compliance status in the status bar # Function to check if today is a monitored day is_monitored_day() { local day_of_week=$(date +%u) if [[ "$day_of_week" == "1" ]] || [[ "$day_of_week" == "5" ]] || [[ "$day_of_week" == "6" ]] || [[ "$day_of_week" == "7" ]]; then return 0 else return 1 fi } # Function to check if current time is in window is_current_time_in_window() { local current_hour=$(date +%H) local current_hour_num=$((10#$current_hour)) if [[ $current_hour_num -ge 5 ]] && [[ $current_hour_num -lt 8 ]]; then return 0 else return 1 fi } # Function to check if PC was booted in window today was_booted_in_window_today() { local today=$(date +%Y-%m-%d) local uptime_seconds=$(awk '{print int($1)}' /proc/uptime 2>/dev/null || echo "0") local boot_time=$(date -d "@$(($(date +%s) - uptime_seconds))" +"%Y-%m-%d %H:%M:%S") local boot_date=$(echo "$boot_time" | cut -d' ' -f1) if [[ "$boot_date" != "$today" ]]; then return 1 fi local boot_hour=$(echo "$boot_time" | cut -d' ' -f2 | cut -d':' -f1) local boot_hour_num=$((10#$boot_hour)) if [[ $boot_hour_num -ge 5 ]] && [[ $boot_hour_num -lt 8 ]]; then return 0 else return 1 fi } # Main logic if ! is_monitored_day; then # Not a monitored day echo "PC:skip" echo echo "#888888" # Gray elif is_current_time_in_window; then # Currently in the window - all good echo "PC:live" echo echo "#00FF00" # Green elif was_booted_in_window_today; then # Was booted in window today - compliant echo "PC:ok" echo echo "#00FF00" # Green else # Was NOT booted in window today - non-compliant echo "PC:warn" echo echo "#FF0000" # Red fi