Skip to content

Latest commit

 

History

History
183 lines (133 loc) · 5.28 KB

configuration.rst

File metadata and controls

183 lines (133 loc) · 5.28 KB

Configuration

Configuration File

Customization of tag filters takes place in afew's config file in ~/.config/afew/config.

NotMuch Config

afew tries to adapt to the new tag that notmuch sets on new email, but has mostly been developed and used against the new tag. To use that, make sure that ~/.notmuch-config contains:

[new]
tags=new

afew reads the notmuch database location from notmuch config. When no database path is set in notmuch config, afew uses the MAILDIR environment variable when set, or $HOME/mail as a fallback, like notmuch CLI does. If a relative path is provided, afew prepends $HOME/ to the path in the same manner as notmuch, which was introduced in version 0.28 of notmuch.

Filter Configuration

You can modify filters, and define your own versions of the base Filter that allow you to tag messages in a similar way to the notmuch tag command, using the config file. The default config file is:

[SpamFilter]
[KillThreadsFilter]
[ListMailsFilter]
[ArchiveSentMailsFilter]
sent_tag = ''
[InboxFilter]

See the filters page for the details of those filters and the custom arguments they accept.

You can add filters based on the base filter as well. These can be customised by specifying settings beneath them. The standard settings, which apply to all filters, are:

message

text that will be displayed while running this filter if the verbosity is high enough.

query

the query to use against the messages, specified in standard notmuch format. Note that you don't need to specify the new tag - afew will add that when run with the --new flag.

tags

the tags to add or remove for messages that match the query. Tags to add are preceded by a + and tags to remove are preceded by a -. Multiple tags are separated by semicolons.

tags_blacklist

if the message has one of these tags, don't add tags to it. Tags are separated by semicolons.

So to add the deer tag to any message to or from antelope@deer.com you could do:

[Filter.1]
query = 'antelope@deer.com'
tags = +deer
message = Wild animals ahoy

You can also (in combination with the InboxFilter) have email skip the Inbox by removing the new tag before you get to the InboxFilter:

[Filter.2]
query = from'pointyheaded@boss.com'
tags = -new;+boss
message = Message from above

Full Sample Config

Showing some sample configs is the easiest way to understand. The notmuch initial tagging page shows a sample config:

# immediately archive all messages from "me"
notmuch tag -new -- tag:new and from:me@example.com

# delete all messages from a spammer:
notmuch tag +deleted -- tag:new and from:spam@spam.com

# tag all message from notmuch mailing list
notmuch tag +notmuch -- tag:new and to:notmuch@notmuchmail.org

# finally, retag all "new" messages "inbox" and "unread"
notmuch tag +inbox +unread -new -- tag:new

The (roughly) equivalent set up in afew would be:

[ArchiveSentMailsFilter]

[Filter.1]
message = Delete all messages from spammer
query = from:spam@spam.com
tags = +deleted;-new

[Filter.2]
message = Tag all messages from the notmuch mailing list
query = to:notmuch@notmuchmail.org
tags = +notmuch

[InboxFilter]

Not that the queries do not generally include tag:new because this is implied when afew is run with the --new flag.

The differences between them is that

  • the ArchiveSentMailsFilter will add tags specified by sent_tag option (default '' means add no tags. You may want to set it to sent), as well as archiving the email. And it will not archive email that has been sent to one of your own addresses.
  • the InboxFilter does not add the unread tag. But most mail clients will manage the unread status directly in maildir.

More Filter Examples

Here are a few more example filters from github dotfiles:

[Filter.1]
query = 'sicsa-students@sicsa.ac.uk'
tags = +sicsa
message = sicsa

[Filter.2]
query = 'from:foosoc.ed@gmail.com OR from:GT Silber OR from:lizzie.brough@eusa.ed.ac.uk'
tags = +soc;+foo
message = foosoc

[Filter.3]
query = 'folder:gmail/G+'
tags = +G+
message = gmail spam

# skip inbox
[Filter.6]
query = 'to:notmuch@notmuchmail.org AND (subject:emacs OR subject:elisp OR "(defun" OR "(setq" OR PATCH)'
tags = -new
message = notmuch emacs stuff

# Assuming the following workflow: all messages for projects or releases should be tagged
# as "project/A", "project/B" respectively "release/1.0.1" or "release/1.2.0".
#
# In most cases replies to messages retain their context: the project, the release(s), ..
#
# The following config will propagate all project/... or release/... tags from a thread
# to all new messages.

[PropagateTagsByRegexInThreadFilter.1]
propagate_tags = project/.*
# do not tag spam
filter = not is:spam

[PropagateTagsByRegexInThreadFilter.2]
propagate_tags = release/.*