configuration/notmuch-hooks/post-new

101 lines
3.4 KiB
Bash
Executable File

#!/bin/sh
addtag() { notmuch tag +"$1" -- "tag:new and ($2) and not tag:$1"; }
archive() { notmuch tag -new -unread -- "$@" and tag:new; }
spam() { notmuch tag -new -unread +spam -- "$@" and '(' tag:new or tag:unread or not tag:spam ')'; }
# Tag mails by their origin (top-level maildir)
for maildir in /data/mail/*; do
origin="$(basename "$maildir")"
addtag "$origin" "folder:/$origin/"
done
# Spam
spam "subject:/^\[SPAM\]/"
# TODO: Known spammers
# Some aliases
addtag zeus "to:felixvdj@zeus.ugent.be"
addtag dodona "to:dodona@ugent.be"
addtag unipept "to:unipept@ugent.be"
# These mails tend to be numerous and do not need additional tagging
archive tag:dodona subject:"Mysql2::Error: Table 'dodona.active_storage_blobs' doesn't exist"
archive tag:dodona subject:'A request took'
archive tag:dodona subject:'Errno::ENOENT'
archive tag:unipept subject:'Mysql2::Error::ConnectionError'
archive tag:unipept subject:'invalid value for Integer'
archive tag:unipept subject:'NoMethodError'
# More complex tagging
for mid in $(notmuch search --output=messages tag:new); do
tag=false
# +-tags become actual tags
for tag in $(notmuch show --format=raw "$mid" | sed -n '/^\tfor/s/.*<[^>]*+\([^@]*\)@.*>.*/\1/p' | sort | uniq); do
addtag "$tag" "$mid"
tag=true
done
# messages from contacts get a contact tag
for sender in $(notmuch address --output=sender --output=address "$mid"); do
if khard list "$sender" > /dev/null 2>&1; then
addtag contact "$mid"
tag=true
fi
done
# mails to posteo must have a tag
if ! "$tag"; then
addtag killed "$mid and tag:posteo"
fi
# list ids
for list in $(notmuch show --format=raw "$mid" | sed -n '/^List-Id:/,/^\w/p' | sed '$d' | tr '\n' ' ' | sed 's/[^<]*<// ; s/\..*//'); do
addtag "lists" "$mid"
addtag "lists/$list" "$mid"
done
done
# Undelay threads with new messages
for delaytag in $(notmuch search --output=tags -- tag:delay and thread:{tag:new} | grep 'delay/'); do
notmuch tag -delay -"$delaytag" +inbox -- tag:"$delaytag" and thread:{tag:new}
done
# Github notifications
addtag github "from:notifications@github.com"
# Uninteresting
archive tag:dodona subject:'Onderwijsinstelling aangemaakt voor .*'
archive tag:dodona from:'logcheck system account'
archive tag:dodona from:'KlasCement'
archive tag:dodona subject:'Een gebruiker kon niet inloggen'
archive tag:dodona subject:'status was changed to internal error' 'course_id: 317' # C testcursus 2020-2021
archive tag:dodona subject:'status was changed to internal error' 'course_id: 335' # R basic 2020-2021
archive tag:dodona subject:'status was changed to internal error' 'course_id: 380' # C# 2020-2021
archive tag:dodona subject:'status was changed to internal error' 'user_id: 3' # Peter
archive tag:github thread:{from:dependabot} \
-subject:Security \
-to:mention@noreply.github.com \
-to:assign@noreply.github.com \
-to:review_requested@noreply.github.com \
-to:security_alert@noreply.github.com
archive tag:ugent subject:'Belnet FileSender: Ontvangstbevestiging'
# Muted threads stay muted for a month after arrival
archive thread:{tag:muted}
notmuch tag -muted -- tag:muted and date:'..30_days'
# Inbox remaining not-spam
addtag inbox "not tag:spam"
notmuch tag -new -- tag:new
# Show threads after their delay
today="$(date +'%s')"
for delaytag in $(notmuch search --output=tags tag:delay | grep 'delay/'); do
until="$(date -d "${delaytag#*/}" +'%s')"
if [ "$today" -gt "$until" ]; then
notmuch tag -delay -"$delaytag" +inbox -- tag:"$delaytag"
fi
done