emacs/lib/mu4e-custom.el
Evie Litherland-Smith 2f0ebbf9b4 Add initial version of ics2org function
Function parses an ICS file and returns formatted as an Org event,
currently just prints to standard out, but will modify to insert to
current buffer / buffer of choosing

Move a couple of extra functions into lib directory with ics2org, to
be a bit more organised
2024-06-24 11:25:41 +01:00

291 lines
12 KiB
EmacsLisp

;;; mu4e-custom.el -- mu4e -*- lexical-binding: t -*-
;;; Commentary:
;;; Code:
(setq sendmail-program (executable-find "msmtp")
send-mail-function #'sendmail-send-it
message-send-mail-function #'message-send-mail-with-sendmail
message-sendmail-f-is-evil t
message-sendmail-extra-arguments '("--read-envelope-from")
message-auto-save-directory nil
message-kill-buffer-on-exit t
mail-user-agent 'mu4e-user-agent
read-mail-command 'mu4e)
(use-package mm-decode
:custom
(mm-discouraged-alternatives '("text/html")))
(use-package mu4e
:bind
(("C-c m" . mu4e)
:map mu4e-view-mode-map
("o n" . mu4e-org-store-and-capture))
:custom
(mu4e-read-option-use-builtin nil)
(mu4e-completing-read-function #'completing-read)
(mu4e-split-view 'horizontal)
(mu4e-attachment-dir "~/Downloads")
(mu4e-get-mail-command "mbsync -a")
(mu4e-update-interval (* 5 60)) ; Every 5 minutes
(mu4e-headers-auto-update nil)
(mu4e-sent-messages-behavior 'sent)
(mu4e-change-filenames-when-moving t)
(mu4e-context-policy 'pick-first)
(mu4e-compose-context-policy 'ask)
(mu4e-compose-signature-auto-include nil)
(mu4e-compose-complete-only-personal t)
(mu4e-search-full nil)
(mu4e-search-include-related t)
(mu4e-search-threads t)
(mu4e-search-skip-duplicates t)
(mu4e-maildir-shortcuts '((:maildir "/Proton/Inbox/" :key ?p)
(:maildir "/iCloud/Inbox/" :key ?i)
(:maildir "/Outlook/Inbox/" :key ?w)))
(mu4e-bookmarks '((:name "Inbox" :query "maildir:/inbox/" :key ?i :favorite t)
(:name "Today" :query "date:today..now AND maildir:/inbox/" :key ?t)
(:name "Drafts" :query "flag:draft AND NOT flag:trashed" :key ?d :hide-unread t)
(:name "Unread" :query "flag:unread AND maildir:/inbox/" :key ?u :hide-unread t)
(:name "Flagged" :query "flag:flagged AND NOT flag:trashed" :key ?f :hide-unread t)
(:name "Spam" :query "maildir:/spam/ OR maildir:/junk/" :key ?s :hide-unread t)))
(mu4e-headers-visible-lines 3)
(mu4e-headers-fields
'((:human-date . 8)
(:flags . 10)
(:from . 22)
(:subject)))
(mu4e-headers-visible-flags
'(draft
flagged
unread
passed
replied
trashed
attach
calendar
encrypted
signed
list
personal))
:config
(setq mu4e-use-fancy-chars t)
)
(with-eval-after-load 'mu4e
(require 'mu4e-context)
(setq mu4e-contexts
(list
(make-mu4e-context
:name "Personal"
:match-func (lambda (msg) (when msg (string-prefix-p "/Proton" (mu4e-message-field msg :maildir))))
:vars '(
(user-mail-address . "e.litherlandsmith@proton.me")
(mu4e-sent-folder . "/Proton/Sent")
(mu4e-trash-folder . "/Proton/Trash")
(mu4e-refile-folder . "/Proton/Archive")
(message-cite-style . message-cite-style-thunderbird)
(message-signature . (concat "Evelyn Litherland-Smith (she/they)\n"))
))
(make-mu4e-context
:name "Alternate"
:match-func (lambda (msg) (when msg (string-prefix-p "/iCloud" (mu4e-message-field msg :maildir))))
:vars '(
(user-mail-address . "e.litherlandsmith@icloud.com")
(mu4e-sent-folder . "/iCloud/Sent Messages")
(mu4e-trash-folder . "/iCloud/Deleted Messages")
(mu4e-refile-folder . "/iCloud/Archive")
(message-cite-style . message-cite-style-thunderbird)
(message-signature . (concat "Evelyn Litherland-Smith (she/they)\n"))
))
(make-mu4e-context
:name "Work"
:match-func (lambda (msg) (when msg (string-prefix-p "/Outlook" (mu4e-message-field msg :maildir))))
:vars '(
(user-mail-address . "evie.litherland-smith@ukaea.uk")
(mu4e-sent-folder . "/Outlook/Sent")
(mu4e-trash-folder . "/Outlook/Trash")
(mu4e-refile-folder . "/Outlook/Archive")
(message-cite-style . message-cite-style-outlook)
(message-signature . (concat "Evelyn Litherland-Smith (she/they)\n"
"Spectroscopy Diagnostic Physicist\n"
"Plasma Science and Fusion Operations\n"
"UK Atomic Energy Authority"))
)))))
(with-eval-after-load 'mu4e
(require 'mu4e-modeline)
(setq mu4e-modeline-all-read '("R:" . "")
mu4e-modeline-all-clear '("C:" . "")
mu4e-modeline-new-items '("N:" . "")
mu4e-modeline-unread-items '("U:" . ""))
(mu4e-modeline-mode +1))
(with-eval-after-load 'mu4e
(setq mu4e-search-full-label '("F" . "")
mu4e-search-hide-label '("H" . "")
mu4e-search-related-label '("R" . "")
mu4e-search-skip-duplicates-label '("D" . "")
mu4e-search-threaded-label'("T" . "")
mu4e-headers-draft-mark '("D" . "")
mu4e-headers-flagged-mark '("F" . "")
mu4e-headers-unread-mark '("u" . "")
mu4e-headers-passed-mark '("P" . "")
mu4e-headers-replied-mark '("R" . "")
mu4e-headers-trashed-mark '("T" . "")
mu4e-headers-attach-mark '("a" . "")
mu4e-headers-calendar-mark '("c" . "")
mu4e-headers-encrypted-mark '("x" . "")
mu4e-headers-signed-mark '("s" . "")
mu4e-headers-list-mark '("l" . "")
mu4e-headers-personal-mark '("p" . "")
mu4e-headers-seen-mark '("S" . "")
mu4e-headers-new-mark '("N" . "")
mu4e-headers-from-or-to-prefix '(" " . "To ")
mu4e-headers-thread-root-prefix '("* " . "* ")
mu4e-headers-thread-duplicate-prefix '("= " . "= ")
mu4e-headers-thread-blank-prefix '(" " . " ")
mu4e-headers-thread-single-orphan-prefix '("─>" . "─>")
mu4e-headers-thread-orphan-prefix '("┬>" . "┬>")
mu4e-headers-thread-connection-prefix '("" . "")
mu4e-headers-thread-first-child-prefix '("├>" . "├>")
mu4e-headers-thread-child-prefix '("├>" . "├>")
mu4e-headers-thread-last-child-prefix '("└>" . "╰>")))
(with-eval-after-load 'mu4e
(setq mu4e-marks '((refile :char
("r" . "")
:prompt "refile" :dyn-target
(lambda
(target msg)
(mu4e-get-refile-folder msg))
:action
(lambda
(docid msg target)
(mu4e--server-move docid
(mu4e--mark-check-target target)
"-N")))
(delete :char
("D" . "")
:prompt "Delete" :show-target
(lambda
(target)
"delete")
:action
(lambda
(docid msg target)
(mu4e--server-remove docid)))
(flag :char
("+" . "")
:prompt "+flag" :show-target
(lambda
(target)
"flag")
:action
(lambda
(docid msg target)
(mu4e--server-move docid nil "+F-u-N")))
(move :char
("m" . "")
:prompt "move" :ask-target mu4e--mark-get-move-target :action
(lambda
(docid msg target)
(mu4e--server-move docid
(mu4e--mark-check-target target)
"-N")))
(read :char
("!" . "")
:prompt "!read" :show-target
(lambda
(target)
"read")
:action
(lambda
(docid msg target)
(mu4e--server-move docid nil "+S-u-N")))
(trash :char
("d" . "")
:prompt "dtrash" :dyn-target
(lambda
(target msg)
(mu4e-get-trash-folder msg))
:action
(lambda
(docid msg target)
(mu4e--server-move docid
(mu4e--mark-check-target target)
"+T-N")))
(unflag :char
("-" . "")
:prompt "-unflag" :show-target
(lambda
(target)
"unflag")
:action
(lambda
(docid msg target)
(mu4e--server-move docid nil "-F-N")))
(untrash :char
("=" . "")
:prompt "=untrash" :show-target
(lambda
(target)
"untrash")
:action
(lambda
(docid msg target)
(mu4e--server-move docid nil "-T")))
(unread :char
("?" . "")
:prompt "?unread" :show-target
(lambda
(target)
"unread")
:action
(lambda
(docid msg target)
(mu4e--server-move docid nil "-S+u-N")))
(unmark :char " " :prompt "unmark" :action
(mu4e-error "No action for unmarking"))
(action :char
("a" . "")
:prompt "action" :ask-target
(lambda nil
(mu4e-read-option "Action: " mu4e-headers-actions))
:action
(lambda
(docid msg actionfunc)
(save-excursion
(when
(mu4e~headers-goto-docid docid)
(mu4e-headers-action actionfunc)))))
(something :char
("*" . "")
:prompt "*something" :action
(mu4e-error "No action for deferred mark")))))
(with-eval-after-load 'mu4e
(require 'mu4e-notification)
(setq mu4e-notification-support t))
(use-package gnus-icalendar
:after (mu4e org-agenda)
:custom
(gnus-icalendar-org-capture-file org-agenda-diary-file)
(gnus-icalendar-org-capture-headline '("Email"))
:config
(require 'org-agenda)
(require 'org-capture)
(gnus-icalendar-org-setup))
(use-package mu4e-icalendar
:after mu4e
:custom
(mu4e-icalendar-trash-after-reply nil)
:config
(require 'gnus-icalendar)
(mu4e-icalendar-setup)
(gnus-icalendar-org-setup))
(provide 'mu4e-custom)
;;; mu4e-custom.el ends here