See procmailex(5) and procmailrc(5).

Filter out duplicate Emails

:0 Wh: msgid.log
| formail -D 65536 /home/perry/.msgid.cache

Filter (some) mailing lists into MailBoxes according to list address

* ^List-Post:.*<!mailto:\/[A-Za-z0-9][-A-Za-z0-9\.@]+

* ^Sender: owner-\/[[A-Za-z0-9][[-A-Za-z0-9\.@]+

Use procmail to deliver to cyrus

Before you do this, check that you really need to. Most MTAs will support LMTP delivery now, which is a far more efficient way of delivering to cyrus. Also note that cyrus uses a custom maildir format, so you cannot just drop mail into an appropriate directory.

If you really must use procmail to deliver to cyrus, you'll need a rule such as:

:0 w
| /usr/bin/cyrus/bin/deliver -e -a $USER -m user/$USER

But be warned that the user/$USER bit may be dependant upon your cyrus configuration, as will the actual path to cyrus deliver. Do not use a deliver program from a different MTA. It will eat your mail.