Updates to mirror new repository structure.
[james-home-etc.git] / .emacs.d / config / mu4e.el
blob25bc9fe3ff589629ad6cb1f87e3b9e11f58451db
1 (require 'org-mu4e)
2 (require 'mu4e-contrib)
3 (setq mail-user-agent 'mu4e-user-agent)
4 (setq message-send-mail-function 'smtpmail-send-it)
5 ;(setq message-sendmail-f-is-evil 't)
6 (setq message-sendmail-envelope-from 'header)
7 ;;(setq message-sendmail-extra-arguments '("--read-envelope-from"))
8 ;;(setq sendmail-program "/usr/bin/msmtp")
9 ;;(setq sendmail-program "/usr/sbin/sendmail")
10 ;;(setq mu4e-html2text-command "html2text -utf8 -width 72")
11 (setq mu4e-html2text-command 'mu4e-shr2text)
12 (setq mu4e-headers-sort-field :date)
13 (setq mu4e-headers-sort-direction 'ascending)
14 (setq mu4e-headers-include-related t)
15 (setq mu4e-view-show-images t)
16 ;;(setq mu4e-use-fancy-chars t)
17 (when (fboundp 'imagemagick-register-types)
18 (imagemagick-register-types))
20 (setq mu4e-org-contacts-file "~/doc/org/contacts.org")
21 (add-to-list 'mu4e-headers-actions
22 '("org-contact-add" . mu4e-action-add-org-contact) t)
23 (add-to-list 'mu4e-view-actions
24 '("org-contact-add" . mu4e-action-add-org-contact) t)
25 (add-to-list 'mu4e-view-actions
26 '("ViewInBrowser" . mu4e-action-view-in-browser) t)
28 (setq mu4e-user-mail-address-list '("j@mesrichardson.com" "james@jamestechnotes.com" "jamesrichardson@riseup.net" "james.richardson@lowes.com"))
29 ;; account specific stuff
30 (setq mu4e-sent-folder "/acct-4/INBOX.Sent"
31 mu4e-drafts-folder "/acct-4/INBOX.Drafts"
32 user-mail-address "j@mesrichardson.com")
34 (defvar my-mu4e-account-alist
35 '(("acct-8"
36 (mu4e-sent-folder "/acct-8/Sent")
37 (mu4e-drafts-folder "/acct-8/Drafts")
38 (user-mail-address "james.richardson@lowes.com"))
39 ("acct-7"
40 (mu4e-sent-folder "/acct-7/SentMail")
41 (mu4e-drafts-folder "/acct-7/Drafts")
42 (user-mail-address "jamesrichardsonjr@twc.com"))
43 ("acct-6"
44 (mu4e-sent-folder "/acct-6/INBOX.Sent")
45 (mu4e-drafts-folder "/acct-6/INBOX.Drafts")
46 (user-mail-address "j@mesrichardson.com"))
47 ("acct-5"
48 (mu4e-sent-folder "/acct-4/Sent")
49 (mu4e-drafts-folder "/acct-4/Drafts")
50 (user-mail-address "jamesrichardson@riseup.net"))
51 ("acct-4"
52 (mu4e-sent-folder "/acct-4/INBOX.Sent")
53 (mu4e-drafts-folder "/acct-4/INBOX.Drafts")
54 (user-mail-address "j@mesrichardson.com"))
55 ("acct-3"
56 (mu4e-sent-folder "/acct-3/INBOX.Sent")
57 (mu4e-drafts-folder "/acct-3/INBOX.Drafts")
58 (user-mail-address "james.richardson.jr@gmail.com"))
59 ("acct-1"
60 (mu4e-sent-folder "/acct-1/Sent")
61 (mu4e-drafts-folder "/acct-1/Drafts")
62 (user-mail-address "james.richardson@lowes.com"))))
64 (defun my-mu4e-set-account()
65 "Set the account for composing a message."
66 (let* ((account
67 (if mu4e-compose-parent-message
68 (let ((maildir (mu4e-message-field mu4e-compose-parent-message :maildir)))
69 (string-match "/\\(.*?\\)/" maildir)
70 (match-string 1 maildir))
71 (completing-read (format "Compose with account: (%s) "
72 (mapconcat #'(lambda (var) (car var))
73 my-mu4e-account-alist "/"))
74 (mapcar #'(lambda (var) (car var)) my-mu4e-account-alist)
75 nil t nil nil (caar my-mu4e-account-alist))))
76 (account-vars (cdr (assoc account my-mu4e-account-alist))))
77 (if account-vars
78 (mapc #'(lambda (var) (set (car var) (cadr var)))
79 account-vars)
80 (error "No email account found"))))
82 ;;(add-hook 'mu4e-compose-pre-hook 'my-mu4e-set-account)
85 ;; add hooks for epa-mail-mode
86 ;;(add-hook 'mu4e-compose-mode-hook
87 ;; (defun my-setup-epa-hook ()
88 ;; (epa-mail-mode)))
89 ;;(add-hook 'mu4e-view-mode-hook
90 ;; (defun my-view-mode-hook ()
91 ;; (epa-mail-mode)))
93 ;; Setup Contexts
94 (setq mu4e-contexts
95 `(,(make-mu4e-context
96 :name "Personal"
97 :enter-func (lambda () (mu4e-message "Entering Personal context"))
98 :leave-func (lambda () (mu4e-message "Leaving Personal context"))
99 :vars '((user-mail-address . "j@mesrichardson.com")
100 (mu4e-sent-folder . "/acct-6/INBOX.Sent")
101 (mu4e-drafts-folder . "/acct-6/INBOX.Drafts")))
102 ,(make-mu4e-context
103 :name "Technotes"
104 :vars '((user-mail-address . "james@jamestechnotes.com")
105 (mu4e-sent-folder . "/acct-6/INBOX.Sent")
106 (mu4e-drafts-folder . "/acct-6/INBOX.Drafts")))
107 ,(make-mu4e-context
108 :name "Lowes"
109 :vars '((user-mail-address . "james.richardson@lowes.com")
110 (mu4e-sent-folder . "/acct-8/Sent")
111 (mu4e-drafts-folder . "/acct-8/Drafts")))))
113 (setq mu4e-context-policy nil
114 mu4e-compose-context-policy 'ask-if-none)
115 ;; let's try to archive into year folders
116 (setq mu4e-refile-folder
117 (lambda (msg)
118 "Set folder to refile"
119 (let ((archive)
120 (case-fold-search t)
121 (maildir (mu4e-message-field msg :maildir))
122 (year (format-time-string "%Y" (mu4e-message-field msg :date)))
123 (yearweek (format-time-string "%Y%U" (mu4e-message-field msg :date))))
124 (cond
125 ;; don't refile trash
126 ((string-match-p "trash" maildir) maildir)
127 ;; if /jrichar-lowes refile to /lowes-archive/YYYY
128 ((string-match-p "^/acct-1" maildir) (concat "/archives/spec01/mail." year)) ;; merged acct-1 and acct-8
129 ((string-match-p "^/acct-8" maildir) (concat "/archives/spec01/mail." year))
130 ((string-match-p "^/acct-[2-7]" maildir) (concat "/archives/mail." year))
131 ;; / is local
132 ((string-match-p "^/$" maildir) (concat "/archives/mail." year))
133 ;; default goes back to itself
134 (t maildir)))))
137 ;; set bookmarks
138 (add-to-list 'mu4e-bookmarks
139 '("m:/acct-8/INBOX" "Work" ?W))
140 (add-to-list 'mu4e-bookmarks
141 '("flag:unread and not flag:trashed and not flag:list" "New (no lists)" ?n))
142 (add-to-list 'mu4e-bookmarks
143 '("flag:unread and not flag:trashed and not flag:list or m:/acct-8/INBOX or m:/acct-6/INBOX or m:/acct-6/Queue" "Incoming" ?i))
144 ;;(add-to-list 'mu4e-bookmarks
145 ;; '("(7.1 or aix) and date:1y..now" "7.1" ?7))
146 ;; (add-to-list 'mu4e-bookmarks
147 ;; '("flag:list and not flag:trashed" "Mailing lists" ?l))
148 ;; (add-to-list 'mu4e-bookmarks
149 ;; '("not flag:trashed and list:debian-user.lists.debian.org" "Debian-user" ?d))
150 ;; (add-to-list 'mu4e-bookmarks
151 ;; '("flag:unread and not flag:trashed and (m:/ or m:/acct-1/INBOX or m:/acct-2/INBOX or m:/acct-2/acct-3.INBOX or m:/acct-2/acct-3.[Gmail].Important or m:/acct-2/acct-4/INBOX.james or m:/acct-3/INBOX or m:/acct-3/[Gmail].Important or m:/acct-4/INBOX.james)" "New (all)" ?N))
152 ;; (add-to-list 'mu4e-bookmarks
153 ;; '("flag:unread and not flag:trashed and (m:/ or m:/acct-1/* or m:/acct-1-archives/*)" "New" ?n))
154 ;; (add-to-list 'mu4e-bookmarks
155 ;; '("m:/ or m:/acct-1/INBOX or m:/acct-2/INBOX or m:/acct-2/acct-3.INBOX or m:/acct-2/acct-3.[Gmail].Important or m:/acct-2/acct-4/INBOX.james or m:/acct-2/acct-4.INBOX.Archive or m:/acct-3/INBOX or m:/acct-3/[Gmail].Important or m:/acct-4/INBOX.james or m:/acct-4/INBOX.Archive" "Inbox (All)" ?I))
156 ;; (add-to-list 'mu4e-bookmarks
157 ;; '("m:/ or m:/acct-1/INBOX" "Inbox" ?i))
159 ;; set unread mail on desktop
160 (require 'mu4e-alert)
161 (mu4e-alert-set-default-style 'libnotify)
162 (add-hook 'after-init-hook #'mu4e-alert-enable-notifications)
164 ;; set unread mail in mode line
165 (add-hook 'after-init-hook #'mu4e-alert-enable-mode-line-display)
167 ;; update mail 300 seconds
168 (setq mu4e-update-interval 300)
171 ;; start mu4e
172 (mu4e t)