+** Web Mode
+#+BEGIN_SRC emacs-lisp
+ (use-package web-mode
+ :config
+ (add-to-list 'auto-mode-alist '("\\.tmpl\\'" . web-mode))
+ (setq web-mode-enable-engine-detection t)
+ (setq web-mode-engines-alist
+ '(("template-toolkit" . "\\.tmpl\\'")))
+ )
+#+END_SRC
+** Spamassassin Mode
+#+BEGIN_SRC emacs-lisp
+ (use-package spamassassin-mode
+ :commands spamassassin-mode
+ :ensure f
+ )
+#+END_SRC
+** Password Store
+#+BEGIN_SRC emacs-lisp
+ (use-package password-store
+ :ensure f
+ :commands password-store-edit password-store-generate
+ )
+#+END_SRC
+** CSS mode
+#+BEGIN_SRC emacs-lisp
+ (use-package css
+ :mode "\\.css'"
+ :config
+ ;; fix up css mode to not be silly
+ ;; from http://www.stokebloke.com/wordpress/2008/03/21/css-mode-indent-buffer-fix/
+ (setq cssm-indent-level 4)
+ (setq cssm-newline-before-closing-bracket t)
+ (setq cssm-indent-function #'cssm-c-style-indenter)
+ (setq cssm-mirror-mode nil))
+#+END_SRC
+** Abbrev Mode
+#+BEGIN_SRC emacs-lisp
+ (use-package abbrev
+ :diminish abbrev-mode
+ :config
+ ;; load abbreviations from
+ (setq abbrev-file-name
+ "~/.emacs_abbrev_def")
+
+ ;; read the abbrev file if it exists
+ (if (file-exists-p abbrev-file-name)
+ (quietly-read-abbrev-file))
+
+ ;; for now, use abbrev mode everywhere
+ (setq default-abbrev-mode t))
+#+END_SRC
+
+* Email
+** Mutt
+*** Message-mode
+#+BEGIN_SRC emacs-lisp
+ (use-package message
+ :ensure f
+ :diminish (message "✉")
+ :mode ("muttng-[a-z0-9]+-[0-9]+-" . message-mode)
+ :mode ("mutt-[a-z0-9]+-[0-9]+-" . message-mode)
+ :hook 'my/message-mode-settings
+ :hook 'turn-on-flyspell
+ :bind (:map message-mode-map
+ ("C-c C-a" . my/post-attach-file))
+ :delight (message-mode "✉")
+ :config
+ (defun my/message-mode-settings ()
+ (font-lock-add-keywords nil
+ '(("^[ \t]*>[ \t]*>[ \t]*>.*$"
+ (0 'message-multiply-quoted-text-face))
+ ("^[ \t]*>[ \t]*>.*$"
+ (0 'message-double-quoted-text-face))))
+ )
+
+ (defun my/post-attach-file ()
+ "Prompt for an attachment."
+ (interactive)
+ (let ((file (read-file-name "Attach file: " nil nil t nil)))
+ (my/header-attach-file file "")))
+
+ (defun my/header-attach-file (file description)
+ "Attach a FILE to the current message (works with Mutt).
+ Argument DESCRIPTION MIME description."
+ (interactive "fAttach file: \nsDescription: ")
+ (when (> (length file) 0)
+ (save-excursion
+ (save-match-data
+ (save-restriction
+ (widen)
+ (goto-char (point-min))
+ (search-forward-regexp "^$")
+ (insert (concat "Attach: " (replace-regexp-in-string "\\([[:space:]\\]\\)" "\\\\\\1" (file-truename file)) " "
+ description "\n"))
+ (message (concat "Attached '" file "'."))
+ (setq post-has-attachment t))))))
+
+ (setq mail-yank-prefix "> ")
+ )
+#+END_SRC
+*** Muttrc mode
+#+BEGIN_SRC emacs-lisp
+ (use-package muttrc-mode
+ :mode "muttngrc"
+ :mode "muttrc"
+ )
+
+#+END_SRC
+* Base emacs
+** Reverting buffers
+#+BEGIN_SRC emacs-lisp
+ (use-package autorevert
+ :diminish auto-revert-mode
+ :config
+ (setq global-auto-revert-non-file-buffers t
+ global-auto-revert-ignore-modes '(pdf-view-mode)
+ auto-revert-verbose nil)
+ (global-auto-revert-mode 1))
+#+END_SRC