~bsprague/dont-miss-it

A calendar-polling tool and obnoxious notification sender

refs

main
browse  log 

clone

read-only
https://git.sr.ht/~bsprague/dont-miss-it
read/write
git@git.sr.ht:~bsprague/dont-miss-it

You can also use your local clone with git send-email.

#Don't Miss It

Don't Miss It is a simple tool for polling a set of calendars and sending a notification (libnotify, marked urgency: critical) when the next meeting is in five minutes. Currently, only Google Calendars are supported.

I made this tool because I'm prone to missing meetings while "in the zone", and wanted a notification separate from existing calendar notifications that I could filter on, and make large and super obnoxious in the center of my screen. Makes it much harder to miss.

#Screenshot

Here's what dont-miss-it looks like on my machine, using wired-notify as my notification daemon and explicitly filtering for appname: dont_miss_it to make those notifications obnoxious.

Screenshot of desktop, showing a large, red bordered DON'T MISS IT notification in the center

#Setup

Authentication is done via Google's OAuth2 provider. To set things up:

  1. Create a GCP project
  2. Enable the Calendar API
  3. Configure the OAuth2 consent screen
  4. Create an OAuth2 client

This is all documented in these instructions.

Then, store the JSON-formatted OAuth2 client ID + secret in credentials.json alongside your dont-miss-it binary. You can also specify a path to this file with --oauth_credentials_file.

#Adding a new account

To add a new account, run:

./dont-miss-it --passphrase<passphrase> login <email>

Replacing <email> with the Google email address to authenticate with. It'll give you a URL to go to, where you can complete the OAuth2 flow and authorize the client. This will redirect you to a non-existent page on localhost, which will fail to load. Take the code query parameter and paste it into the terminal, then hit <Enter>.

This will create a new <email hash>_token.json file that is encrypted with the given passphrase.

#Running

To actually start the service, run:

./dont-miss-it --email=<email 1> --email<email 2> --passphrase=<passphrase> serve

This will decrypt the credentials for the given emails using the provided passphrase, and periodically poll all the accounts to keep track of the next upcoming event. It'll send a notification (via D-Bus) when the next event is less than 5 minutes away.

#TODO

  • Consider encrypting the credentials.json file as well
  • Handle case of "polled late, event is happening now or in the near past" better
    • Perhaps by changing the notification text
  • Make more customizable
  • Add a systemd config, and maybe example configs for various notification daemons.