Moving to Doom Emacs!

This commit is contained in:
Derek Taylor
2019-12-16 20:21:19 -06:00
parent d9f2f456f1
commit d4b4c33550
683 changed files with 51877 additions and 100 deletions

View File

@@ -0,0 +1,93 @@
#+TITLE: ui/doom
#+DATE: October 9, 2019
#+SINCE: v1.3
#+STARTUP: inlineimages
* Table of Contents :TOC_3:noexport:
- [[#description][Description]]
- [[#module-flags][Module Flags]]
- [[#plugins][Plugins]]
- [[#prerequisites][Prerequisites]]
- [[#configuration][Configuration]]
- [[#changing-theme][Changing theme]]
- [[#changing-fonts][Changing fonts]]
- [[#troubleshooting][Troubleshooting]]
- [[#strange-font-symbols][Strange font symbols]]
- [[#ugly-background-colors-in-tty-emacs-for-daemon-users][Ugly background colors in tty Emacs for daemon users]]
* Description
This module gives Doom its signature look: powered by the =doom-one= theme
(inspired by Atom's One Dark theme) and =solaire-mode=.
+ A colorscheme inspired by Atom's One Dark theme (now available in a separate
plugin: [[https://github.com/hlissner/emacs-doom-theme/][doom-themes]])
+ A custom folded-region indicator for ~hideshow~
+ "Thin bar" fringe bitmaps for ~git-gutter-fringe~
+ File-visiting buffers are slightly brighter (thanks to solaire-mode)
** Module Flags
This module provides no flags.
** Plugins
+ [[https://github.com/hlissner/emacs-doom-themes][doom-themes]]
+ [[https://github.com/hlissner/emacs-solaire-mode][solaire-mode]]
* Prerequisites
This module has no prereqisites.
* Configuration
** Changing theme
Although this module uses the ~doom-one~ theme by default, [[https://github.com/hlissner/emacs-doom-theme/][doom-themes]] offers a number of alternatives:
+ *doom-one:* doom-themes' flagship theme, inspired by [[https://atom.io/][Atom's]] One Dark themes
+ *doom-vibrant:* a more vibrant version of doom-one
+ *doom-molokai:* based on Textmate's monokai
+ *doom-nova:* adapted from [[https://trevordmiller.com/projects/nova][Nova]]
+ *doom-one-light:* light version of doom-one
+ *doom-peacock:* based on Peacock from [[https://daylerees.github.io/][daylerees' themes]]
+ *doom-tomorrow-night:* by [[https://github.com/ChrisKempson/Tomorrow-Theme][Chris Kempson]]
This can be changed by changing the ~doom-theme~ variable, e.g.
#+BEGIN_SRC emacs-lisp
(setq doom-theme 'doom-molokai)
#+END_SRC
** Changing fonts
core/core-ui.el has four relevant variables:
+ ~doom-font~ :: the default font to use in Doom Emacs.
+ ~doom-big-font~ :: the font to use when ~doom-big-font-mode~ is enabled.
+ ~doom-variable-font~ :: the font to use when ~variable-pitch-mode~ is active (or where the ~variable-pitch~ face is used).
+ ~doom-unicode-font~ :: the font used to display unicode symbols. This is ignored if the =:ui unicode= module is enabled.
#+BEGIN_SRC emacs-lisp
(setq doom-font (font-spec :family "Fira Mono" :size 12)
doom-variable-pitch-font (font-spec :family "Fira Sans")
doom-unicode-font (font-spec :family "DejaVu Sans Mono")
doom-big-font (font-spec :family "Fira Mono" :size 19))
#+END_SRC
* Troubleshooting
** Strange font symbols
If you're seeing strange unicode symbols, this is likely because you don't have
~all-the-icons~'s font icon installed. You can install them with ~M-x
all-the-icons-install-fonts~.
** Ugly background colors in tty Emacs for daemon users
=solaire-mode= is an aesthetic plugin that makes file-visiting buffers brighter
than the rest of the Emacs' frame (to visually differentiate temporary windows
or sidebars from editing windows). This looks great in GUI Emacs, but can look
questionable in the terminal.
It disables itself if you start tty Emacs with ~emacs -nw~, but if you create a
tty frame from a daemon (which solaire-mode cannot anticipate), you'll get an
ugly background instead.
If you only use Emacs in the terminal, your best bet is to disable the
solaire-mode package:
#+BEGIN_SRC elisp
;; in ~/.doom.d/packages.el
(package! solaire-mode :disable t)
#+END_SRC

View File

@@ -0,0 +1,96 @@
;;; ui/doom/config.el -*- lexical-binding: t; -*-
(defvar +doom-solaire-themes
'((doom-challenger-deep . t)
(doom-city-lights . t)
(doom-dracula . t)
(doom-molokai)
(doom-nord . t)
(doom-nord-light . t)
(doom-nova)
(doom-one . t)
(doom-one-light . t)
(doom-opera . t)
(doom-snazzy . t)
(doom-solarized-dark . t)
(doom-solarized-light)
(doom-spacegrey . t)
(doom-tomorrow-day . t)
(doom-tomorrow-night . t)
(doom-vibrant))
"An alist of themes that support `solaire-mode'. If CDR is t, then
`solaire-mode-swap-bg' will be used automatically, when the theme is loaded.")
;;
;;; Packages
(use-package! doom-themes
:defer t
:init
(unless doom-theme
(setq doom-theme 'doom-one))
:config
;; improve integration w/ org-mode
(add-hook 'doom-load-theme-hook #'doom-themes-org-config)
;; more Atom-esque file icons for neotree/treemacs
(when (featurep! :ui neotree)
(add-hook 'doom-load-theme-hook #'doom-themes-neotree-config)
(setq doom-themes-neotree-enable-variable-pitch t
doom-themes-neotree-file-icons 'simple
doom-themes-neotree-line-spacing 2))
(when (featurep! :ui treemacs)
(add-hook 'doom-load-theme-hook #'doom-themes-treemacs-config)))
(use-package! solaire-mode
:when (or (daemonp) (display-graphic-p))
:defer t
:init
(add-hook! 'doom-load-theme-hook :append
(defun +doom-solaire-mode-swap-bg-maybe-h ()
(pcase-let ((`(,_theme . ,swap) (assq doom-theme +doom-solaire-themes)))
(require 'solaire-mode)
(if swap (solaire-mode-swap-bg)))))
:config
;; fringe can become unstyled when deleting or focusing frames
(add-hook 'focus-in-hook #'solaire-mode-reset)
;; Prevent color glitches when reloading either DOOM or loading a new theme
(add-hook! '(doom-load-theme-hook doom-reload-hook) :append
#'solaire-mode-reset)
;; org-capture takes an org buffer and narrows it. The result is erroneously
;; considered an unreal buffer, so solaire-mode must be restored.
(add-hook 'org-capture-mode-hook #'turn-on-solaire-mode)
;; On Emacs 26+, when point is on the last line and solaire-mode is remapping
;; the hl-line face, hl-line's highlight bleeds into the rest of the window
;; after eob. On Emacs 27 this no longer happens.
(unless EMACS27+
(defun +doom--line-range-fn ()
(cons (line-beginning-position)
(cond ((let ((eol (line-end-position)))
(and (= eol (point-max))
(/= eol (line-beginning-position))))
(1- (line-end-position)))
((or (eobp)
(= (line-end-position 2) (point-max)))
(line-end-position))
((line-beginning-position 2)))))
(setq hl-line-range-function #'+doom--line-range-fn))
;; Because fringes can't be given a buffer-local face, they can look odd, so
;; we remove them in the minibuffer and which-key popups (they serve no
;; purpose there anyway).
(add-hook! 'solaire-mode-hook
(defun +doom-disable-fringes-in-minibuffer-h (&rest _)
(set-window-fringes (minibuffer-window) 0 0 nil)))
(defadvice! +doom--no-fringes-in-which-key-buffer-a (&rest _)
:after 'which-key--show-buffer-side-window
(+doom-disable-fringes-in-minibuffer-h)
(set-window-fringes (get-buffer-window which-key--buffer) 0 0 nil))
(add-hook! '(minibuffer-setup-hook window-configuration-change-hook)
#'+doom-disable-fringes-in-minibuffer-h)
(solaire-global-mode +1))

View File

@@ -0,0 +1,6 @@
;; -*- no-byte-compile: t; -*-
;;; ui/doom/packages.el
(package! doom-themes)
(package! solaire-mode)