(require 'mu4e) (require 'org-mu4e) (require 'mu4e-contrib) (setq shr-color-visible-luminance-min 30) (setq mu4e-get-mail-command "offlineimap" mu4e-compose-signature-auto-include nil mu4e-compose-dont-reply-to-self t mu4e-update-interval 60 mu4e-headers-include-related t) (setq mu4e-use-fancy-chars t) (setq mu4e-headers-seen-mark '("" . "")) (setq mu4e-headers-unread-mark '("u" . "✉")) ;; Don't update list of emails automatically. I update the list ;; manually with "g". (setq mu4e-headers-auto-update nil) (setq mu4e-view-show-addresses t) (setq mu4e-hide-index-messages t) (setq mu4e-html2text-command 'mu4e-shr2text) (setq mu4e-view-show-images t) ;; use imagemagick, if available (when (fboundp 'imagemagick-register-types) (imagemagick-register-types)) (setq mu4e-maildir "~/Mail" mu4e-attachment-dir "~/Downloads" mu4e-compose-signature-auto-include t) ;; pretty quotes! (add-hook 'message-mode-hook (lambda () (require 'typo) (typo-mode 1))) (defun my/set-mu4e-bookmarks (maildir) (let ((guix "(list:guix-devel@gnu.org OR list:bug-guix@gnu.org OR list:help-guix@gnu.org OR list:guix-sysadmin@gnu.org OR list:guix-security.gnu.org)") (guile "(list:guile-user@gnu.org OR list:guile-devel@gnu.org OR list:bug-guile@gnu.org)") (emacs "(list:emacs-devel@gnu.org)") (security "(list:oss-security@lists.openwall.com)") (lilypond "(list:lilypond-devel@gnu.org)") (eoma "(list:arm-netbook@lists.phcomp.co.uk)") (fsfe "(subject:\"Willkommen in der FSFE\" list:berlin-bounces@lists.fsfe.org OR list:berlin-owner@lists.fsfe.org OR list:coordinators@lists.fsfe.org OR list:berlin@lists.fsfe.org OR list:newsletter-en@fsfeurope.org OR list:newsletter-de@fsfeurope.org)") (dojo "(list:coderdojo-berlin-discussion@googlegroups.com OR to:hello@fhain.coderdojo.berlin)") (unread "(flag:unread AND NOT flag:trashed)") (me "(body:rekado OR body:Ricardo)")) (setq mu4e-bookmarks (list ;; TODO: don't match my own signature (list (concat me " " unread) "Mentioning me (unread)" ?R) (list (concat "maildir:\"/" maildir "/INBOX\"") "Inbox" ?i) (list "date:today..now" "Today's messages" ?t) (list "date:today..now" "Last 7 days" ?w) (list (concat "maildir:\"/" maildir "/INBOX\"" " " unread) "Unread messages" ?u) (list (concat guix " " unread) "Guix" ?1) (list (concat guile " " unread) "Guile" ?2) (list (concat lilypond " " unread) "Lilypond" ?3) (list (concat fsfe " " unread) "FSFE" ?4) (list (concat dojo " " unread) "CoderDojo" ?5) (list (concat eoma " " unread) "EOMA68" ?6) (list (concat emacs " " unread) "Emacs" ?7) (list (concat security " " unread) "Security" ?8) (list (concat "maildir:\"/private/mailinglists\"" " " unread " NOT " guix " NOT " guile " NOT " lilypond " NOT " fsfe " NOT " eoma " NOT " emacs " NOT " security " NOT " dojo) "Unread list messages" ?m) (list (concat "maildir:\"/" maildir "/INBOX\" flag:flagged") "Flagged" ?f))))) ; set up email sending with msmtp (setq mail-user-agent 'mu4e-user-agent) (setq mail-specify-envelope-from t) (setq mail-envelope-from 'header) (setq message-kill-buffer-on-exit t) (setq message-sendmail-envelope-from 'header) (setq message-send-mail-function 'message-send-mail-with-sendmail) ;;use msmtp instead of sendmail (setq sendmail-program "~/.guix-profile/bin/msmtp") (global-set-key (kbd "") 'mu4e) ;; Crypto (setq mml2015-encrypt-to-self t) (setq mml2015-sign-with-sender t) (add-hook 'mu4e-compose-mode-hook (defun my/maybe-reply-encrypted () "Encrypt automatically if parent message was also encrypted." (let ((msg mu4e-compose-parent-message)) (when (and msg (or (member 'encrypted (mu4e-message-field msg :flags)) (string-match "-----BEGIN PGP MESSAGE-----$" (mu4e-message-field msg :body-txt)))) (mml-secure-message-sign-encrypt))))) ;; Don't open a new window to show the results of signature validation (setq epa-popup-info-window nil) (add-hook 'mu4e-view-mode-hook (defun my/maybe-decrypt-inline () "Attempt to decrypt inline PGP messages automatically." (save-excursion (goto-char (point-min)) (re-search-forward "-----BEGIN PGP MESSAGE-----$" nil t) (let ((armor-start (match-beginning 0))) (when armor-start (let ((armor-end (re-search-forward "^-----END PGP MESSAGE-----$" nil t))) (when armor-end ;; Don't ask if I want to replace the text. Just do it. (flet ((yes-or-no-p (&rest args) t) (y-or-n-p (&rest args) t)) (epa-decrypt-armor-in-region armor-start armor-end))))))))) (require 'mu4e-actions) (add-to-list 'mu4e-view-actions '("git am" . mu4e-action-git-apply-mbox)) (add-to-list 'mu4e-headers-actions '("git am" . mu4e-action-git-apply-mbox)) (setq mu4e-contexts (list (make-mu4e-context :name "Private" :enter-func (lambda () (mu4e-message "Switch to the Private context") (my/set-mu4e-bookmarks "private")) :match-func (lambda (msg) (when msg (or (mu4e-message-contact-field-matches msg :to (rot13 "erxnqb@ryrcuyl.arg")) (mu4e-message-contact-field-matches msg :from (rot13 "erxnqb@ryrcuyl.arg")) ;; Additional check if this is a mailing list email. (and (mu4e-message-field msg :mailing-list) (zerop (call-process "grep" nil nil nil "-E" "^Delivered-To: .*elephly.net" (mu4e-message-field msg :path))))))) :vars `((user-mail-address . ,(rot13 "erxnqb@ryrcuyl.arg")) (mu4e-user-mail-address-list . ,(list (rot13 "erxnqb@ryrcuyl.arg"))) (user-full-name . ,(rot13 "Evpneqb Jhezhf")) (mu4e-sent-folder . "/private/Sent") (mu4e-trash-folder . "/private/Trash") (mu4e-refile-folder . "/private/Archives") (mu4e-drafts-folder . "/private/Drafts") (mu4e-compose-signature . "Ricardo GPG: BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC http://elephly.net"))) (make-mu4e-context :name "CoderDojo" :enter-func (lambda () (mu4e-message "Switch to the CoderDojo context") (my/set-mu4e-bookmarks "fhaindojo")) :match-func (lambda (msg) (when msg (or (mu4e-message-contact-field-matches msg :to (rot13 "erxnqb@sunva.pbqreqbwb.oreyva")) (mu4e-message-contact-field-matches msg :from (rot13 "erxnqb@sunva.pbqreqbwb.oreyva")) (mu4e-message-contact-field-matches msg :to (rot13 "uryyb@sunva.pbqreqbwb.oreyva")) (mu4e-message-contact-field-matches msg :from (rot13 "uryyb@sunva.pbqreqbwb.oreyva"))))) :vars `((user-mail-address . ,(rot13 "erxnqb@sunva.pbqreqbwb.oreyva")) (mu4e-user-mail-address-list . ,(list (rot13 "erxnqb@sunva.pbqreqbwb.oreyva"))) (user-full-name . ,(rot13 "Evpneqb Jhezhf")) (mu4e-sent-folder . "/fhaindojo/Sent") (mu4e-trash-folder . "/fhaindojo/Trash") (mu4e-refile-folder . "/fhaindojo/Archive") (mu4e-drafts-folder . "/fhaindojo/Drafts") (mu4e-compose-signature . "Ricardo GPG: BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC http://elephly.net"))) (make-mu4e-context :name "Work" :enter-func (lambda () (mu4e-message "Switch to the Work context") (my/set-mu4e-bookmarks "mdc-personal")) :match-func (lambda (msg) (when msg (or (mu4e-message-contact-field-matches msg :to (rot13 "evpneqb.jhezhf@zqp-oreyva.qr")) (mu4e-message-contact-field-matches msg :from (rot13 "evpneqb.jhezhf@zqp-oreyva.qr")) ;; Additional check if this is a mailing list email. (and (mu4e-message-field msg :mailing-list) (zerop (call-process "grep" nil nil nil "-E" "^Received: from .*mdc-berlin.de" (mu4e-message-field msg :path))))))) :vars `((user-mail-address . ,(rot13 "evpneqb.jhezhf@zqp-oreyva.qr")) (mu4e-user-mail-address-list . ,(list (rot13 "evpneqb.jhezhf@zqp-oreyva.qr"))) (user-full-name . ,(rot13 "Evpneqb Jhezhf")) (mu4e-sent-folder . "/mdc-personal/Sent Items") (mu4e-trash-folder . "/mdc-personal/Deleted Items") (mu4e-refile-folder . "/mdc-personal/Archive") (mu4e-drafts-folder . "/mdc-personal/Drafts") (mu4e-compose-signature . ,(rot13 (concat "\ Evpneqb Jhezhf Flfgrz nqzvavfgengbe OVZFO - Fpvragvsvp Ovbvasbezngvpf Cyngsbez Znk Qryoehrpx Pragre sbe Zbyrphyne Zrqvpvar Eboreg-Eöffyr-Fge. 10, 13125, Oreyva, Treznal Ohvyqvat 89, Ebbz 1.08 rznvy: evpneqb.jhezhf@zqp-oreyva.qr gry: +49 30 9406 " (number-to-string (+ (* 1 2 2 3 4 5 6) (expt 2 8) 100)))))))))