The current mail setup uses `mbsync` (from the isync project) to locally mirror the GMail imap folder.
It is run through a `sync-mail` script which can invoke pre- and post-sync hooks
(e.g. run your incoming mail through filters as soon as they arrive or ingest them into full-text search engines).[^1]
The sync script also automatically unlocks any pass directory so that credentials can be put into their respective applications and the directory closes again after use.
`msmtp` is used for mail sending by neomutt (and git if using git send-email).
`neomutt` then picks up the mail directory filled by `mbsync` and lets you browse it, respond to mail or create new ones.
[^1]: That being said, the script is a little dusty and could probably use a little overhaul. It *works* but could be more fantastic I feel.
For calendars and contacts, the wonderful `vdirsyncer` is used to sync everything from a remote Dav client (hard-coded to my server currently) to the local directories in documents.
This is then picked up by `khal` to allow you to browse and edit your events, and create new ones - all of which in turn ends up remotely.
You can also browse your events locally with `calcurse` which will import them on each startup, but will not sync back yet;
meaning, any changes you do through the application will not reflect themselves back on any of your other connected devices unfortunately.
Task management is done through the wonderful `taskwarrior`. I mostly use it as-is from the commandline, with some personal tweaks to urgencies and task dependencies.
The goal here is to integrate taskwarrior relatively tightly into mail
(e.g. receiving a mail and turning it into a task, then being able to go back from the task to the respective mail)
and calendaring (turning a to-do into a calendar event, and creating to-dos for individual events right from the calendar),
but those goals are still a ways off and the suite is working fine enough for now.