remind (1929B)
1 #!/bin/bash 2 3 # Simple reminder tool that stores reminders in a file and triggers notify-send alerts 4 # Usage: remind <time> "<message>" 5 # Examples: 6 # remind 30m "Take a break" 7 # remind 18:50 "Time to leave" 8 9 # Configuration 10 REMINDER_FILE="$HOME/.reminders" 11 LOG_FILE="$HOME/.remind_history" 12 13 # Check if parameters are provided 14 if [ $# -lt 2 ]; then 15 echo "Usage: remind <time> \"<message>\"" 16 echo "Time formats: 30s, 5m, 2h, 1d, or HH:MM" 17 exit 1 18 fi 19 20 # Parse time and message 21 TIME="$1" 22 MESSAGE="$2" 23 24 # Check if the time is in HH:MM format 25 if [[ "$TIME" =~ ^([0-1][0-9]|2[0-3]):([0-5][0-9])$ ]]; then 26 # Calculate seconds until the specified time 27 CURRENT_TIME=$(date +%s) 28 TARGET_TIME=$(date -d "$(date +%Y-%m-%d) $TIME" +%s) 29 30 # If the target time is already passed for today, schedule for tomorrow 31 if [ $TARGET_TIME -le $CURRENT_TIME ]; then 32 TARGET_TIME=$(date -d "$(date -d 'tomorrow' +%Y-%m-%d) $TIME" +%s) 33 fi 34 35 SECONDS=$((TARGET_TIME - CURRENT_TIME)) 36 TRIGGER_TIME=$(date -d "@$TARGET_TIME" "+%Y-%m-%d %H:%M:%S") 37 SLEEP_ARG="${SECONDS}s" 38 else 39 # Handle relative time formats (30s, 5m, 2h, 1d) 40 case "$TIME" in 41 *s) SECONDS="${TIME%s}" ;; 42 *m) SECONDS=$((${TIME%m} * 60)) ;; 43 *h) SECONDS=$((${TIME%h} * 3600)) ;; 44 *d) SECONDS=$((${TIME%d} * 86400)) ;; 45 *) SECONDS="$TIME" ;; 46 esac 47 48 TRIGGER_TIME=$(date -d "+$SECONDS seconds" "+%Y-%m-%d %H:%M:%S") 49 SLEEP_ARG="$TIME" 50 fi 51 52 # Create the reminder files if they don't exist 53 touch "$REMINDER_FILE" 54 touch "$LOG_FILE" 55 56 # Log the reminder 57 echo "[$TRIGGER_TIME] $MESSAGE" >>"$LOG_FILE" 58 59 # Schedule the notification 60 ( 61 sleep "$SLEEP_ARG" 62 notify-send -u critical "Reminder" "$MESSAGE" 63 echo "Completed: [$TRIGGER_TIME] $MESSAGE" >>"$LOG_FILE" 64 # Remove from active reminders file once completed 65 sed -i "\|^\[$TRIGGER_TIME\] $MESSAGE$|d" "$REMINDER_FILE" 66 ) & 67 68 # Show confirmation 69 echo "Reminder set for $TRIGGER_TIME: $MESSAGE" 70 echo "[$TRIGGER_TIME] $MESSAGE" >>"$REMINDER_FILE"