dotfiles/office
Marty Oehme b02d0218c4
neomutt: Automatically mark seen messages old
E-Mails have 2-staged flag options for levels of 'seen':
Unseen/Seen and Unread/Read.

A message is unseen if it has arrived since the last time we had mutt
open. We do not have to have had the actual message open for it to be
marked seen (or 'old'). In other words, whichever messages we have seen
once on the index alone are not 'new' to us anymore, they have been
seen.

On the other hand, a message is only read if it is actually opened. So
even if we have seen it on the index page, or moved it to a different
mailbox or anything else, it can still be unread if we did not open it.
Additionally, I have it set up now so that the message only gets set to
'read' by neomutt after it has been open for 1 second.

This gives a tiny grace period if we are scrubbing through mails or
accidentally opened one we did not want.
2025-09-16 21:28:32 +02:00
..
.config neomutt: Automatically mark seen messages old 2025-09-16 21:28:32 +02:00
.local/bin neomutt: Rename render-prettyhtml to neomutt-renderhtml 2025-09-16 21:28:31 +02:00
README.md task: Integrate into office module 2022-12-08 14:10:11 +01:00

office module

neomutt - terminal mail client mbsync - mirror your Imapped mail directory locally with two-way synchronization notmuch - index and search your mail msmtp - send mail through shell commands imapfilter - rule-based filtering engine for your incoming mail vdirsyncer - mirror your contacts and calendars locally with two-way synchronization khal - terminal vdir-compatible calendar client calcurse - a pretty terminal calendar client, but not very vdir compatible taskwarrior - a super flexible terminal to-do list

The module has three areas of concern: a functioning mail suite (receiving, sending, searching), to-do management, and contacts and calendaring. Take care that most of the credential/account setup of course is highly specific to my setup and should be changed as required.

mail

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.

calendar and contacts

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.

tasks

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.


  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. ↩︎