Evie Litherland-Smith
f44c767eea
Contents of README.org have been split into org files in config/ directory Added init.el to simply loop over config files and call org-babel-load-file Add lots to .gitignore as this repo should now be cloned to .emacs.d (instead of .emacs as before)
318 lines
13 KiB
Org Mode
318 lines
13 KiB
Org Mode
#+title: Internet Config
|
|
#+author: Evie Litherland-Smith
|
|
#+email: evie@xenia.me.uk
|
|
#+filetags: :emacs:config:org:
|
|
* Internet
|
|
** Gnus
|
|
#+begin_src emacs-lisp :tangle yes
|
|
(use-package gnus
|
|
:config
|
|
(setq gnus-select-method '(nnnil)))
|
|
#+end_src
|
|
|
|
** Email
|
|
#+begin_src emacs-lisp
|
|
(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)
|
|
|
|
(set-variable read-mail-command 'mu4e)
|
|
|
|
(use-package mu4e
|
|
:bind
|
|
(("C-c m" . mu4e)
|
|
:map mu4e-view-mode-map
|
|
("o n" . mu4e-org-store-and-capture))
|
|
:custom
|
|
(mu4e-completing-read-function #'completing-read-default)
|
|
(mu4e-split-view nil)
|
|
(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-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 "Flagged" :query "flag:flagged AND NOT flag:trashed AND NOT maildir:/spam/ AND NOT maildir:/junk/" :key ?f)
|
|
(:name "Spam" :query "maildir:/spam/ OR maildir:/junk/" :key ?s :hide-unread t)))
|
|
(mu4e-headers-fields
|
|
'((:human-date . 8)
|
|
(:from . 24)
|
|
(:subject . 64)
|
|
(:flags)))
|
|
(mu4e-headers-visible-flags
|
|
'(draft
|
|
flagged
|
|
unread
|
|
passed
|
|
replied
|
|
trashed
|
|
attach
|
|
calendar
|
|
encrypted
|
|
signed
|
|
list
|
|
personal))
|
|
:config
|
|
(setq mu4e-use-fancy-chars t)
|
|
|
|
)
|
|
#+end_src
|
|
*** Account contexts
|
|
#+begin_src emacs-lisp
|
|
(with-eval-after-load 'mu4e
|
|
(require 'mu4e-context)
|
|
(setq mu4e-contexts
|
|
(list
|
|
(make-mu4e-context
|
|
:name "Xenia"
|
|
:vars '((user-mail-address . "evie@xenia.me.uk")
|
|
(mu4e-sent-folder . "/Proton/Sent")
|
|
(mu4e-drafts-folder . "/Proton/Drafts")
|
|
(mu4e-trash-folder . "/Proton/Trash")
|
|
(mu4e-refile-folder . "/Proton/Archive")))
|
|
(make-mu4e-context
|
|
:name "Proton"
|
|
: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-drafts-folder . "/Proton/Drafts")
|
|
(mu4e-trash-folder . "/Proton/Trash")
|
|
(mu4e-refile-folder . "/Proton/Archive")))
|
|
(make-mu4e-context
|
|
:name "iCloud"
|
|
: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-drafts-folder . "/iCloud/Drafts")
|
|
(mu4e-trash-folder . "/iCloud/Deleted Messages")
|
|
(mu4e-refile-folder . "/iCloud/Archive")))
|
|
(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-drafts-folder . "/Outlook/Drafts")
|
|
(mu4e-trash-folder . "/Outlook/Trash")
|
|
(mu4e-refile-folder . "/Outlook/Archive"))))))
|
|
#+end_src
|
|
|
|
*** Modeline configuration
|
|
#+begin_src emacs-lisp
|
|
(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))
|
|
#+end_src
|
|
|
|
*** Headers mode glyphs
|
|
#+begin_src emacs-lisp
|
|
(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 '("└>" . "╰>")))
|
|
#+end_src
|
|
|
|
**** Custom marks
|
|
#+begin_src emacs-lisp
|
|
(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")))))
|
|
#+end_src
|
|
|
|
*** Desktop notifications
|
|
#+begin_src emacs-lisp
|
|
(with-eval-after-load 'mu4e
|
|
(require 'mu4e-notification)
|
|
(setq mu4e-notification-support t))
|
|
#+end_src
|
|
|
|
*** Org-mode integration
|
|
#+begin_src emacs-lisp
|
|
(with-eval-after-load 'mu4e
|
|
(require 'mu4e-org))
|
|
#+end_src
|
|
|
|
*** iCalendar integration
|
|
#+begin_src emacs-lisp
|
|
(with-eval-after-load 'mu4e
|
|
(require 'mu4e-icalendar)
|
|
(mu4e-icalendar-setup)
|
|
(setq mu4e-icalendar-trash-after-reply nil)
|
|
(require 'gnus-icalendar)
|
|
(setq gnus-icalendar-org-capture-file (expand-file-name "calendar.org" org-directory))
|
|
(setq gnus-icalendar-org-capture-headline '("Inbox"))
|
|
(gnus-icalendar-org-setup))
|
|
#+end_src
|
|
|
|
** Feeds
|
|
#+begin_src emacs-lisp
|
|
(let ((elfeed-base-directory "~/.elfeed"))
|
|
(setq elfeed-db-directory (expand-file-name "db" elfeed-base-directory)
|
|
elfeed-enclosure-default-dir (expand-file-name "enclosures" elfeed-base-directory)
|
|
rmh-elfeed-org-files (list (expand-file-name "feeds.org" elfeed-base-directory))))
|
|
(use-package elfeed
|
|
:bind (("C-c f f" . elfeed)
|
|
("C-c f u" . elfeed-update))
|
|
:hook (elfeed-search-mode . elfeed-update)
|
|
:config
|
|
(use-package elfeed-org
|
|
:ensure t
|
|
:config (elfeed-org))
|
|
(use-package elfeed-tube
|
|
:ensure t
|
|
:config (elfeed-tube-setup)))
|
|
#+end_src
|