From d91932bf0e504c86cc5d8b637945f8b1d1356bd0 Mon Sep 17 00:00:00 2001 From: Lucien Cartier-Tilet Date: Tue, 25 Feb 2020 12:33:38 +0100 Subject: [PATCH] Replaced Gnus with Mu4e Removed all Gnus configuration, replaced them with mu4e. --- .spacemacs | 4 +- org/config/spacemacs.org | 252 ++++++++++++++++----------------------- 2 files changed, 103 insertions(+), 153 deletions(-) diff --git a/.spacemacs b/.spacemacs index b25ce68..83ddfdf 100644 --- a/.spacemacs +++ b/.spacemacs @@ -5,7 +5,6 @@ This function is called at the very beginning of Spacemacs startup, before layer configuration. It should only modify the values of Spacemacs settings." (setq phundrak//dotspacemacs-src-dir (concat (getenv "HOME") "/.config/emacs/private/") - phundrak//dotspacemacs-gc (concat (getenv "HOME") "/.gnus.el") phundrak//dotspacemacs-src (concat (getenv "HOME") "/org/config/spacemacs.org") phundrak//dotspacemacs-si (concat phundrak//dotspacemacs-src-dir "spacemacs-init.el") phundrak//dotspacemacs-sl (concat phundrak//dotspacemacs-src-dir "spacemacs-layers.el") @@ -14,8 +13,7 @@ It should only modify the values of Spacemacs settings." (when (or (file-newer-than-file-p phundrak//dotspacemacs-src phundrak//dotspacemacs-si) (file-newer-than-file-p phundrak//dotspacemacs-src phundrak//dotspacemacs-sl) (file-newer-than-file-p phundrak//dotspacemacs-src phundrak//dotspacemacs-ui) - (file-newer-than-file-p phundrak//dotspacemacs-src phundrak//dotspacemacs-uc) - (file-newer-than-file-p phundrak//dotspacemacs-src phundrak//dotspacemacs-gc)) + (file-newer-than-file-p phundrak//dotspacemacs-src phundrak//dotspacemacs-uc)) (princ "Exporting new Emacs configuration from spacemacs.org through org-babel...") (call-process (concat invocation-directory invocation-name) diff --git a/org/config/spacemacs.org b/org/config/spacemacs.org index 9c32e2a..4c545f6 100644 --- a/org/config/spacemacs.org +++ b/org/config/spacemacs.org @@ -75,18 +75,12 @@ - [[#visual-commands][Visual commands]] - [[#eshell-theme][Eshell theme]] - [[#file-extensions][File extensions]] - - [[#gnus][Gnus]] - - [[#shortcuts][Shortcuts]] - - [[#hooks][Hooks]] - - [[#mail-account-configuration][Mail account configuration]] - - [[#general-options][General options]] - - [[#visual-configuration-1][Visual configuration]] - [[#lsp][LSP]] - [[#mu4e][Mu4e]] - [[#miscellaneous-1][Miscellaneous]] - [[#evil][Evil]] - [[#default-modes][Default modes]] - - [[#hooks-1][Hooks]] + - [[#hooks][Hooks]] - [[#pinentry][Pinentry]] - [[#prettified-symbols][Prettified symbols]] - [[#twittering-mode][Twittering mode]] @@ -117,7 +111,7 @@ - [[#linguistics-website][Linguistics website]] - [[#rust][Rust]] - [[#scheme][Scheme]] - - [[#shortcuts-1][Shortcuts]] + - [[#shortcuts][Shortcuts]] - [[#applications][Applications]] - [[#comments][Comments]] - [[#files][Files]] @@ -329,15 +323,9 @@ :PROPERTIES: :CUSTOM_ID: h-0db2333c-86bf-4b41-8226-da66885fce36 :END: - As described below, I use Gnus as my main email client. Therefore, I have - the gnus layer enabled: - #+BEGIN_SRC emacs-lisp - gnus - #+END_SRC - - I am also currently testing ~mu4e~, so let’s enable it and tell Emacs where - mu4e is installed. I also tell mu4e to use maildirs extensions, use async - operations, where to keep attachments, and enable the mu4e modeline. + I use as my daily Email client ~mu4e~, so let’s enable it and tell Emacs + where mu4e is installed. I also tell mu4e to use maildirs extensions, use + async operations, where to keep attachments, and enable the mu4e modeline. #+BEGIN_SRC emacs-lisp (mu4e :variables mu4e-installation-path "/usr/share/emacs/site-lisp" @@ -1843,132 +1831,6 @@ auto-mode-alist)) #+END_SRC -** Gnus - :PROPERTIES: - :CUSTOM_ID: h-fb05a405-110f-4e7e-a21d-b768615754cc - :END: - Here comes my Gnus configuration. Gnus is an email client I use daily to - read, manage, answer to and forward messages I receive by email. - -*** Shortcuts - :PROPERTIES: - :CUSTOM_ID: h-4715e44d-b95b-40d4-b79a-c7873d972b39 - :END: - Some shortcuts needed to be redefined in order for Evil to work well with - Gnus. Here is first the declaration of a prefix: - #+BEGIN_SRC emacs-lisp - (spacemacs/declare-prefix "og" "gnus") - #+END_SRC - And here are said shortcuts. As described above in the [[#h-f193126f-abc1-4287-aa70-4f2080d2ef8f][shortcuts]] chapter, - these Spacemacs shortcuts are invoked with the ~SPC~ leader key. - #+BEGIN_SRC emacs-lisp - (spacemacs/set-leader-keys - "ogD" 'turn-on-gnus-dired-mode - "ogd" 'gnus-summary-delete-article - "ogf" 'gnus-summary-mail-forward - "ogm" 'gnus-group-mail - "ogo" 'my-gnus-group-list-subscribed-groups - "ogr" 'gnus-summary-insert-new-articles - "ogs" 'message-send-and-exit) - #+END_SRC - - #+RESULTS: - -*** Hooks - :PROPERTIES: - :CUSTOM_ID: h-5208e53f-d2e7-4dc1-a081-964ac1c90d4b - :END: - To sort by topics my different mailboxes and folders, I use the - ~gnus-topic-mode~ minor mode. To get it active by default, I use the - following hook to activate it: - #+BEGIN_SRC emacs-lisp - (add-hook 'gnus-group-mode-hook 'gnus-topic-mode) - #+END_SRC - -*** Mail account configuration - :PROPERTIES: - :CUSTOM_ID: h-eb1a12b5-38ef-4c81-9d6c-01c1e066feaa - :header-args:emacs-lisp: :comments link :tangle ~/.gnus.el - :END: - This section will be tangled in =~/.gnus.el=. - - I only use one email account with Gnus: ~lucien@phundrak.com~. Here is how I - configured it: - #+BEGIN_SRC emacs-lisp - (setq gnus-secondary-select-methods '((nnimap "lucien@phundrak.com" - (nnimap-address "mail.phundrak.com") - (nnimap-server-port 143) - (nnimap-stream starttls))) - message-send-mail-function 'smtpmail-send-it - smtpmail-smtp-server "mail.phundrak.com" - smtpmail-stream-type 'starttls - smtpmail-smtp-service 587 - gnus-message-archive-method '(nnimap "mail.phundrak.com") - gnus-message-archive-group "Sent" - nnml-directory "~/Mails" - message-directory "~/Mails" - gnus-fetch-old-headers 'some - mm-discouraged-alternatives '("text/html" "text/richtext")) - #+END_SRC - -*** General options - :PROPERTIES: - :CUSTOM_ID: h-336a2c1c-ed8d-4a90-b4a3-6422a0199ba0 - :header-args:emacs-lisp: :comments link :tangle ~/.gnus.el - :END: - This section will be tangled in =~/.gnus.el=. - - I want to use at one point the [[https://www.emacswiki.org/emacs/EmacsApplicationFramework][Emacs Application Framework]] which is set to - be able one day to render Gnus emails, but for now I am using w3m to render - HTML emails I receive. - #+BEGIN_SRC emacs-lisp - (setq mm-text-html-renderer 'w3m) - #+END_SRC - - I also want Gnus to use the cache in case I need to navigate my emails - offline: - #+BEGIN_SRC emacs-lisp - (setq gnus-use-cache t) - #+END_SRC - - The following allows the user to read in a group all the messages in this - group, whether they are read or unread. - #+BEGIN_SRC emacs-lisp - (setq gnus-fetch-old-headers t) - (setq gnus-parameters '(("nnimap.*" - (display . all)))) - #+END_SRC - - Let’s set a quick organization of the Gnus folders, the format in which sent - messages should be saved, and the typology of Gnus’ topics: - #+BEGIN_SRC emacs-lisp - (eval-after-load 'gnus-topic - '(progn - (setq gnus-message-archive-group '((format-time-string "sent.%Y"))) - (setq gnus-topic-topology '(("Gnus" visible) - (("lucien@phundrak.com" visible nil nil)))) - (setq gnus-topic-alist '(("lucien@phundrak.com" ; the key of the topic - "nnimap+lucien@phundrak.com:INBOX" - "nnimap+lucien@phundrak.com:Sent" - "nnimap+lucien@phundrak.com:Drafts") - ("Gnus"))))) - #+END_SRC - -*** Visual configuration - :PROPERTIES: - :CUSTOM_ID: h-8ccda149-c755-4c80-8643-7a9b99ee85b2 - :header-args:emacs-lisp: :comments link :tangle ~/.gnus.el - :END: - This section will be tangled in =~/.gnus.el=. - - I get it that it used to be a good option with 4/3 screens, but frankly - opening an email at the bottom of the frame instead of the side of the frame - does not look good anymore. So, let’s fix that: - #+BEGIN_SRC emacs-lisp - (gnus-add-configuration - '(article (horizontal 1.0 (summary .4 point) (article 1.0)))) - #+END_SRC - ** LSP :PROPERTIES: :CUSTOM_ID: h-4d0272c3-df5e-4f6b-a6e6-f769add4e603 @@ -1999,20 +1861,57 @@ :PROPERTIES: :CUSTOM_ID: h-ba4a69ff-38a6-498a-b076-a514bbf0701f :END: + Mu4e is a frontend for mu, an email analyzer which sits on top of a Maildir + which gets updated with ~isync~. It has a lot of neat features, but I guess + my favorite ones are: + 1. the search query feature + 2. being able to send an HTML email either to the browser or + 3. to compile it to a PDF for a better output + This last feature can only be enabled manually with Arch Linux. We need + ~webkitgtk~ installed, and unfortunately, it is by default only available + through the AUR and has to be compiled. Thing is, ~webkitgtk~ is a *BIG* + piece of software, and compiling it can be very time consuming. So, I decided + to add ArchLinuxCN’s servers to my pacman config (instructions on how to do + so [[https://github.com/archlinuxcn/repo][here]]) so I could install a compiled version from their repos. Next, when I + installed ~mu~ from the AUR, I modified the PKGBUILD like so: + #+BEGIN_SRC diff :tangle no + < ./configure --prefix=/usr --disable-webkit --disable-gtk --enable-mu4e --enable-guile + --- + > ./configure --prefix=/usr --enable-mu4e --enable-guile + #+END_SRC + This enables the installation of ~msg2pdf~, which in turn enables the email + compilation to PDF with the shortcut ~a v~ when an email is opened, and this + opens the PDF in a new Emacs buffer. + + Due to mu sitting on top of a Maildir, I need to tell mu4e where said maildir + is, and point it the trash, archive, and sent folders as well as the refresh + command and how frequently I want my emails to be refreshed. #+BEGIN_SRC emacs-lisp (setq mu4e-maildir "~/.mail" mu4e-trash-folder "/Trash" mu4e-refile-folder "/Archive" mu4e-sent-folder "/Sent" mu4e-get-mail-command "mbsync -a" - mu4e-update-interval 60 - mu4e-compose-signature-auto-include t + mu4e-update-interval 60) + #+END_SRC + + The following also allows me to automatically include my signature in my + Emails, to view images in my Emacs buffers and to show me the address of my + contacts and not just their names. + #+BEGIN_SRC emacs-lisp + (setq mu4e-compose-signature-auto-include t mu4e-view-show-images t mu4e-view-show-addresses t) #+END_SRC - Bookmarks + This source block is an example of the search queries in mu4e, and part of + the reason why I very much like mu4e: these bookmarks are actually defined by + search queries, but act as if they were just yet another type of custom inbox + you get with modern Email client (and often you don’t even get them). All + these bookmarks can be accessed through a shortcut on the main mu4e buffer, + prefixed by ~b~. So, for instance, my unread messages are accessed through + ~bu~. #+BEGIN_SRC emacs-lisp (setq mu4e-bookmarks `(("flag:unread AND NOT flag:trashed" "Unread messages" ?u) @@ -2027,23 +1926,76 @@ "All inboxes" ?i))) #+END_SRC - Enable OS notifications. + On new email arrival, Emacs can send the system a notification which will be + handled as any other notification received by the system and will display the + number of unread emails to the user; in my case, notifications are handled by + [[https://dunst-project.org/][dunst]]. #+BEGIN_SRC emacs-lisp - (setq mu4e-enable-notifications t) + (setq mu4e-enable-notifications t + mu4e-alert-email-notification-types '(count)) (with-eval-after-load 'mu4e-alert - (mu4e-alert-set-default-style 'notifications)) + (mu4e-alert-set-default-style 'libnotify)) #+END_SRC + Now this hook is added so I can get a maximal width for the text of my + emails, I really don’t like it when lines are kilometers long. I would like + instead to hook ~visual-line-mode~ and ~auto-fill-mode~, but for some reasons + Emacs throws an error when I add them, So I go with ~visual-fill-column-mode~ + instead. #+BEGIN_SRC emacs-lisp (add-hook 'mu4e-view-mode-hook 'visual-fill-column-mode) #+END_SRC - Vertical split + On modern-day computers, with wide screens almost everywhere, there is no + reason for the email buffer to open below the email directory and not on its + right, which is why I set the split view to be vertical instead of + horizontal. I also set the width the email directory should keep to 80 + characters (and I could go to 120, but that’s only good for my + ultra-widescreen), because 30 characters is way too f-ing low. #+BEGIN_SRC emacs-lisp (setq mu4e-split-view 'vertical mu4e-headers-visible-columns 80) #+END_SRC + I want to add myself as a hidden recipient to all of my messages so I can get + them in the email thread in my inbox and not just get a thread of messages + not sent by me –the thread could kinda lack some context if the other people + do not insert my email in their answer. But unfortunately, for some obscure + reason, mu4e does not use the following variable for its email templates, so + I am keeping this as a reminder I should find how to fix that. It does work + when I’m exporting an org file to and HTML buffer to be sent by email through + ~, e m~. + #+BEGIN_SRC emacs-lisp + (setq message-default-headers "Bcc: Lucien Cartier-Tilet \n") + #+END_SRC + + Finally but very importantly, this is the setup I have for my SMTP mail + server: I point Emacs’ SMTP services to my private mail server on its SMTP + port, which should be used with a STARTTLS stream. And I tell Emacs this is + the default way to send an email. + #+BEGIN_SRC emacs-lisp + (setq smtpmail-smtp-server "mail.phundrak.com" + smtpmail-smtp-service 587 + smtpmail-stream-type 'starttls + message-send-mail-function 'smtpmail-send-it) + #+END_SRC + + I am unsure yet if this has any effect on mu4e, but this variable should + discourage mu4e from reading rich text emails and instead open them as plain + text. However, I do not wish to discourage opening HTML emails since I can + compile them to PDF or open them in the browser. + #+BEGIN_SRC emacs-lisp + (setq mm-discouraged-alternatives '("text/richtext")) + #+END_SRC + + I am still unsure about this variable and if it has an effect on mu4e, but I + wish to set a default web viewer for my HTML emails: w3m. This is not as + effective as sending the email in the browser or rendering it as a PDF file, + but it can be effective enough for some emails. + #+BEGIN_SRC emacs-lisp + (setq mm-text-html-renderer 'w3m) + #+END_SRC + ** Miscellaneous :PROPERTIES: :CUSTOM_ID: h-cee08965-745a-4a6f-b04e-bf1638342698