diff --git a/README.md b/README.md index 94e5a21..2b40f14 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,62 @@ -nag, a bash script for setting one-off or repeating alarms +nag, a bash script for setting one-off or repeating alarms with natural language + +`nag` typically requires a cron daemon or systemd-timer to be available. On the first alarm set, `nag` will prompt to install whichever is relevant for your system. The timer will then invoke `nag check` on an interval, which checks for alarms that are due to go off, and triggers them as appropritate. By default `notify-send` is used, but the command triggered can be overriden with `NAG_CMD` to anything you like. + +`nag` attempts to use something close to natural language. You can `nag [at] 2pm` for a one-off alarm at 2pm, or `nag every 2pm` for an alarm every 2pm. To delete an alarm, `nag stop` it, or to just skip one instance `nag skip`. If it's a one-off alarm being skipped, that's the same as just stopping it. If you want to keep an alarm from triggering for a duration, like during a week off, you can `nag snooze` it; that'll stop it triggering entirely. For just silencing the sound, `nag mute` instead. + +Alarms can be tagged with `nag tag `, and all alarms of a tag can be listed with `nag tag `. When you `stop`, `skip`, `snooze`, or `mute` an alarm, you can either operate on `all` alarms, a specific id, or a specific tag. For example, `nag snooze work "until next Tuesday"`, or `nag mute all`. + +`un-` commands work with all of the above. You can `nag unskip` a skipped alarm to bring it back to the next date. For example, if you skip your Friday alarm by mistake, `nag unskip` will find the next Friday and set the next expiration to whenever that is. + +Time parsing is done with `date -d`, so it supports a decent array of formats: +- Times of day (15:30, 3:30pm, 3pm, noon, teatime) +- Calendar dates (2025-12-25, 25 Dec 2025, Dec 25) +- Combined (tomorrow 9am, next monday 15:30) +- Relative days (now, today, tomorrow, next week) +- Relative times (+1 hour, 30 minutes, +1 day) +- Ordinal dates (first monday, third friday of next month) +- Time zones (15:30 UTC, 3pm PST) +- ISO 8601 (2025-12-25T15:30:00) +- Epoch (@1735138200) + +Rules for `nag every` are: +- hourly (h, hr, hours, hourly) +- daily (d, days, daily) +- weekly (week, weekly) +- monthly (month, months, monthly) +- yearly (year, years, yearly) +- weekday (weekday, weekdays) +- weekend (weekend, weekends) +- specific weekdays (mon, monday, mondays, etc.) + +e.g. `nag every weekday midday "Take a break for dinner."` ```text Usage: nag list all alarms nag