| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- #!/usr/bin/env zsh
- # Configuration
- MAINTENANCE_SCRIPT="$HOME/.local/bin/maintenance.sh"
- TIMESTAMP_FILE="$HOME/.local/share/arch_maintenance_timestamp"
- DISABLED_FILE="$HOME/.local/share/arch_maintenance_disabled"
- INTERVAL=14 # Increased from 7 to 14 days
- QUIET_MODE=${MAINTENANCE_QUIET:-false} # Set MAINTENANCE_QUIET=true to disable
- if [ ! -f "$MAINTENANCE_SCRIPT" ]; then
- echo "Maintenance script not found at $MAINTENANCE_SCRIPT"
- return 0
- fi
- # Check if maintenance is disabled
- if [ -f "$DISABLED_FILE" ] || [ "$QUIET_MODE" = "true" ]; then
- return 0
- fi
- # Only run in interactive shells (not scripts)
- if [[ ! -o interactive ]]; then
- return 0
- fi
- if [ -f "$TIMESTAMP_FILE" ]; then
- LAST_RUN=$(cat $TIMESTAMP_FILE)
- CURRENT_TIME=$(date +%s)
- DAYS_DIFF=$(( (CURRENT_TIME - LAST_RUN) / 86400 ))
- # Return immediately if maintenance not due
- [ $DAYS_DIFF -lt $INTERVAL ] && return 0
- else
- # Create timestamp file if missing (first run)
- echo $(($(date +%s) - ${INTERVAL}*86400 - 1)) > $TIMESTAMP_FILE
- DAYS_DIFF=$INTERVAL # Set for first run
- fi
- # Simple output functions that work with or without gum
- print_styled() {
- if command -v gum &> /dev/null; then
- gum style "$@"
- else
- echo "$1"
- fi
- }
- ask_confirm() {
- if command -v gum &> /dev/null; then
- gum confirm "$1"
- else
- echo "$1 (y/n)"
- read -k 1 REPLY
- echo ""
- [[ $REPLY =~ ^[Yy]$ ]]
- fi
- }
- # Function to run maintenance script
- run_maintenance() {
- print_styled "Running system maintenance script..."
- if sudo $MAINTENANCE_SCRIPT; then
- date +%s > $TIMESTAMP_FILE
- print_styled "✓ Maintenance completed successfully."
- else
- print_styled "✗ Maintenance script failed. Please check the output and run it manually."
- fi
- }
- # Function to snooze for 7 more days
- snooze_maintenance() {
- SNOOZE_TIME=$(($(date +%s) - (${INTERVAL} - 7) * 86400))
- echo $SNOOZE_TIME > $TIMESTAMP_FILE
- print_styled "⏰ Maintenance reminder snoozed for 7 more days."
- }
- # Function to disable maintenance permanently
- disable_maintenance() {
- touch "$DISABLED_FILE"
- print_styled "🔕 Maintenance reminders disabled permanently."
- print_styled "To re-enable: rm $DISABLED_FILE"
- print_styled "To run manually: sudo $MAINTENANCE_SCRIPT"
- }
- # Display maintenance notification
- echo ""
- print_styled "⚠️ It's been $DAYS_DIFF days since your last system maintenance"
- # Enhanced confirmation with four options
- if command -v gum &> /dev/null; then
- CHOICE=$(gum choose "Run maintenance now" "Skip this time" "Don't ask for 7 more days" "Disable permanently")
- case "$CHOICE" in
- "Run maintenance now")
- run_maintenance
- ;;
- "Skip this time")
- print_styled "Maintenance skipped. You'll be reminded next time you start your shell."
- print_styled "To run manually: sudo $MAINTENANCE_SCRIPT"
- ;;
- "Don't ask for 7 more days")
- snooze_maintenance
- ;;
- "Disable permanently")
- disable_maintenance
- ;;
- esac
- else
- # Fallback for systems without gum
- echo "Choose an option:"
- echo "1) Run maintenance now"
- echo "2) Skip this time"
- echo "3) Don't ask for 7 more days"
- echo "4) Disable permanently"
- echo -n "Enter your choice (1-4): "
- read -k 1 CHOICE
- echo ""
- case "$CHOICE" in
- 1)
- run_maintenance
- ;;
- 2)
- print_styled "Maintenance skipped. You'll be reminded next time you start your shell."
- print_styled "To run manually: sudo $MAINTENANCE_SCRIPT"
- ;;
- 3)
- snooze_maintenance
- ;;
- 4)
- disable_maintenance
- ;;
- *)
- print_styled "Invalid choice. Maintenance skipped."
- print_styled "To run manually: sudo $MAINTENANCE_SCRIPT"
- ;;
- esac
- fi
- return 0
|