nix

configuration files that power my machines
Log | Files | Refs | README | LICENSE

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"