Commit Diff


commit - 96a9d7c833030e0d5d457607c533e4d6245486f4
commit + 2c7c4c04e4ffd82412f0e05385f82fc37053c805
blob - e6366126e4c150a2e5b41c6d2f44d6733538b355
blob + 338b9576e618faa40c957c1bb568e08da1e8e83a
--- .gitignore
+++ .gitignore
@@ -5,4 +5,5 @@
 /auto-save-list/
 /*.elc
 /lisp/*.elc
+/themes/**/*.elc
 /plugins/**/*.elc
blob - db750b380104a87645ab569a87adf8efca9bf5ee
blob + e0f348e520422fdc21f965dd503a57094f6c44b5
--- init.el
+++ init.el
@@ -84,7 +84,6 @@
 (elpaca-queue
  (elpaca undo-fu-session)
  (elpaca vundo)
- (elpaca clipetty)
  (elpaca evil)
  (elpaca evil-collection)
  (elpaca evil-surround)
@@ -112,7 +111,7 @@
  (elpaca sly-quicklisp)
  (elpaca magit)
  (elpaca diff-hl)
- (elpaca eat)
+ (elpaca vterm)
  (elpaca denote-journal)
  (elpaca denote-org)
  (elpaca gptel)
@@ -122,7 +121,9 @@
  (elpaca doric-themes)
  (elpaca ef-themes)
  (elpaca fontaine)
- (elpaca (pilish :host github :repo "dnouri/pilish"))
+ (elpaca pilish)
+ (elpaca popper)
+ (elpaca (pale :host codeberg :repo "monadicsheep/pale"))
  (elpaca (tramp-rpc :host github :repo "ArthurHeymans/emacs-tramp-rpc"
                     :files ("lisp/*.el")))
  (elpaca (janet-ts-mode :host github :repo "sogaiu/janet-ts-mode"))
@@ -133,7 +134,7 @@
 (defconst mine-modules
   '(setup-core setup-ui setup-evil setup-cmp setup-search setup-treesitter setup-prog
                setup-eglot setup-git setup-shell setup-term-sessions setup-tramp-rpc
-               setup-notes setup-remind setup-gptel setup-keys)
+               setup-notes setup-remind setup-gptel setup-pilish setup-popper setup-keys)
   "Configuration libraries loaded during startup.")
 
 (dolist (module mine-modules)
blob - 5942b07d7e7c0e28a388dd3149bf2ab794d2547f
blob + 1a40ca0a0444e97c80361001b335b4733ae798d6
--- lisp/setup-core.el
+++ lisp/setup-core.el
@@ -79,7 +79,7 @@ mirrored path as relative; its parent directories are 
         eshell-directory-name (mine-cache-subdir "eshell"))
 
 (defvar mine-last-theme nil
-  "Theme name to load at startup, persisted after restart.")
+  "GUI theme name to load at startup, persisted after restart.")
 
 (add-to-list 'savehist-additional-variables 'mine-last-theme)
 
@@ -107,10 +107,6 @@ mirrored path as relative; its parent directories are 
         select-enable-primary t
         save-interprogram-text-before-kill t)
 
-(use-package clipetty
-  :if (not (display-graphic-p))
-  :hook (after-init . clipetty-mode))
-
 (require 'server)
 
 (unless (or noninteractive (server-running-p))
blob - 3da5a34fb06322e538db574586321b9632f878f5
blob + 6e18cc90a812083a3fd782d3041a57593797377a
--- lisp/setup-evil.el
+++ lisp/setup-evil.el
@@ -37,9 +37,10 @@
   :bind (:map evil-insert-state-map
               ("C-g" . evil-normal-state))
   :config
-  (evil-mode)
+  (evil-mode 1)
   (add-hook 'git-commit-setup-hook #'evil-insert-state)
-  (evil-set-initial-state 'eat-mode 'emacs)
+  (evil-set-initial-state 'term-mode 'emacs)
+  (evil-set-initial-state 'vterm-mode 'emacs)
 
   (evil-define-key '(normal visual) 'global
                    (kbd "SPC") mine-evil-leader-map
blob - 4b37400fa3f5a0bc77a546418cc6409efe6a2a21
blob + 0e89872485f1eecb49c8d20b405a8b74c25c4eca
--- lisp/setup-keys.el
+++ lisp/setup-keys.el
@@ -25,6 +25,8 @@
 (declare-function mine-gptel-denote-session "setup-gptel" ())
 (declare-function mine-gptel-save-chat "setup-gptel" (&optional title))
 
+(declare-function pilish "pilish" (&optional arg))
+
 (declare-function gptel-send "gptel" (&optional arg))
 (declare-function gptel-menu "gptel" ())
 (declare-function gptel-rewrite "gptel" ())
@@ -81,6 +83,7 @@
 (keymap-global-set "C-c n" mine-notes-prefix-map)
 (keymap-global-set "C-c r" mine-remind-prefix-map)
 (keymap-global-set "C-c L" mine-gptel-prefix-map)
+(keymap-global-set "C-c p" #'pilish)
 
 (provide 'setup-keys)
 ;;; setup-keys.el ends here
blob - /dev/null
blob + 3bcb4b3f6fcddc8d102b5d98860e42a5009c511f (mode 644)
--- /dev/null
+++ lisp/setup-pilish.el
@@ -0,0 +1,19 @@
+;;; setup-pilish.el --- Pi coding agent frontend  -*- lexical-binding: t; -*-
+
+;;; Commentary:
+
+;; Configure Pilish (Emacs frontend for the pi coding agent):
+;; custom backend executable and Evil integration.
+
+;;; Code:
+
+(use-package pilish
+  :custom
+  (pilish-executable '("pisol" "pi" "--offline"))
+  :custom-face
+  (pilish-model-name ((t (:inherit mode-line-buffer-id))))
+  :config
+  (require 'pilish-evil nil t))
+
+(provide 'setup-pilish)
+;;; setup-pilish.el ends here
blob - /dev/null
blob + dd0e043f8823468d774fd3aecca95b0cf04ba59c (mode 644)
--- /dev/null
+++ lisp/setup-popper.el
@@ -0,0 +1,43 @@
+;;; setup-popper.el --- Popup buffers that rotate between shells and Pilish  -*- lexical-binding: t; -*-
+
+;;; Commentary:
+
+;; Popper keeps shell and Pilish buffers out of the way until summoned.
+;; `popper-cycle' rotates between them.
+
+;;; Code:
+
+(declare-function popper-toggle "popper" ())
+(declare-function popper-cycle "popper" ())
+(declare-function popper-toggle-type "popper" ())
+(declare-function popper-mode "popper" (&optional arg))
+(defvar mine-evil-leader-map)
+
+(use-package popper
+  :bind (("C-`" . popper-toggle)
+         ("M-`" . popper-cycle)
+         ("C-M-`" . popper-toggle-type))
+  :custom
+  (popper-group-function nil)
+  (popper-reference-buffers
+   '("\\*eshell\\*"
+     eshell-mode
+     "\\*terminal\\*"
+     term-mode
+     "\\*vterm\\*"
+     vterm-mode
+     "\\*pilish-.*\\*"
+     pilish-chat-mode
+     pilish-input-mode))
+  :config
+  (popper-mode 1)
+  (require 'popper-echo nil t)
+  (when (fboundp 'popper-echo-mode)
+    (popper-echo-mode 1)))
+
+(with-eval-after-load 'evil
+  (keymap-set mine-evil-leader-map "t p" #'popper-toggle)
+  (keymap-set mine-evil-leader-map "t n" #'popper-cycle))
+
+(provide 'setup-popper)
+;;; setup-popper.el ends here
blob - 0413a4bc6071a03902e00d5cb6b0655a88dbeec3
blob + 4b8fc6aafc37333cdc80bef5b9b3a2f7666d6617
--- lisp/setup-shell.el
+++ lisp/setup-shell.el
@@ -2,27 +2,22 @@
 
 ;;; Commentary:
 
-;; Configure Eshell, Eat, and Tramp.
+;; Configure Eshell, Shell, and Tramp.
 
 ;;; Code:
 
 (declare-function consult-history "consult" (&optional history-elements))
-(declare-function eat-eshell-mode "eat" (&optional arg))
-(declare-function eat-eshell-visual-command-mode "eat" (&optional arg))
 
 (defun mine-eshell-setup ()
   "Bind `C-r' to `consult-history' in Eshell."
   (keymap-set (current-local-map) "C-r" #'consult-history))
 
-(add-hook 'eshell-mode-hook #'mine-eshell-setup)
+(use-package eshell
+  :ensure nil
+  :hook (eshell-mode . mine-eshell-setup))
 
-(use-package eat
-  :after eshell
-  :custom
-  (eat-term-name "xterm-256color")
-  :config
-  (eat-eshell-mode)
-  (eat-eshell-visual-command-mode))
+(use-package vterm
+  :commands vterm)
 
 (use-package tramp
   :ensure nil
blob - 910be71028e94678fe43194a1b8664ab942c6d4f
blob + 9630ddbf41a8738609e6b7ecd6d2156016a7f66d
--- lisp/setup-term-sessions.el
+++ lisp/setup-term-sessions.el
@@ -2,7 +2,7 @@
 
 ;;; Commentary:
 
-;; Persistent terminal sessions backed by zmx, attached through Eat.
+;; Persistent terminal sessions backed by zmx, attached through Vterm.
 
 ;;; Code:
 
@@ -10,9 +10,8 @@
   (require 'use-package))
 
 (use-package term-sessions
-  :after eat
   :custom
-  (term-sessions-preferred-frontend 'eat))
+  (term-sessions-preferred-frontend 'vterm))
 
 (provide 'setup-term-sessions)
 ;;; setup-term-sessions.el ends here
blob - 1da24af77aa526d7ce665936e257de3455ea2508
blob + ead42476f0755ce2dd1a6cb7f8ea1d58c6d4b0a5
--- lisp/setup-ui.el
+++ lisp/setup-ui.el
@@ -77,41 +77,40 @@
   ;; Move underlines to the descent line to reduce glyph clipping.
   (setopt x-underline-at-descent-line t))
 
-(defvar ef-themes-items)
-(defvar doric-themes-collection)
+(let ((themes (file-name-concat user-emacs-directory "themes")))
+  (dolist (dir (cons themes (file-expand-wildcards (file-name-concat themes "*/"))))
+    (dolist (var '(load-path custom-theme-load-path))
+      (add-to-list var dir))))
 
-(defun mine-theme--record ()
-  "Persist selected theme on restart."
-  (when (display-graphic-p)
-    (catch 'found
-      (dolist (theme custom-enabled-themes)
-        (when (or (memq theme ef-themes-items)
-                  (memq theme doric-themes-collection))
-          (setq mine-last-theme theme)
-          (throw 'found t))))))
+(defun mine-theme--record (&rest _)
+  "Persist selected GUI theme across restarts."
+  (when (and custom-enabled-themes (display-graphic-p))
+    (setq mine-last-theme (car custom-enabled-themes))))
 
-(add-hook 'doric-themes-after-load-theme-hook #'mine-theme--record)
+(advice-add 'load-theme :after #'mine-theme--record)
 
-(use-package doric-themes
-  :unless (display-graphic-p)
-  :demand t
-  :config
-  (load-theme (if (eq system-type 'darwin) 'ef-maris-dark 'ef-night) t)
-  ;; Inherit background and foreground from the terminal emulator.
-  (face-spec-set 'default '((t (:background unspecified
-                                            :foreground unspecified)))
-                 'face-override-spec))
+(add-hook 'enable-theme-functions #'mine-theme--record)
 
+(unless (display-graphic-p)
+  (condition-case nil
+      (load-theme 'eziam-dark t)
+    (error (load-theme 'ef-night t))))
+
 (use-package ef-themes
   :if (display-graphic-p)
   :demand t
   :config
   (add-hook 'ef-themes-after-load-theme-hook #'mine-theme--record)
-  (load-theme (or (and mine-last-theme
-                       (require-theme mine-last-theme 'noerror))
-                  'ef-winter)
-              t))
+  (condition-case nil
+      (load-theme (or (and (symbolp mine-last-theme) mine-last-theme)
+                      'ef-winter)
+                  t)
+    (error (load-theme 'ef-winter t))))
 
+;; Vendored third-party snapshots, theme files already say no-byte-compile.
+(when (boundp 'compile-angel-excluded-path-suffixes)
+  (add-to-list 'compile-angel-excluded-path-suffixes "/themes/"))
+
 (setopt display-line-numbers-width 3)
 
 (add-hook 'prog-mode-hook #'display-line-numbers-mode)
@@ -139,5 +138,11 @@
 
 (which-key-mode)
 
+(when (boundp 'mode-line-collapse-minor-modes)
+  (setopt mode-line-collapse-minor-modes
+          '(evil-collection-unimpaired-mode
+            which-key-mode
+            compile-angel-on-load-mode)))
+
 (provide 'setup-ui)
 ;;; setup-ui.el ends here
blob - /dev/null
blob + 1109c06c392f3d1b4ad65d960a274a5a59efe367 (mode 644)
--- /dev/null
+++ themes/eziam/eziam-dark-theme.el
@@ -0,0 +1,101 @@
+;;; eziam-dark-theme.el --- Dark version of the Eziam theme -*- lexical-binding: t; -*-
+
+;; Copyright (c) 2016-2020 Thibault Polge <thibault@thb.lt>
+
+;; Eziam is based on Tao theme, copyright (C) 2014 Peter <11111000000
+;; at email.com> with contributions by Jasonm23 <jasonm23@gmail.com>.
+;; Tao also credits: "Original faces taken from Zenburn theme port (c)
+;; by Bozhidar Batsov"
+
+;; Author: Thibault Polge <thibault@thb.lt>
+;; Maintainer: Thibault Polge <thibault@thb.lt>
+;;
+;; Keywords: faces
+;; Homepage: https://github.com/thblt/eziam-theme-emacs
+;; Version: 5.1
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This package provides a dark version of the Eziam theme for Emacs.
+
+;;; Code:
+
+(require 'eziam-themes)
+
+(deftheme eziam-dark "The dark Eziam color theme")
+
+(eziam-with-color-variables
+  (
+   ;; Base palette
+   ("color-0"                . "#000000")
+   ("color-1"                . "#111111")
+   ("color-2"                . "#444444")
+   ("color-3"                . "#666666")
+   ("color-4"                . "#888888")
+   ("color-5"                . "#aaaaaa")
+   ("color-6"                . "#cccccc")
+   ("color-7"                . "#eeeeee")
+   ("color-8"                . "#ffffff")
+   ;; Headings
+   ("ol1-fg"                 . nil)
+   ("ol1-bg"                 . "#000000")
+   ("ol2-fg"                 . nil)
+   ("ol2-bg"                 . "#063545")
+   ("ol3-fg"                 . nil)
+   ("ol3-bg"                 . "#186b8c")
+   ("ol4-fg"                 . "#222222")
+   ("ol4-bg"                 . "#1e85ae")
+   ("ol5-fg"                 . "#222222")
+   ("ol5-bg"                 . "#96a4ab")
+   ("ol6-fg"                 . nil)
+   ("ol6-bg"                 . nil)
+   ("ol7-fg"                 . nil)
+   ("ol7-bg"                 . nil)
+   ("ol8-fg"                 . nil)
+   ("ol8-bg"                 . nil)
+   ;; Misc
+   ("colored-comments"       . "#ccffcc")
+   ("transient-highlight"    . "#ffff00")
+   ("transient-highlight-fg" . "#000000")
+   ("warning"                . "gold")
+   ("error"                  . "#ff0000")
+   ("info"                   . "DeepSkyBlue")
+   ("ok"                     . "green")
+
+   ("rainbow-1"              . "#ff0000")
+   ("rainbow-2"              . "#ff7700")
+   ("rainbow-3"              . "#ffff00")
+   ("rainbow-4"              . "#00ff00")
+   ("rainbow-5"              . "#0000ff")
+   ("rainbow-6"              . "#8f00ff")
+   )
+  (eziam-apply-custom-theme 'eziam-dark))
+
+;;;###autoload
+(and load-file-name
+     (boundp 'custom-theme-load-path)
+     (add-to-list 'custom-theme-load-path
+                  (file-name-as-directory
+                   (file-name-directory load-file-name))))
+
+(provide-theme 'eziam-dark)
+
+;; Local Variables:
+;; mode: emacs-lisp;
+;; indent-tabs-mode: nil
+;; End:
+
+;;; eziam-dark-theme.el ends here
blob - /dev/null
blob + a4b723b7e5452706c6e66eb214c0959f3ead049c (mode 644)
--- /dev/null
+++ themes/eziam/eziam-dusk-theme.el
@@ -0,0 +1,101 @@
+;;; eziam-dusk-theme.el --- Dusk version of the Eziam theme -*- lexical-binding: t; -*-
+
+;; Copyright (c) 2016-2017 Thibault Polge <thibault@thb.lt>
+
+;; Eziam is based on Tao theme, copyright (C) 2014 Peter <11111000000
+;; at email.com> with contributions by Jasonm23 <jasonm23@gmail.com>.
+;; Tao also credits: "Original faces taken from Zenburn theme port (c)
+;; by Bozhidar Batsov"
+
+;; Author: Thibault Polge <thibault@thb.lt>
+;; Maintainer: Thibault Polge <thibault@thb.lt>
+;;
+;; Keywords: faces
+;; Homepage: https://github.com/thblt/eziam-theme-emacs
+;; Version: 5.1
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This package provides a dusk version of the Eziam theme for Emacs.
+
+;;; Code:
+
+(require 'eziam-themes)
+
+(deftheme eziam-dusk "The dusk Eziam color theme")
+
+(eziam-with-color-variables
+  (
+   ;; Base palette
+   ("color-0"                . "#222222")
+   ("color-1"                . "#444444")
+   ("color-2"                . "#666666")
+   ("color-3"                . "#888888")
+   ("color-4"                . "#AAAAAA")
+   ("color-5"                . "#CCCCCC")
+   ("color-6"                . "#EEEEEE")
+   ("color-7"                . "#FFFFFF")
+   ("color-8"                . "#ffffff")
+   ;; Headings
+   ("ol1-fg"                 . nil)
+   ("ol1-bg"                 . "#000000")
+   ("ol2-fg"                 . nil)
+   ("ol2-bg"                 . "#063545")
+   ("ol3-fg"                 . nil)
+   ("ol3-bg"                 . "#186b8c")
+   ("ol4-fg"                 . "#222222")
+   ("ol4-bg"                 . "#1e85ae")
+   ("ol5-fg"                 . "#222222")
+   ("ol5-bg"                 . "#96a4ab")
+   ("ol6-fg"                 . nil)
+   ("ol6-bg"                 . nil)
+   ("ol7-fg"                 . nil)
+   ("ol7-bg"                 . nil)
+   ("ol8-fg"                 . nil)
+   ("ol8-bg"                 . nil)
+   ;; Misc
+   ("colored-comments"       . "#ccffcc")
+   ("transient-highlight"    . "yellow")
+   ("transient-highlight-fg" . "#000000")
+   ("warning"                . "gold")
+   ("error"                  . "#ff0000")
+   ("info"                   . "DeepSkyBlue")
+   ("ok"                     . "green")
+
+   ("rainbow-1"              . "#ff0000")
+   ("rainbow-2"              . "#ff7700")
+   ("rainbow-3"              . "#ffff00")
+   ("rainbow-4"              . "#00ff00")
+   ("rainbow-5"              . "#0000ff")
+   ("rainbow-6"              . "#8f00ff")
+   )
+  (eziam-apply-custom-theme 'eziam-dusk))
+
+;;;###autoload
+(and load-file-name
+     (boundp 'custom-theme-load-path)
+     (add-to-list 'custom-theme-load-path
+                  (file-name-as-directory
+                   (file-name-directory load-file-name))))
+
+(provide-theme 'eziam-dusk)
+
+;; Local Variables:
+;; mode: emacs-lisp;
+;; indent-tabs-mode: nil
+;; End:
+
+;;; eziam-dusk-theme.el ends here
blob - /dev/null
blob + eee587a2bdc47e7e6532d87266b69b9983a4718d (mode 644)
--- /dev/null
+++ themes/eziam/eziam-light-theme.el
@@ -0,0 +1,101 @@
+;;; eziam-light-theme.el --- Light version of the Eziam theme -*- lexical-binding: t; -*-
+
+;; Copyright (c) 2016-2020 Thibault Polge <thibault@thb.lt>
+
+;; Eziam is based on Tao theme, copyright (C) 2014 Peter <11111000000
+;; at email.com> with contributions by Jasonm23 <jasonm23@gmail.com>.
+;; Tao also credits: "Original faces taken from Zenburn theme port (c)
+;; by Bozhidar Batsov"
+
+;; Author: Thibault Polge <thibault@thb.lt>
+;; Maintainer: Thibault Polge <thibault@thb.lt>
+;;
+;; Keywords: faces
+;; Homepage: https://github.com/thblt/eziam-theme-emacs
+;; Version: 5.1
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This package provides a light version of the Eziam theme for Emacs.
+
+;;; Code:
+
+(require 'eziam-themes)
+
+(deftheme eziam-light "The light Eziam color theme")
+
+(eziam-with-color-variables
+  (
+   ;; Base palette
+   ("color-0"                . "#ffffff")
+   ("color-1"                . "#eeeeee")
+   ("color-2"                . "#dddddd")
+   ("color-3"                . "#cccccc")
+   ("color-4"                . "#aaaaaa")
+   ("color-5"                . "#888888")
+   ("color-6"                . "#555555")
+   ("color-7"                . "#222222")
+   ("color-8"                . "#000000")
+   ;; Headings
+   ("ol1-fg"                 . nil)
+   ("ol1-bg"                 . "#ffffff")
+   ("ol2-fg"                 . nil)
+   ("ol2-bg"                 . "#d6eaf4")
+   ("ol3-fg"                 . nil)
+   ("ol3-bg"                 . "#c1d3dc")
+   ("ol4-fg"                 . nil)
+   ("ol4-bg"                 . "#abbbc3")
+   ("ol5-fg"                 . "#eeeeee")
+   ("ol5-bg"                 . "#96a4ab")
+   ("ol6-fg"                 . nil)
+   ("ol6-bg"                 . "#d7d7d7")
+   ("ol7-fg"                 . nil)
+   ("ol7-bg"                 . nil)
+   ("ol8-fg"                 . nil)
+   ("ol8-bg"                 . nil)
+   ;; Misc
+   ("colored-comments"       . "#117711")
+   ("transient-highlight"    . "#ffff00")
+   ("transient-highlight-fg" . "#000000")
+   ("warning"                . "DarkOrange")
+   ("error"                  . "#ff0000")
+   ("info"                   . "#2244ff")
+   ("ok"                     . "ForestGreen")
+
+   ("rainbow-1"              . "#ff0000")
+   ("rainbow-2"              . "#ff7700")
+   ("rainbow-3"              . "goldenrod")
+   ("rainbow-4"              . "#00aa00")
+   ("rainbow-5"              . "#0000ff")
+   ("rainbow-6"              . "#8f00ff")
+   )
+  (eziam-apply-custom-theme 'eziam-light))
+
+;;;###autoload
+(and load-file-name
+     (boundp 'custom-theme-load-path)
+     (add-to-list 'custom-theme-load-path
+                  (file-name-as-directory
+                   (file-name-directory load-file-name))))
+
+(provide-theme 'eziam-light)
+
+;; Local Variables:
+;; mode: emacs-lisp;
+;; indent-tabs-mode: nil
+;; End:
+
+;;; eziam-light-theme.el ends here
blob - /dev/null
blob + 4057140a5e711062efbd4ede1333ebbca64cec88 (mode 644)
--- /dev/null
+++ themes/eziam/eziam-themes.el
@@ -0,0 +1,1138 @@
+;;; eziam-themes.el --- The mostly monochrome Eziam theme family -*- lexical-binding: t; -*-
+
+;; Copyright (c) 2016-2020 Thibault Polge <thibault@thb.lt>
+
+;; Eziam is based on Tao theme, copyright (C) 2014 Peter <11111000000
+;; at email.com> with contributions by Jasonm23 <jasonm23@gmail.com>.
+;; Tao also credits: "Original faces taken from Zenburn theme port (c)
+;; by Bozhidar Batsov"
+
+;; Author: Thibault Polge <thibault@thb.lt>
+;; Maintainer: Thibault Polge <thibault@thb.lt>
+;;
+;; Keywords: faces
+;; Homepage: https://github.com/thblt/eziam-theme-emacs
+;; Version: 5.1
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This package provides several mostly monochrome theme family in the
+;; Eziam family, which were inspired by the Tao and Leuven themes.
+
+;;; Code:
+
+;;;; Variables
+
+(defgroup eziam-theme nil
+  "Customization options for the Eziam theme family."
+  :group 'eziam
+  :group 'faces)
+
+(defcustom eziam-scale-headings t
+  "Non-nil means eziam-theme is allowed to customize the height of outline headlines."
+  :type 'boolean
+  :group 'eziam-theme)
+
+(defcustom eziam-scale-other t
+  "Non-nil means eziam-theme is allowed to customize the height of non-outline headlines faces."
+  :type 'boolean
+  :group 'eziam-theme)
+
+(defcustom eziam-heading-style 'classic
+  "Default style for headings.
+
+Accepted values are:
+
+ - 'classic, the classic Eziam look.
+ - 'gray-blocks, scaled gray blocks organized by brightness.
+
+Appearance for specific modes are controlled with dedicated variables whose names match `eziam-*-heading-style'."
+  :type '(choice (const classic) (const gray-blocks))
+  :group 'eziam-theme)
+
+(defcustom eziam-latex-heading-style nil
+  "Style for outline-(minor)-mode headings.  See `eziam-heading-style' for legal values."
+  :type '(choice (const :tag "Follow default" nil) (const classic) (const gray-blocks))
+  :group 'eziam-theme)
+
+(defcustom eziam-markdown-heading-style nil
+  "Style for markdown-mode headings.  See `eziam-heading-style' for legal values."
+  :type '(choice (const :tag "Follow default" nil) (const classic) (const gray-blocks))
+  :group 'eziam-theme)
+
+(defcustom eziam-org-heading-style nil
+  "Style for Org-Mode headings.  See `eziam-heading-style' for legal values."
+  :type '(choice (const :tag "Follow default" nil) (const classic) (const gray-blocks))
+  :group 'eziam-theme)
+
+(defcustom eziam-outline-heading-style nil
+  "Style for outline-(minor)-mode headings.  See `eziam-heading-style' for legal values."
+  :type '(choice (const :tag "Follow default" nil) (const classic) (const gray-blocks))
+  :group 'eziam-theme)
+
+(defcustom eziam-outshine-heading-style nil
+  "Style for Outshine headings.  See `eziam-heading-style' for legal values."
+  :type '(choice (const :tag "Follow default" nil) (const classic) (const gray-blocks))
+  :group 'eziam-theme)
+
+(defcustom eziam-color-comments nil
+  "If non-nil, comments will be rendered in a non-neutral color. I like this better."
+  :type 'boolean
+  :group 'eziam-theme)
+
+(defun eziam--heading-height (height)
+  "Return HEIGHT if EZIAM-SCALE-HEADINGS is non-nil."
+  (if eziam-scale-headings
+      height
+    1.0))
+
+(defun eziam--other-height (height)
+  "Return HEIGHT if EZIAM-SCALE-OTHER is non-nil."
+  (if eziam-scale-other
+      height
+    1.0))
+
+(defmacro eziam-with-color-variables (eziam-colors &rest body)
+  "`let' bind all colors defined in EZIAM-COLORS around BODY.
+Also bind `class' to ((class color) (min-colors 89))."
+  (declare (indent 0))
+  `(let ((class '((class color) (min-colors 89)))
+         ,@(mapcar (lambda (c)
+                     (list (intern (car c)) (cdr c)))
+                   eziam-colors))
+     ,@body))
+
+(defun eziam--heading-face-form (style level)
+  "Build a form selecting the level LEVEL heading face for STYLE.
+STYLE is a quoted heading-style variable, LEVEL a number from 1 to 8.
+The returned form reads the style value when run and selects the
+matching `ol-classic-N' or `ol-gray-blocks-N' binding."
+  (let ((classic (intern (format "ol-classic-%s" level)))
+        (gray (intern (format "ol-gray-blocks-%s" level))))
+    `(if (eq ,style 'gray-blocks) ,gray ,classic)))
+
+(defmacro eziam-apply-custom-theme (theme-name)
+  "Expand to code applying the Eziam theme faces under THEME-NAME.
+The expansion refers to palette variables that
+`eziam-with-color-variables' lexically binds around it, so only use
+this macro inside that macro."
+  `(let ((class '((class color) (min-colors 256)))
+        ;; Outline headings, classic look
+        (ol-classic-1     `(:height ,(eziam--heading-height 1.8) :foreground ,ol1-fg :background ,ol1-bg :weight bold :overline t))
+        (ol-classic-2     `(:height ,(eziam--heading-height 1.5) :foreground ,ol2-fg :background ,ol2-bg :overline t ))
+        (ol-classic-3     `(:height ,(eziam--heading-height 1.2) :foreground ,ol3-fg :background ,ol3-bg :weight bold :overline t ))
+        (ol-classic-4     `(:height ,(eziam--heading-height 1.0) :foreground ,ol4-fg :background ,ol4-bg :overline t))
+        (ol-classic-5     `(:height ,(eziam--heading-height 1.0) :foreground ,ol5-fg :background ,ol5-bg :overline t :weight bold))
+        (ol-classic-6     `(:height ,(eziam--heading-height 1.0) :foreground ,ol6-fg :background ,ol6-bg :underline t :overline t :weight bold))
+        (ol-classic-7     `(:height ,(eziam--heading-height 1.0) :foreground ,ol7-fg :background ,ol7-bg :underline t :weight bold :slant italic))
+        (ol-classic-8     `(:height ,(eziam--heading-height 1.0) :foreground ,ol8-fg :background ,ol8-bg :underline t :slant italic))
+        ;; Outline headings, gray blocks style
+        (ol-gray-blocks-1 `(:background ,color-6 :height ,(eziam--heading-height 1.6) :foreground ,color-1 :distant-foreground ,color-7 :weight normal :slant normal :overline nil :underline nil :box ,color-4))
+        (ol-gray-blocks-2 `(:background ,color-5 :height ,(eziam--heading-height 1.4) :foreground ,color-1 :distant-foreground ,color-7 :weight normal :slant normal :overline nil :underline nil :box nil))
+        (ol-gray-blocks-3 `(:background ,color-4 :height ,(eziam--heading-height 1.2) :foreground ,color-7 :distant-foreground ,color-7 :weight normal :slant normal :overline nil :underline nil :box nil))
+        (ol-gray-blocks-4 `(:background ,color-3 :height ,(eziam--heading-height 1.0) :foreground ,color-7 :distant-foreground ,color-7 :weight normal :slant italic :overline nil :underline ,color-5 :box nil))
+        (ol-gray-blocks-5 `(:background ,color-2 :height ,(eziam--heading-height 1.0) :foreground ,color-7 :distant-foreground ,color-7 :weight bold   :slant normal :overline nil :underline ,color-5 :box nil))
+        (ol-gray-blocks-6 `(:background ,color-1 :height ,(eziam--heading-height 1.0) :foreground ,color-7 :distant-foreground ,color-7 :weight normal :slant normal :overline nil :underline ,color-7 :box nil))
+        (ol-gray-blocks-7 `(:background ,color-1 :height ,(eziam--heading-height 1.0) :foreground ,color-6 :distant-foreground ,color-7 :weight normal :slant italic :overline nil :underline ,color-7 :box nil))
+        (ol-gray-blocks-8 `(:background ,color-0 :height ,(eziam--heading-height 1.0) :foreground ,color-7 :distant-foreground ,color-7 :weight normal :slant italic :overline nil :underline nil :box nil))
+
+        (latex-heading-style (or eziam-latex-heading-style eziam-heading-style))
+        (markdown-heading-style (or eziam-markdown-heading-style eziam-heading-style))
+        (outline-heading-style  (or eziam-outline-heading-style eziam-heading-style))
+        (org-heading-style      (or eziam-org-heading-style eziam-heading-style))
+        (outshine-heading-style (or eziam-outshine-heading-style eziam-heading-style))
+
+        (transient-highlight  `(:background ,transient-highlight :foreground ,transient-highlight-fg))
+        (info-text            `(:underline (:color ,info :style wave)))
+        (warning-text         `(:underline (:color ,warning :style wave)))
+        (error-text           `(:underline (:color ,error :style wave)))
+        (button-on            `(:background ,color-0 :foreground ,color-7 :overline ,color-4 :weight bold))
+        (button-off           `(:background ,color-2 :foreground ,color-7 :overline ,color-4)))
+
+    (custom-theme-set-faces
+     ,theme-name
+;;;;; Built-in
+     `(bold                                             ((t (:weight bold))))
+     ;; @FIXED - Don't set foreground for bold: it is used by some modes on a different background (eg tabulated-list-mode)
+     `(default                                          ((t (:foreground ,color-8 :background ,color-1))))
+     `(button                                           ((t (:underline t))))
+     `(link                                             ((t (:foreground ,color-8 :underline t :weight bold))))
+     `(link-visited                                     ((t (:foreground ,color-8 :underline t :weight normal))))
+     `(hl-paren-face                                    ((t (:foreground ,color-8 :background ,color-1 :weight bold))))
+     `(cursor                                           ((t (:foreground ,color-8 :background ,color-8))))
+     `(escape-glyph                                     ((t (:foreground ,color-8 :bold t))))
+     `(fringe                                           ((t (:foreground ,color-4 :background ,color-2))))
+     `(header-line                                      ((t (:inherit mode-line))))
+     `(highlight                                        ((t (:background ,color-3))))
+     `(region                                           ((t (:background ,color-6 :foreground ,color-1))))
+     `(shadow                                           ((t (:foreground ,color-3))))
+     `(success                                          ((t (:foreground ,color-6 :weight bold))))
+     `(warning                                          ((t (:foreground ,color-8 :weight bold))))
+     ;; compilation
+     `(compilation-column-face                          ((t (:foreground ,color-8))))
+     `(compilation-enter-directory-face                 ((t (:foreground ,color-6))))
+     `(compilation-error-face                           ((t (:foreground ,color-6 :weight bold :underline t))))
+     `(compilation-face                                 ((t (:foreground ,color-8))))
+     `(compilation-info-face                            ((t (:foreground ,color-8))))
+     `(compilation-info                                 ((t (:foreground ,color-8 :underline t))))
+     `(compilation-leave-directory-face                 ((t (:foreground ,color-6))))
+     `(compilation-line-face                            ((t (:foreground ,color-8))))
+     `(compilation-line-number                          ((t (:foreground ,color-8))))
+     `(compilation-message-face                         ((t (:foreground ,color-8))))
+     `(compilation-warning-face                         ((t (:foreground ,color-8 :weight bold :underline t))))
+     `(compilation-mode-line-exit                       ((t (:foreground ,color-8 :weight bold))))
+     `(compilation-mode-line-fail                       ((t (:foreground ,color-7 :weight bold))))
+     `(compilation-mode-line-run                        ((t (:foreground ,color-8 :weight bold))))
+;;;;; line numbers
+     `(line-number                                      ((t (:background ,color-2 :foreground ,color-4))))
+     `(line-number-current-line                         ((t (:background ,color-1 :foreground ,color-6))))
+     `(line-number-major-tick                           ((t (:background ,color-2 :foreground ,color-6 :weight bold))))
+     `(line-number-minor-tick                           ((t (:background ,color-2 :foreground ,color-5 :weight bold))))
+     `(linum                                            ((t (:inherit line-number))))
+     `(linum-relative-current-face                      ((t (:inherit line-number-current-line))))
+;;;;; grep
+     `(grep-context-face                                ((t (:foreground ,color-8))))
+     `(grep-error-face                                  ((t (:foreground ,color-6 :weight bold :underline t))))
+     `(grep-hit-face                                    ((t (:foreground ,color-8))))
+     `(grep-match-face                                  ((t (:foreground ,color-8 :weight bold))))
+     `(match                                            ((t (:background ,color-1 :foreground ,color-8 :weight bold))))
+;;;;; haskell-mode
+     ;; @TODO: This is a work-in-progress
+     `(haskell-literate-comment-face                    ((t :background ,(if eziam-color-comments colored-comments color-0))))
+     `(haskell-operator-face                            ((t (:background ,color-0))))
+;;;;; ivy
+     `(ivy-current-match
+       ;; This is very similar to :inverse-video t, but works better with color selectors.
+       ((t (:background ,color-8 :foreground ,color-0 :weight bold))))
+;;;;; make
+     `(makefile-space                                   ((t (:background ,color-1))))
+     `(makefile-targets                                 ((t (:underline t))))
+     `(makefile-shell                                   ((t (:slant italic))))
+;;;;; isearch
+     `(isearch                                          ((,class ,transient-highlight)))
+     `(isearch-fail                                     ((t (:foreground ,color-8 :background ,color-4))))
+     `(lazy-highlight                                   ((t (:foreground ,color-8 :weight bold :background ,color-2))))
+     `(menu                                             ((t (:foreground ,color-8 :background ,color-1))))
+     `(minibuffer-prompt                                ((t (:foreground ,color-8 :color ,color-1))))
+     `(mode-line                                        ((t (:foreground ,color-1 :background ,color-6 :box nil ))))
+     `(mode-line-inactive                               ((t (:foreground ,color-1 :background ,color-4 :box nil ))))
+     `(mode-line-buffer-id                              ((t (:foreground ,color-1 :weight bold))))
+     `(secondary-selection                              ((t (:background ,color-1))))
+     `(cua-rectangle                                    ((t (:background ,color-1))))
+     `(trailing-whitespace                              ((t (:background ,color-7))))
+     `(vertical-border                                  ((t (:foreground ,color-4 :background ,color-1))))
+;;;;; font lock
+     `(font-lock-builtin-face                           ((t (:foreground ,color-7 :weight bold))))
+     `(font-lock-comment-face                           ((t (:foreground ,(if eziam-color-comments colored-comments color-5) :slant italic))))
+     `(font-lock-delimiter-face                         ((t (:foreground ,color-5 :slant italic))))
+     `(font-lock-constant-face                          ((t (:foreground ,color-5 :weight bold))))
+     `(font-lock-doc-face                               ((t (:foreground ,(if eziam-color-comments colored-comments color-5)))))
+     `(font-lock-function-name-face                     ((t (:background ,color-0 :overline ,color-2 :underline ,color-2 :slant italic))))
+     `(font-lock-keyword-face                           ((t (:foreground ,color-8 :weight bold))))
+     `(font-lock-negation-char-face                     ((t (:foreground ,color-8 :weight bold))))
+     `(font-lock-preprocessor-face                      ((t (:foreground ,color-8))))
+     `(font-lock-regexp-grouping-construct              ((t (:foreground ,color-8 :weight bold))))
+     `(font-lock-regexp-grouping-backslash              ((t (:foreground ,color-6 :weight bold))))
+     `(font-lock-string-face                            ((t (:foreground ,color-6))))
+     `(font-lock-type-face                              ((t (:foreground ,color-7 :underline t))))
+     `(font-lock-variable-name-face                     ((t (:foreground ,color-7 :slant italic))))
+     `(font-lock-warning-face                           ((t (:foreground ,warning :weight bold))))
+     `(c-annotation-face                                ((t (:inherit font-lock-constant-face))))
+;;;;; newsticker
+     `(newsticker-date-face                             ((t (:foreground ,color-8))))
+     `(newsticker-default-face                          ((t (:foreground ,color-8))))
+     `(newsticker-enclosure-face                        ((t (:foreground ,color-8))))
+     `(newsticker-extra-face                            ((t (:foreground ,color-4 :height ,(eziam--other-height 0.8))))) ;; FIXME
+     `(newsticker-feed-face ((t (:foreground ,color-8))))
+     `(newsticker-immortal-item-face                    ((t (:foreground ,color-6))))
+     `(newsticker-new-item-face                         ((t (:foreground ,color-8))))
+     `(newstickerphone-obsolete-item-face               ((t (:foreground ,color-7))))
+     `(newsticker-old-item-face                         ((t (:foreground ,color-5))))
+     `(newsticker-statistics-face                       ((t (:foreground ,color-8))))
+     `(newsticker-treeview-face                         ((t (:foreground ,color-8))))
+     `(newsticker-treeview-immortal-face                ((t (:foreground ,color-6))))
+     `(newsticker-treeview-listwindow-face              ((t (:foreground ,color-8))))
+     `(newsticker-treeview-new-face                     ((t (:foreground ,color-8 :weight bold))))
+     `(newsticker-treeview-obsolete-face                ((t (:foreground ,color-7))))
+     `(newsticker-treeview-old-face                     ((t (:foreground ,color-5))))
+     `(newsticker-treeview-selection-face               ((t (:background ,color-1 :foreground ,color-8))))
+     ;; Third-party
+;;;;; highlight-symbol
+     `(highlight-symbol-face                            ((t (:background ,color-1))))
+;;;;; ace-jump
+     `(ace-jump-face-background                         ((t (:foreground ,color-3 :background ,color-1 :inverse-video nil))))
+     `(ace-jump-face-foreground                         ((t (:foreground ,color-8 :background ,color-1 :inverse-video nil))))
+;;;;; anzu
+     `(anzu-mode-line                                   ((t (:foreground ,color-8 :weight bold))))
+;;;;; full-ack
+     `(ack-separator                                    ((t (:foreground ,color-8))))
+     `(ack-file                                         ((t (:foreground ,color-8))))
+     `(ack-line                                         ((t (:foreground ,color-8))))
+     `(ack-match                                        ((t (:foreground ,color-8 :background ,color-1 :weight bold))))
+;;;;; auctex
+     `(font-latex-bold-face                             ((t (:inherit bold))))
+     `(font-latex-warning-face                          ((t (:foreground nil :inherit font-lock-warning-face))))
+     `(font-latex-sectioning-5-face                     ((t (:foreground ,color-7 :weight bold ))))
+     `(font-latex-sedate-face                           ((t (:foreground ,color-8))))
+     `(font-latex-italic-face                           ((t (:foreground ,color-8 :slant italic))))
+     `(font-latex-string-face                           ((t (:inherit ,font-lock-string-face))))
+     `(font-latex-math-face                             ((t (:foreground ,color-8))))
+     `(font-latex-sectioning-0-face                     ((t ,,(eziam--heading-face-form 'latex-heading-style 1))))
+     `(font-latex-sectioning-1-face                     ((t ,,(eziam--heading-face-form 'latex-heading-style 2))))
+     `(font-latex-sectioning-2-face                     ((t ,,(eziam--heading-face-form 'latex-heading-style 3))))
+     `(font-latex-sectioning-3-face                     ((t ,,(eziam--heading-face-form 'latex-heading-style 4))))
+     `(font-latex-sectioning-4-face                     ((t ,,(eziam--heading-face-form 'latex-heading-style 5))))
+     `(font-latex-sectioning-5-face                     ((t ,,(eziam--heading-face-form 'latex-heading-style 6))))
+;;;;; auto-complete
+     `(ac-candidate-face                                ((t (:background ,color-5 :foreground ,color-1 :underline nil))))
+     `(ac-selection-face                                ((t (:background ,color-4 :foreground ,color-8 :underline nil))))
+     `(ac-yasnippet-candidate-face                      ((t (:background ,color-5 :foreground ,color-1))))
+     `(ac-yasnippet-selection-face                      ((t (:background ,color-4 :foreground ,color-8))))
+     `(ac-slime-menu-face                               ((t (:background ,color-5 :foreground ,color-1))))
+     `(ac-slime-selection-face                          ((t (:background ,color-4 :foreground ,color-8))))
+     `(ac-gtags-candidate-face                          ((t (:background ,color-5 :foreground ,color-1))))
+     `(ac-gtags-selection-face                          ((t (:background ,color-4 :foreground ,color-8))))
+     `(ac-emmet-candidate-face                          ((t (:background ,color-5 :foreground ,color-1))))
+     `(ac-emmet-selection-face                          ((t (:background ,color-4 :foreground ,color-8))))
+;;;;; auto-dim-other-buffers
+     `(auto-dim-other-buffers-face                      ((t (:background ,color-2))))
+;;;;; popup
+     `(popup-tip-face                                   ((t (:background ,color-8 :foreground ,color-1))))
+     `(popup-scroll-bar-foreground-face                 ((t (:background ,color-3))))
+     `(popup-scroll-bar-background-face                 ((t (:background ,color-1))))
+     `(popup-isearch-match                              ((t (:background ,color-1 :foreground ,color-8))))
+;;;;; android mode
+     `(android-mode-debug-face                          ((t (:foreground ,color-7))))
+     `(android-mode-error-face                          ((t (:foreground ,color-8 :weight bold))))
+     `(android-mode-info-face                           ((t (:foreground ,color-8))))
+     `(android-mode-verbose-face                        ((t (:foreground ,color-6))))
+     `(android-mode-warning-face                        ((t (:foreground ,color-8))))
+;;;;; bm
+     `(bm-face                                          ((t (:background ,color-8 :foreground ,color-2))))
+     `(bm-fringe-face                                   ((t (:background ,color-1 :foreground ,color-1))))
+     `(bm-fringe-persistent-face                        ((t (:background ,color-1 :foreground ,color-1))))
+     `(bm-persistent-face                               ((t (:background ,color-5 :foreground ,color-2))))
+;;;;; clojure-test-mode
+     `(clojure-test-failure-face                        ((t (:foreground ,color-8 :weight bold :underline t))))
+     `(clojure-test-error-face                          ((t (:foreground ,color-7 :weight bold :underline t))))
+     `(clojure-test-success-face                        ((t (:foreground ,color-7 :weight bold :underline t))))
+;;;;; coq
+     `(coq-solve-tactics-face                           ((t (:foreground nil :inherit font-lock-constant-face))))
+;;;;; ctable
+     `(ctbl:face-cell-select                            ((t (:background ,color-8 :foreground ,color-2))))
+     `(ctbl:face-continue-bar                           ((t (:background ,color-1 :foreground ,color-2))))
+     `(ctbl:face-row-select                             ((t (:background ,color-8 :foreground ,color-2))))
+;;;;; diff
+     `(diff-added                                       ((,class (:foreground ,color-8 :background nil)) (t (:foreground ,color-5 :background nil))))
+     `(diff-changed                                     ((t (:foreground ,color-8))))
+     `(diff-removed                                     ((,class (:foreground ,color-7 :background nil)) (t (:foreground ,color-5 :background nil))))
+     `(diff-refine-added                                ((t :inherit diff-added :weight bold)))
+     `(diff-refine-change                               ((t :inherit diff-changed :weight bold)))
+     `(diff-refine-removed                              ((t :inherit diff-removed :weight bold)))
+     `(diff-header                                      ((,class (:background ,color-4)) (t (:background ,color-8 :foreground ,color-2))))
+     `(diff-file-header                                 ((,class (:background ,color-4 :foreground ,color-8 :bold t)) (t (:background ,color-8 :foreground ,color-2 :bold t))))
+;;;;; dired
+     `(dired-directory                                  ((t (:foreground ,color-8 :bold t))))
+;;;;; dired+
+     `(diredp-display-msg                               ((t (:foreground ,color-8))))
+     `(diredp-compressed-file-suffix                    ((t (:foreground ,color-8))))
+     `(diredp-date-time                                 ((t (:foreground ,color-7))))
+     `(diredp-deletion                                  ((t (:foreground ,color-8))))
+     `(diredp-deletion-file-name                        ((t (:foreground ,color-7))))
+     `(diredp-dir-heading                               ((t (:foreground ,color-8 :background ,color-1 :bold t))))
+     `(diredp-dir-priv                                  ((t (:foreground ,color-8 :bold t))))
+     `(diredp-dir-name                                  ((t (:foreground ,color-8 :bold t))))
+     `(diredp-exec-priv                                 ((t (:foreground ,color-7))))
+     `(diredp-executable-tag                            ((t (:foreground ,color-7))))
+     `(diredp-file-name                                 ((t (:foreground ,color-8))))
+     `(diredp-file-suffix                               ((t (:foreground ,color-8 :bold t))))
+     `(diredp-flag-mark                                 ((t (:foreground ,color-8))))
+     `(diredp-flag-mark-line                            ((t (:foreground ,color-8))))
+     `(diredp-ignored-file-name                         ((t (:foreground ,color-3))))
+     `(diredp-link-priv                                 ((t (:foreground ,color-8))))
+     `(diredp-mode-line-flagged                         ((t (:foreground ,color-8))))
+     `(diredp-mode-line-marked                          ((t (:foreground ,color-8))))
+     `(diredp-no-priv                                   ((t (:foreground ,color-8))))
+     `(diredp-number                                    ((t (:foreground ,color-7))))
+     `(diredp-other-priv                                ((t (:foreground ,color-8))))
+     `(diredp-rare-priv                                 ((t (:foreground ,color-6))))
+     `(diredp-read-priv                                 ((t (:foreground ,color-5))))
+     `(diredp-symlink                                   ((t (:foreground ,color-8))))
+     `(diredp-write-priv                                ((t (:foreground ,color-7))))
+;;;;; ediff
+     `(ediff-current-diff-A                             ((t (:foreground ,color-8 :background ,color-4))))
+     `(ediff-current-diff-Ancestor                      ((t (:foreground ,color-8 :background ,color-4))))
+     `(ediff-current-diff-B                             ((t (:foreground ,color-8 :background ,color-5))))
+     `(ediff-current-diff-C                             ((t (:foreground ,color-8 :background ,color-3))))
+     `(ediff-even-diff-A                                ((t (:background ,color-3))))
+     `(ediff-even-diff-Ancestor                         ((t (:background ,color-3))))
+     `(ediff-even-diff-B                                ((t (:background ,color-3))))
+     `(ediff-even-diff-C                                ((t (:background ,color-3))))
+     `(ediff-fine-diff-A                                ((t (:foreground ,color-8 :background ,color-6 :weight bold))))
+     `(ediff-fine-diff-Ancestor                         ((t (:foreground ,color-8 :background ,color-6 :weight bold))))
+     `(ediff-fine-diff-B                                ((t (:foreground ,color-8 :background ,color-6 :weight bold))))
+     `(ediff-fine-diff-C                                ((t (:foreground ,color-8 :background ,color-5 :weight bold ))))
+     `(ediff-odd-diff-A                                 ((t (:background ,color-4))))
+     `(ediff-odd-diff-Ancestor                          ((t (:background ,color-4))))
+     `(ediff-odd-diff-B                                 ((t (:background ,color-4))))
+     `(ediff-odd-diff-C                                 ((t (:background ,color-4))))
+;;;;; ert
+     `(ert-test-result-expected                         ((t (:foreground ,color-8 :background ,color-1))))
+     `(ert-test-result-unexpected                       ((t (:foreground ,color-7 :background ,color-1))))
+;;;;; eshell
+     `(eshell-prompt                                    ((t (:foreground ,color-8 :weight bold))))
+     `(eshell-ls-archive                                ((t (:foreground ,color-6 :weight bold))))
+     `(eshell-ls-backup                                 ((t (:inherit font-lock-comment-face))))
+     `(eshell-ls-clutter                                ((t (:inherit font-lock-comment-face))))
+     `(eshell-ls-directory                              ((t (:foreground ,color-8 :weight bold))))
+     `(eshell-ls-executable                             ((t (:foreground ,color-8 :weight bold))))
+     `(eshell-ls-unreadable                             ((t (:foreground ,color-8))))
+     `(eshell-ls-missing                                ((t (:inherit font-lock-warning-face))))
+     `(eshell-ls-product                                ((t (:inherit font-lock-doc-face))))
+     `(eshell-ls-special                                ((t (:foreground ,color-8 :weight bold))))
+     `(eshell-ls-symlink                                ((t (:foreground ,color-8 :weight bold))))
+;;;;; flx
+     `(flx-highlight-face                               ((t (:foreground ,color-8 :weight bold))))
+;;;;; flycheck
+     `(flycheck-error                                   ((,class ,error-text)))
+     `(flycheck-warning                                 ((,class ,warning-text)))
+     `(flycheck-info                                    ((,class ,info-text)))
+     `(flycheck-info                                    ((t (:underline (:color ,info)))))
+     `(flycheck-fringe-error                            ((t (:foreground ,error))))
+     `(flycheck-error-list-error                        ((t (:foreground ,error))))
+     `(flycheck-fringe-warning                          ((t (:foreground ,warning))))
+     `(flycheck-error-list-warning                      ((t (:foreground ,warning))))
+     `(flycheck-fringe-info                             ((t (:foreground ,info))))
+     `(flycheck-error-list-info                         ((t (:foreground ,info))))
+;;;;; flymake
+     `(flymake-error                                    ((,class ,error-text)))
+     `(flymake-warning                                  ((,class ,warning-text)))
+     `(flymake-note                                     ((,class ,info-text)))
+;;;;; flyspell
+     `(flyspell-duplicate                               ((,class ,warning-text)))
+     `(flyspell-incorrect                               ((,class ,error-text)))
+;;;;; erc
+     `(erc-action-face                                  ((t (:inherit erc-default-face))))
+     `(erc-bold-face                                    ((t (:weight bold))))
+     `(erc-current-nick-face                            ((t (:inverse-video t :weight bold))))
+     `(erc-dangerous-host-face                          ((t (:inherit font-lock-warning-face))))
+     `(erc-default-face                                 ((t (:foreground ,color-8))))
+     `(erc-direct-msg-face                              ((t (:inherit erc-default))))
+     `(erc-error-face                                   ((t (:inherit font-lock-warning-face))))
+     `(erc-fool-face                                    ((t (:inherit erc-default))))
+     `(erc-highlight-face                               ((t (:inherit hover-highlight))))
+     `(erc-input-face                                   ((t (:foreground ,color-8))))
+     `(erc-keyword-face                                 ((t (:foreground ,color-8 :weight bold))))
+     `(erc-nick-default-face                            ((t (:foreground ,color-8 :weight bold))))
+     `(erc-my-nick-face                                 ((t (:foreground ,color-7 :weight bold))))
+     `(erc-nick-msg-face                                ((t (:inherit erc-default))))
+     `(erc-notice-face                                  ((t (:foreground ,color-6))))
+     `(erc-pal-face                                     ((t (:foreground ,color-8 :weight bold))))
+     `(erc-prompt-face                                  ((t (:foreground ,color-8 :background ,color-1 :weight bold))))
+     `(erc-timestamp-face                               ((t (:foreground ,color-8))))
+     `(erc-underline-face                               ((t (:underline t))))
+;;;;; git-gutter
+     `(git-gutter:added                                 ((t (:background ,color-1 :foreground ,color-1 :weight bold ))))
+     `(git-gutter:deleted                               ((t (:background ,color-1 :foreground ,color-1 :weight bold ))))
+     `(git-gutter:modified                              ((t (:background ,color-1 :foreground ,color-1 :weight bold ))))
+     `(git-gutter:unchanged                             ((t (:background ,color-1 :foreground ,color-1 :weight bold ))))
+;;;;; git-gutter-fr
+     `(git-gutter-fr:added                              ((t (:foreground ,color-1 :weight bold))))
+     `(git-gutter-fr:deleted                            ((t (:foreground ,color-1 :weight bold))))
+     `(git-gutter-fr:modified                           ((t (:foreground ,color-1 :weight bold))))
+;;;;; gnus
+     `(gnus-group-mail-1                                ((t (:bold t :inherit gnus-group-mail-1-empty))))
+     `(gnus-group-mail-1-empty                          ((t (:inherit gnus-group-news-1-empty))))
+     `(gnus-group-mail-2                                ((t (:bold t :inherit gnus-group-mail-2-empty))))
+     `(gnus-group-mail-2-empty                          ((t (:inherit gnus-group-news-2-empty))))
+     `(gnus-group-mail-3                                ((t (:bold t :inherit gnus-group-mail-3-empty))))
+     `(gnus-group-mail-3-empty                          ((t (:inherit gnus-group-news-3-empty))))
+     `(gnus-group-mail-4                                ((t (:bold t :inherit gnus-group-mail-4-empty))))
+     `(gnus-group-mail-4-empty                          ((t (:inherit gnus-group-news-4-empty))))
+     `(gnus-group-mail-5                                ((t (:bold t :inherit gnus-group-mail-5-empty))))
+     `(gnus-group-mail-5-empty                          ((t (:inherit gnus-group-news-5-empty))))
+     `(gnus-group-mail-6                                ((t (:bold t :inherit gnus-group-mail-6-empty))))
+     `(gnus-group-mail-6-empty                          ((t (:inherit gnus-group-news-6-empty))))
+     `(gnus-group-mail-low                              ((t (:bold t :inherit gnus-group-mail-low-empty))))
+     `(gnus-group-mail-low-empty                        ((t (:inherit gnus-group-news-low-empty))))
+     `(gnus-group-news-1                                ((t (:bold t :inherit gnus-group-news-1-empty))))
+     `(gnus-group-news-2                                ((t (:bold t :inherit gnus-group-news-2-empty))))
+     `(gnus-group-news-3                                ((t (:bold t :inherit gnus-group-news-3-empty))))
+     `(gnus-group-news-4                                ((t (:bold t :inherit gnus-group-news-4-empty))))
+     `(gnus-group-news-5                                ((t (:bold t :inherit gnus-group-news-5-empty))))
+     `(gnus-group-news-6                                ((t (:bold t :inherit gnus-group-news-6-empty))))
+     `(gnus-group-news-low                              ((t (:bold t :inherit gnus-group-news-low-empty))))
+     `(gnus-header-content                              ((t (:inherit message-header-other))))
+     `(gnus-header-from                                 ((t (:inherit message-header-from))))
+     `(gnus-header-name                                 ((t (:inherit message-header-name))))
+     `(gnus-header-newsgroups                           ((t (:inherit message-header-other))))
+     `(gnus-header-subject                              ((t (:inherit message-header-subject))))
+     `(gnus-summary-cancelled                           ((t (:foreground ,color-8))))
+     `(gnus-summary-high-ancient                        ((t (:foreground ,color-8))))
+     `(gnus-summary-high-read                           ((t (:foreground ,color-6 :weight bold))))
+     `(gnus-summary-high-ticked                         ((t (:foreground ,color-8 :weight bold))))
+     `(gnus-summary-high-unread                         ((t (:foreground ,color-8 :weight bold))))
+     `(gnus-summary-low-ancient                         ((t (:foreground ,color-8))))
+     `(gnus-summary-low-read                            ((t (:foreground ,color-6))))
+     `(gnus-summary-low-ticked                          ((t (:foreground ,color-8 :weight bold))))
+     `(gnus-summary-low-unread                          ((t (:foreground ,color-8))))
+     `(gnus-summary-normal-ancient                      ((t (:foreground ,color-8))))
+     `(gnus-summary-normal-read                         ((t (:foreground ,color-6))))
+     `(gnus-summary-normal-ticked                       ((t (:foreground ,color-8 :weight bold))))
+     `(gnus-summary-normal-unread                       ((t (:foreground ,color-8))))
+     `(gnus-summary-selected                            ((t (:foreground ,color-8 :weight bold))))
+     `(gnus-cite-1                                      ((t (:foreground ,color-8))))
+     `(gnus-cite-10                                     ((t (:foreground ,color-8))))
+     `(gnus-cite-11                                     ((t (:foreground ,color-8))))
+     `(gnus-cite-2                                      ((t (:foreground ,color-7))))
+     `(gnus-cite-3                                      ((t (:foreground ,color-6))))
+     `(gnus-cite-4                                      ((t (:foreground ,color-8))))
+     `(gnus-cite-5                                      ((t (:foreground ,color-7))))
+     `(gnus-cite-6                                      ((t (:foreground ,color-6))))
+     `(gnus-cite-7                                      ((t (:foreground ,color-7))))
+     `(gnus-cite-8                                      ((t (:foreground ,color-6))))
+     `(gnus-cite-9                                      ((t (:foreground ,color-6))))
+     `(gnus-group-news-1-empty                          ((t (:foreground ,color-8))))
+     `(gnus-group-news-2-empty                          ((t (:foreground ,color-8))))
+     `(gnus-group-news-3-empty                          ((t (:foreground ,color-7))))
+     `(gnus-group-news-4-empty                          ((t (:foreground ,color-6))))
+     `(gnus-group-news-5-empty                          ((t (:foreground ,color-5))))
+     `(gnus-group-news-6-empty                          ((t (:foreground ,color-4))))
+     `(gnus-group-news-low-empty                        ((t (:foreground ,color-4))))
+     `(gnus-signature                                   ((t (:foreground ,color-8))))
+     `(gnus-x                                           ((t (:background ,color-8 :foreground ,color-2))))
+;;;;; guide-key
+     `(guide-key/highlight-command-face                 ((t (:foreground ,color-8))))
+     `(guide-key/key-face                               ((t (:foreground ,color-6))))
+     `(guide-key/prefix-command-face                    ((t (:foreground ,color-7))))
+;;;;; helm
+     `(helm-header                                      ((t (:foreground ,color-6 :background ,color-1 :underline nil :box nil))))
+     `(helm-source-header                               ((t (:foreground ,color-8 :background ,color-1 :underline nil :weight bold :box (:line-width -1 :style released-button)))))
+     `(helm-selection                                   ((t (:background ,color-3 :underline nil))))
+     `(helm-selection-line                              ((t (:background ,color-3))))
+     `(helm-visible-mark                                ((t (:foreground ,color-2 :background ,color-8))))
+     `(helm-candidate-number                            ((t (:foreground ,color-8 :background ,color-1))))
+     `(helm-separator                                   ((t (:foreground ,color-7 :background ,color-1))))
+     `(helm-time-zone-current                           ((t (:foreground ,color-8 :background ,color-1))))
+     `(helm-time-zone-home                              ((t (:foreground ,color-7 :background ,color-1))))
+     `(helm-bookmark-addressbook                        ((t (:foreground ,color-8 :background ,color-1))))
+     `(helm-bookmark-directory                          ((t (:foreground nil :background nil :inherit helm-ff-directory))))
+     `(helm-bookmark-file                               ((t (:foreground nil :background nil :inherit helm-ff-file))))
+     `(helm-bookmark-gnus                               ((t (:foreground ,color-7 :background ,color-1))))
+     `(helm-bookmark-info                               ((t (:foreground ,color-8 :background ,color-1))))
+     `(helm-bookmark-man                                ((t (:foreground ,color-8 :background ,color-1))))
+     `(helm-bookmark-w3m                                ((t (:foreground ,color-7 :background ,color-1))))
+     `(helm-buffer-not-saved                            ((t (:foreground ,color-7 :background ,color-1))))
+     `(helm-buffer-process                              ((t (:foreground ,color-8 :background ,color-1))))
+     `(helm-buffer-saved-out                            ((t (:foreground ,color-8 :background ,color-1))))
+     `(helm-buffer-size                                 ((t (:foreground ,color-4 :background ,color-1))))
+     `(helm-buffer-directory                            ((t (:foreground ,color-7 :background ,color-1))))
+     `(helm-lisp-completion-info                        ((t (:foreground ,color-7 :background ,color-1))))
+     `(helm-lisp-show-completion                        ((t (:foreground ,color-8 :background ,color-3))))
+     `(helm-locate-finish                               ((t (:foreground ,color-5 :background ,color-1))))
+     `(helm-dotted-symlink-directory                    ((t (:foreground ,color-4 :background ,color-2))))
+     `(helm-ff-dotted-symlink-directory                 ((t (:foreground ,color-4 :background ,color-2))))
+     `(helm-ff-directory                                ((t (:foreground ,color-8 :background ,color-1 :weight bold))))
+     `(helm-ff-file                                     ((t (:foreground ,color-8 :background ,color-1 :weight normal))))
+     `(helm-ff-executable                               ((t (:foreground ,color-8 :background ,color-1 :weight normal))))
+     `(helm-ff-invalid-symlink                          ((t (:foreground ,color-7 :background ,color-1 :weight bold))))
+     `(helm-ff-symlink                                  ((t (:foreground ,color-8 :background ,color-1 :weight bold))))
+     `(helm-ff-prefix                                   ((t (:foreground ,color-2 :background ,color-8 :weight normal))))
+     `(helm-grep-cmd-line                               ((t (:foreground ,color-8 :background ,color-1))))
+     `(helm-grep-file                                   ((t (:foreground ,color-8 :background ,color-1))))
+     `(helm-grep-finish                                 ((t (:foreground ,color-8 :background ,color-1))))
+     `(helm-grep-lineno                                 ((t (:foreground ,color-4 :background ,color-1))))
+     `(helm-match                                       ((t (:foreground ,color-8 :background ,color-2))))
+     `(helm-grep-match                                  ((t ( :inherit helm-match))))
+     `(helm-grep-running                                ((t (:foreground ,color-7 :background ,color-1))))
+     `(helm-moccur-buffer                               ((t (:foreground ,color-8 :background ,color-1))))
+     `(helm-mu-contacts-address-face                    ((t (:foreground ,color-4 :background ,color-1))))
+     `(helm-mu-contacts-name-face                       ((t (:foreground ,color-8 :background ,color-1))))
+     `(helm-M-x-key                                     ((t (:foreground ,color-8 :background ,color-1 :weight bold))))
+;;;;; hl-line-mode FIXME Looks weird
+     `(hl-line                                          ((t (:background ,color-2))))
+     `(hl-line-face                                     ((t (:background ,color-2))))
+;;;;; hl-sexp
+     `(hl-sexp-face                                     ((,class (:background ,color-3)) (t :weight bold)))
+;;;;; ido-mode
+     `(ido-first-match                                  ((t (:foreground ,color-8 :weight bold))))
+     `(ido-only-match                                   ((t (:foreground ,color-8 :weight bold))))
+     `(ido-subdir                                       ((t (:foreground ,color-8))))
+     `(ido-indicator                                    ((t (:foreground ,color-8 :background ,color-4))))
+;;;;; iedit-mode
+     `(iedit-occurrence                                 ((t (:background ,color-4 :weight bold))))
+;;;;; js2-mode
+     `(js2-warning                                      ((t (:underline ,color-1))))
+     `(js2-error                                        ((t (:foreground ,color-7 :weight bold))))
+     `(js2-jsdoc-tag                                    ((t (:foreground ,color-5))))
+     `(js2-jsdoc-type                                   ((t (:foreground ,color-8))))
+     `(js2-jsdoc-value                                  ((t (:foreground ,color-8))))
+     `(js2-jsdoc-html-tag-name                          ((t (:foreground ,color-8))))
+     `(js2-jsdoc-html-tag-delimiter                     ((t (:foreground ,color-8))))
+     `(js2-function-param                               ((t (:foreground ,color-8))))
+     `(js2-function-call                                ((t (:foreground ,color-8 :underline t))))
+     `(js2-object-property                              ((t (:foreground ,color-8  :slant italic))))
+     `(js2-external-variable                            ((t (:foreground ,color-4))))
+;;;;; jabber-mode
+     `(jabber-roster-user-away                          ((t (:foreground ,color-8))))
+     `(jabber-roster-user-online                        ((t (:foreground ,color-7))))
+     `(jabber-roster-user-dnd                           ((t (:foreground ,color-8))))
+     `(jabber-rare-time-face                            ((t (:foreground ,color-7))))
+     `(jabber-chat-prompt-local                         ((t (:foreground ,color-7))))
+     `(jabber-chat-prompt-foreign                       ((t (:foreground ,color-8))))
+     `(jabber-activity-face                             ((t (:foreground ,color-8))))
+     `(jabber-activity-personal-face                    ((t (:foreground ,color-8))))
+     `(jabber-title-small                               ((t (:height ,(eziam--other-height 1.1) :weight bold))))
+     `(jabber-title-medium                              ((t (:height ,(eziam--other-height 1.2) :weight bold))))
+     `(jabber-title-medium                              ((t (:height ,(eziam--other-height 1.3) :weight bold))))
+;;;;; ledger-mode
+     `(ledger-font-payee-uncleared-face                 ((t (:foreground ,color-6 :weight bold))))
+     `(ledger-font-payee-cleared-face                   ((t (:foreground ,color-8 :weight normal))))
+     `(ledger-font-xact-highlight-face                  ((t (:background ,color-3))))
+     `(ledger-font-pending-face                         ((t (:foreground ,color-8 :weight normal))))
+     `(ledger-font-other-face                           ((t (:foreground ,color-8))))
+     `(ledger-font-posting-account-face                 ((t (:foreground ,color-7))))
+     `(ledger-font-posting-account-cleared-face         ((t (:foreground ,color-8))))
+     `(ledger-font-posting-account-pending-face         ((t (:foreground ,color-8))))
+     `(ledger-font-posting-amount-face                  ((t (:foreground ,color-8))))
+     `(ledger-font-posting-account-pending-face         ((t (:foreground ,color-8))))
+     `(ledger-occur-narrowed-face                       ((t (:foreground ,color-4 :invisible t))))
+     `(ledger-occur-xact-face                           ((t (:background ,color-3))))
+     `(ledger-font-comment-face                         ((t (:foreground ,color-6))))
+     `(ledger-font-reconciler-uncleared-face            ((t (:foreground ,color-6 :weight bold))))
+     `(ledger-font-reconciler-cleared-face              ((t (:foreground ,color-8 :weight normal))))
+     `(ledger-font-reconciler-pending-face              ((t (:foreground ,color-8 :weight normal))))
+     `(ledger-font-report-clickable-face                ((t (:foreground ,color-8 :weight normal))))
+;;;;; macrostep
+     `(macrostep-gensym-1                               ((t (:foreground ,color-8 :background ,color-1))))
+     `(macrostep-gensym-2                               ((t (:foreground ,color-8 :background ,color-1))))
+     `(macrostep-gensym-3                               ((t (:foreground ,color-8 :background ,color-1))))
+     `(macrostep-gensym-4                               ((t (:foreground ,color-7 :background ,color-1))))
+     `(macrostep-gensym-5                               ((t (:foreground ,color-8 :background ,color-1))))
+     `(macrostep-expansion-highlight-face               ((t (:inherit highlight))))
+     `(macrostep-macro-face                             ((t (:underline t))))
+;;;;; magit
+     `(magit-section-highlight                          ((t (:inherit highlight :extend t))))
+     `(magit-section-title                              ((t (:foreground ,color-8 :weight bold))))
+     `(magit-branch                                     ((t (:foreground ,color-8 :weight bold))))
+     `(magit-item-highlight                             ((t (:inverse-video t))))
+;;;;; egg
+     `(egg-text-base                                    ((t (:foreground ,color-8))))
+     `(egg-help-header-1                                ((t (:foreground ,color-8))))
+     `(egg-help-header-2                                ((t (:foreground ,color-8))))
+     `(egg-branch                                       ((t (:foreground ,color-8))))
+     `(egg-branch-mono                                  ((t (:foreground ,color-8))))
+     `(egg-term                                         ((t (:foreground ,color-8))))
+     `(egg-diff-add                                     ((t (:foreground ,color-8))))
+     `(egg-diff-del                                     ((t (:foreground ,color-8))))
+     `(egg-diff-file-header                             ((t (:foreground ,color-8))))
+     `(egg-section-title                                ((t (:foreground ,color-8))))
+     `(egg-stash-mono                                   ((t (:foreground ,color-8))))
+;;;;; message-mode
+     `(message-cited-text                               ((t (:inherit font-lock-comment-face))))
+     `(message-header-name                              ((t (:foreground ,color-7))))
+     `(message-header-other                             ((t (:foreground ,color-6))))
+     `(message-header-to                                ((t (:foreground ,color-8 :weight bold))))
+     `(message-header-from                              ((t (:foreground ,color-8 :weight bold))))
+     `(message-header-cc                                ((t (:foreground ,color-8 :weight bold))))
+     `(message-header-newsgroups                        ((t (:foreground ,color-8 :weight bold))))
+     `(message-header-subject                           ((t (:foreground ,color-8 :weight bold))))
+     `(message-header-xheader                           ((t (:foreground ,color-6))))
+     `(message-mml                                      ((t (:foreground ,color-8 :weight bold))))
+     `(message-separator                                ((t (:inherit font-lock-comment-face))))
+;;;;; mew
+     `(mew-face-header-subject                          ((t (:foreground ,color-8))))
+     `(mew-face-header-from                             ((t (:foreground ,color-8))))
+     `(mew-face-header-date                             ((t (:foreground ,color-6))))
+     `(mew-face-header-to                               ((t (:foreground ,color-7))))
+     `(mew-face-header-key                              ((t (:foreground ,color-6))))
+     `(mew-face-header-private                          ((t (:foreground ,color-6))))
+     `(mew-face-header-important                        ((t (:foreground ,color-8))))
+     `(mew-face-header-marginal                         ((t (:foreground ,color-8 :weight bold))))
+     `(mew-face-header-warning                          ((t (:foreground ,color-7))))
+     `(mew-face-header-xmew                             ((t (:foreground ,color-6))))
+     `(mew-face-header-xmew-bad                         ((t (:foreground ,color-7))))
+     `(mew-face-body-url                                ((t (:foreground ,color-8))))
+     `(mew-face-body-comment                            ((t (:foreground ,color-8 :slant italic))))
+     `(mew-face-body-cite1                              ((t (:foreground ,color-6))))
+     `(mew-face-body-cite2                              ((t (:foreground ,color-8))))
+     `(mew-face-body-cite3                              ((t (:foreground ,color-8))))
+     `(mew-face-body-cite4                              ((t (:foreground ,color-8))))
+     `(mew-face-body-cite5                              ((t (:foreground ,color-7))))
+     `(mew-face-mark-review                             ((t (:foreground ,color-8))))
+     `(mew-face-mark-escape                             ((t (:foreground ,color-6))))
+     `(mew-face-mark-delete                             ((t (:foreground ,color-7))))
+     `(mew-face-mark-unlink                             ((t (:foreground ,color-8))))
+     `(mew-face-mark-refile                             ((t (:foreground ,color-6))))
+     `(mew-face-mark-unread                             ((t (:foreground ,color-6))))
+     `(mew-face-eof-message                             ((t (:foreground ,color-6))))
+     `(mew-face-eof-part                                ((t (:foreground ,color-8))))
+;;;;; mic-paren
+     `(paren-face-match                                 ((t (:foreground ,color-8 :background ,color-1))))
+     `(paren-face-mismatch                              ((t (:foreground ,color-1 :background ,color-1))))
+     `(paren-face-no-match                              ((t (:foreground ,color-3 :background ,color-1))))
+;;;;; mingus
+     `(mingus-directory-face                            ((t (:foreground ,color-8))))
+     `(mingus-pausing-face                              ((t (:foreground ,color-7))))
+     `(mingus-playing-face                              ((t (:foreground ,color-8))))
+     `(mingus-playlist-face                             ((t (:foreground ,color-8 ))))
+     `(mingus-song-file-face                            ((t (:foreground ,color-8))))
+     `(mingus-stopped-face                              ((t (:foreground ,color-7))))
+;;;;; nav
+     `(nav-face-heading                                 ((t (:foreground ,color-8))))
+     `(nav-face-button-num                              ((t (:foreground ,color-8))))
+     `(nav-face-dir                                     ((t (:foreground ,color-6))))
+     `(nav-face-hdir                                    ((t (:foreground ,color-7))))
+     `(nav-face-file                                    ((t (:foreground ,color-8))))
+     `(nav-face-hfile                                   ((t (:foreground ,color-4))))
+;;;;; mu4e
+     `(mu4e-title-face                                  ((t (:foreground ,color-8 :weight bold))))
+     `(mu4e-header-highlight-face                       ((t (:inherit highlight :extend t))))
+     `(mu4e-cited-1-face                                ((t (:foreground ,color-8 :slant italic))))
+     `(mu4e-cited-2-face                                ((t (:foreground ,color-8 :slant italic))))
+     `(mu4e-cited-3-face                                ((t (:foreground ,color-6 :slant italic))))
+     `(mu4e-cited-4-face                                ((t (:foreground ,color-6 :slant italic))))
+     `(mu4e-cited-5-face                                ((t (:foreground ,color-4 :slant italic))))
+     `(mu4e-cited-6-face                                ((t (:foreground ,color-5 :slant italic))))
+     `(mu4e-cited-7-face                                ((t (:foreground ,color-8 :slant italic))))
+     `(mu4e-unread-face                                 ((t (:background ,color-0 :weight bold :extend t))))
+     `(mu4e-replied-face                                ((t (:foreground ,color-6 :slant italic))))
+     `(mu4e-trashed-face                                ((t (:foreground ,color-5 :strike-through t))))
+     `(mu4e-flagged-face                                ((t (:foreground ,info))))
+     `(mu4e-ok-face                                     ((t (:foreground ,ok :weight bold))))
+     `(mu4e-warning-face                                ((t (:foreground ,warning :weight bold))))
+;;;;; mumamo
+     `(mumamo-background-chunk-major                    ((t (:background nil))))
+     `(mumamo-background-chunk-submode1                 ((t (:background ,color-1))))
+     `(mumamo-background-chunk-submode2                 ((t (:background ,color-4))))
+     `(mumamo-background-chunk-submode3                 ((t (:background ,color-5))))
+     `(mumamo-background-chunk-submode4                 ((t (:background ,color-3))))
+;;;;; org-mode
+     `(org-agenda-date-today                            ((t (:foreground ,color-8 :slant italic :weight bold))) t)
+     `(org-agenda-structure                             ((t (:inherit font-lock-comment-face))))
+     `(org-archived                                     ((t (:foreground ,color-8 :weight bold))))
+     `(org-checkbox                                     ((t (:background ,color-4 :foreground ,color-8 :box (:line-width 1 :style released-button)))))
+     `(org-code                                         ((t (:background ,color-2 :box ,color-3))))
+     `(org-verbatim                                     ((t (:background ,color-2 :box ,color-3))))
+     `(org-date                                         ((t (:foreground ,color-8 :underline t))))
+     `(org-deadline-announce                            ((t (:foreground ,color-6))))
+     `(org-formula                                      ((t (:foreground ,color-5))))
+     `(org-headline-done                                ((t (:foreground ,color-8))))
+     `(org-hide                                         ((t (:foreground ,color-1))))
+     `(org-document-title                               ((t (:foreground ,color-8 :height ,(eziam--other-height 1.9) :bold t))))
+     `(org-document-info                                ((t (:inherit default))))
+     `(org-document-info-keyword                        ((t (:foreground ,color-6 :weight bold :underline t))))
+     `(org-level-1                                      ((t ,,(eziam--heading-face-form 'org-heading-style 1))))
+     `(org-level-2                                      ((t ,,(eziam--heading-face-form 'org-heading-style 2))))
+     `(org-level-3                                      ((t ,,(eziam--heading-face-form 'org-heading-style 3))))
+     `(org-level-4                                      ((t ,,(eziam--heading-face-form 'org-heading-style 4))))
+     `(org-level-5                                      ((t ,,(eziam--heading-face-form 'org-heading-style 5))))
+     `(org-level-6                                      ((t ,,(eziam--heading-face-form 'org-heading-style 6))))
+     `(org-level-7                                      ((t ,,(eziam--heading-face-form 'org-heading-style 7))))
+     `(org-level-8                                      ((t ,,(eziam--heading-face-form 'org-heading-style 8))))
+     `(org-link                                         ((t (:foreground ,color-8 :underline t))))
+     `(org-list-dt                                      ((t (:weight bold))))
+     `(org-property-value                               ((t (:foreground ,color-5 :slant italic))))
+     `(org-priority                                     ((t (:background ,color-2))))
+     `(org-scheduled                                    ((t (:foreground ,color-8))))
+     `(org-scheduled-previously                         ((t (:foreground ,color-7))))
+     `(org-scheduled-today                              ((t (:foreground ,color-8 :inherit highlight))))
+     `(org-sexp-date                                    ((t (:foreground ,color-8 :underline t))))
+     `(org-special-keyword                              ((t (:foreground ,color-5))))
+     `(org-table                                        ((t (:foreground ,color-8))))
+     `(org-tag                                          ((t (:foreground ,color-4 :distant-foreground ,color-0))))
+     `(org-target                                       ((t (:foreground ,color-4))))
+     `(org-time-grid                                    ((t (:foreground ,color-8))))
+     `(org-done                                         ((t (:bold t :background ,color-4 :foreground ,color-8 :weight bold))))
+     `(org-todo                                         ((t (:bold t :inverse-video t))))
+     `(org-upcoming-deadline                            ((t (:slant italic))))
+     `(org-warning                                      ((t (:foreground ,color-7 :underline t))))
+     `(org-column                                       ((t (:background ,color-1))))
+     `(org-column-title                                 ((t (:background ,color-1 :underline t :weight bold))))
+     `(org-mode-line-clock                              ((t (:foreground ,color-8 :background ,color-1))))
+     `(org-mode-line-clock-overrun                      ((t (:foreground ,color-2 :background ,color-6))))
+     `(org-ellipsis                                     ((t (:foreground ,color-1 :distant-foreground ,color-7 :underline nil :box nil))))
+     `(org-footnote                                     ((t (:foreground ,color-8 :underline t))))
+     `(org-meta-line                                    ((t (:foreground ,color-5))))
+     ;; I believe the difference between org-block-background and
+     ;; org-block is that org 8.x uses the former, 9.x the latter.  Both
+     ;; should then be identical.
+     `(org-block-background                             ((t (:background ,color-0))))
+     `(org-block                                        ((t (:background ,color-0 :extend t))))
+     `(org-block-begin-line                             ((t (:foreground ,color-6 :background ,color-3 :extend t))))
+     `(org-block-end-line                               ((t (:foreground ,color-6 :background ,color-3 :extend t))))
+;;;;; outline
+     `(outline-1                                        ((t ,,(eziam--heading-face-form 'outline-heading-style 1))))
+     `(outline-2                                        ((t ,,(eziam--heading-face-form 'outline-heading-style 2))))
+     `(outline-3                                        ((t ,,(eziam--heading-face-form 'outline-heading-style 3))))
+     `(outline-4                                        ((t ,,(eziam--heading-face-form 'outline-heading-style 4))))
+     `(outline-5                                        ((t ,,(eziam--heading-face-form 'outline-heading-style 5))))
+     `(outline-6                                        ((t ,,(eziam--heading-face-form 'outline-heading-style 6))))
+     `(outline-7                                        ((t ,,(eziam--heading-face-form 'outline-heading-style 7))))
+     `(outline-8                                        ((t ,,(eziam--heading-face-form 'outline-heading-style 8))))
+;;;;; outshine
+     `(outshine-1                                       ((t ,,(eziam--heading-face-form 'outshine-heading-style 1))))
+     `(outshine-2                                       ((t ,,(eziam--heading-face-form 'outshine-heading-style 2))))
+     `(outshine-3                                       ((t ,,(eziam--heading-face-form 'outshine-heading-style 3))))
+     `(outshine-4                                       ((t ,,(eziam--heading-face-form 'outshine-heading-style 4))))
+     `(outshine-5                                       ((t ,,(eziam--heading-face-form 'outshine-heading-style 5))))
+     `(outshine-6                                       ((t ,,(eziam--heading-face-form 'outshine-heading-style 6))))
+     `(outshine-7                                       ((t ,,(eziam--heading-face-form 'outshine-heading-style 7))))
+     `(outshine-8                                       ((t ,,(eziam--heading-face-form 'outshine-heading-style 8))))
+;;;;; p4
+     `(p4-depot-added-face                              ((t :inherit diff-added)))
+     `(p4-depot-branch-op-face                          ((t :inherit diff-changed)))
+     `(p4-depot-deleted-face                            ((t :inherit diff-removed)))
+     `(p4-depot-unmapped-face                           ((t :inherit diff-changed)))
+     `(p4-diff-change-face                              ((t :inherit diff-changed)))
+     `(p4-diff-del-face                                 ((t :inherit diff-removed)))
+     `(p4-diff-file-face                                ((t :inherit diff-file-header)))
+     `(p4-diff-head-face                                ((t :inherit diff-header)))
+     `(p4-diff-ins-face                                 ((t :inherit diff-added)))
+;;;;; perspective
+     `(persp-selected-face                              ((t (:foreground ,color-8 :inherit mode-line))))
+;;;;; powerline
+     `(powerline-active1                                ((t (:background ,color-3 :foreground ,color-8 :box nil :inherit mode-line ))))
+     `(powerline-active2                                ((t (:background ,color-1 :foreground ,color-5 :box nil :inherit mode-line ))))
+     `(powerline-inactive1                              ((t (:background ,color-1 :foreground ,color-3 :inherit mode-line-inactive))))
+     `(powerline-inactive2                              ((t (:background ,color-1 :foreground ,color-4 :inherit mode-line-inactive))))
+;;;;; proofgeneral
+     `(proof-active-area-face                           ((t (:underline t))))
+     `(proof-boring-face                                ((t (:foreground ,color-8 :background ,color-4))))
+     `(proof-command-mouse-highlight-face               ((t (:inherit proof-mouse-highlight-face))))
+     `(proof-debug-message-face                         ((t (:inherit proof-boring-face))))
+     `(proof-declaration-name-face                      ((t (:inherit font-lock-keyword-face :foreground nil))))
+     `(proof-eager-annotation-face                      ((t (:foreground ,color-2 :background ,color-8))))
+     `(proof-error-face                                 ((t (:foreground ,color-8 :background ,color-4))))
+     `(proof-highlight-dependency-face                  ((t (:foreground ,color-2 :background ,color-8))))
+     `(proof-highlight-dependent-face                   ((t (:foreground ,color-2 :background ,color-8))))
+     `(proof-locked-face                                ((t (:background ,color-3))))
+     `(proof-mouse-highlight-face                       ((t (:foreground ,color-2 :background ,color-8))))
+     `(proof-queue-face                                 ((t (:background ,color-4))))
+     `(proof-region-mouse-highlight-face                ((t (:inherit proof-mouse-highlight-face))))
+     `(proof-script-highlight-error-face                ((t (:background ,color-6))))
+     `(proof-tacticals-name-face                        ((t (:inherit font-lock-constant-face :foreground nil :background ,color-1))))
+     `(proof-tactics-name-face                          ((t (:inherit font-lock-constant-face :foreground nil :background ,color-1))))
+     `(proof-warning-face                               ((t (:foreground ,color-2 :background ,color-8))))
+;;;;; rainbow-delimiters
+     `(rainbow-delimiters-depth-1-face                  ((t (:foreground ,rainbow-1 :bold t))))
+     `(rainbow-delimiters-depth-2-face                  ((t (:foreground ,rainbow-4 :bold t))))
+     `(rainbow-delimiters-depth-3-face                  ((t (:foreground ,rainbow-2 :bold t))))
+     `(rainbow-delimiters-depth-4-face                  ((t (:foreground ,rainbow-5 :bold t))))
+     `(rainbow-delimiters-depth-5-face                  ((t (:foreground ,rainbow-3 :bold t))))
+     `(rainbow-delimiters-depth-6-face                  ((t (:foreground ,rainbow-6 :bold t))))
+     `(rainbow-delimiters-depth-7-face                  ((t (:foreground ,rainbow-1 :bold t))))
+     `(rainbow-delimiters-depth-8-face                  ((t (:foreground ,rainbow-4 :bold t))))
+     `(rainbow-delimiters-depth-9-face                  ((t (:foreground ,rainbow-2 :bold t))))
+     `(rainbow-delimiters-depth-10-face                 ((t (:foreground ,rainbow-5 :bold t))))
+     `(rainbow-delimiters-depth-11-face                 ((t (:foreground ,rainbow-3 :bold t))))
+     `(rainbow-delimiters-depth-12-face                 ((t (:foreground ,rainbow-6 :bold t))))
+;;;;; rcirc
+     `(rcirc-my-nick                                    ((t (:foreground ,color-8))))
+     `(rcirc-other-nick                                 ((t (:foreground ,color-8))))
+     `(rcirc-bright-nick                                ((t (:foreground ,color-8))))
+     `(rcirc-dim-nick                                   ((t (:foreground ,color-6))))
+     `(rcirc-server                                     ((t (:foreground ,color-6))))
+     `(rcirc-server-prefix                              ((t (:foreground ,color-7))))
+     `(rcirc-timestamp                                  ((t (:foreground ,color-8))))
+     `(rcirc-nick-in-message                            ((t (:foreground ,color-8))))
+     `(rcirc-nick-in-message-full-line                  ((t (:bold t))))
+     `(rcirc-prompt                                     ((t (:foreground ,color-8 :bold t))))
+     `(rcirc-track-nick                                 ((t (:inverse-video t))))
+     `(rcirc-track-keyword                              ((t (:bold t))))
+     `(rcirc-url                                        ((t (:bold t))))
+     `(rcirc-keyword                                    ((t (:foreground ,color-8 :bold t))))
+;;;;; rpm-mode
+     `(rpm-spec-dir-face                                ((t (:foreground ,color-6))))
+     `(rpm-spec-doc-face                                ((t (:foreground ,color-6))))
+     `(rpm-spec-ghost-face                              ((t (:foreground ,color-7))))
+     `(rpm-spec-macro-face                              ((t (:foreground ,color-8))))
+     `(rpm-spec-obsolete-tag-face                       ((t (:foreground ,color-7))))
+     `(rpm-spec-package-face                            ((t (:foreground ,color-7))))
+     `(rpm-spec-section-face                            ((t (:foreground ,color-8))))
+     `(rpm-spec-tag-face                                ((t (:foreground ,color-8))))
+     `(rpm-spec-var-face                                ((t (:foreground ,color-7))))
+;;;;; rst-mode
+     `(rst-level-1-face                                 ((t (:foreground ,color-8))))
+     `(rst-level-2-face                                 ((t (:foreground ,color-7))))
+     `(rst-level-3-face                                 ((t (:foreground ,color-7))))
+     `(rst-level-4-face                                 ((t (:foreground ,color-8))))
+     `(rst-level-5-face                                 ((t (:foreground ,color-8))))
+     `(rst-level-6-face                                 ((t (:foreground ,color-5))))
+;;;;; sh-mode
+     `(sh-heredoc                                       ((t (:foreground ,color-8 :bold t))))
+     `(sh-quoted-exec                                   ((t (:foreground ,color-7))))
+     `(show-paren-mismatch                              ((t (:foreground ,color-1 :background ,color-4 :weight bold))))
+;;;;; smartparens
+     `(sp-show-pair-mismatch-face                       ((t (:foreground ,error :background ,color-1))))
+     `(sp-show-pair-match-face                          ((t (:foreground ,info :background ,color-0))))
+;;;;; show-paren
+     `(show-paren-match                                 ((t (:inherit sp-show-pair-match-face))))
+     `(show-paren-mismatch                              ((t (:inherit sp-show-pair-mismatch-face))))
+;;;;; sml-mode-line
+     `(sml-modeline-end-face                            ((t :inherit default :width condensed)))
+;;;;; SLIME
+     `(slime-repl-output-face                           ((t (:foreground ,color-7))))
+     `(slime-repl-inputed-output-face                   ((t (:foreground ,color-6))))
+     `(slime-error-face                                 ((((supports :underline (:style wave))) (:underline (:style wave :color ,color-7))) (t (:underline ,color-7))))
+     `(slime-warning-face                               ((((supports :underline (:style wave))) (:underline (:style wave :color ,color-8))) (t (:underline ,color-8))))
+     `(slime-style-warning-face                         ((((supports :underline (:style wave))) (:underline (:style wave :color ,color-8))) (t (:underline ,color-8))))
+     `(slime-note-face                                  ((((supports :underline (:style wave))) (:underline (:style wave :color ,color-6))) (t (:underline ,color-6))))
+     `(slime-highlight-face                             ((t (:inherit highlight))))
+;;;;; speedbar
+     `(speedbar-button-face                             ((t (:foreground ,color-8))))
+     `(speedbar-directory-face                          ((t (:foreground ,color-8))))
+     `(speedbar-file-face                               ((t (:foreground ,color-8))))
+     `(speedbar-highlight-face                          ((t (:foreground ,color-2 :background ,color-8))))
+     `(speedbar-selected-face                           ((t (:foreground ,color-7))))
+     `(speedbar-separator-face                          ((t (:foreground ,color-2 :background ,color-7))))
+     `(speedbar-tag-face                                ((t (:foreground ,color-8))))
+;;;;; tabbar
+     `(tabbar-button                                    ((t (:foreground ,color-8 :background ,color-1))))
+     `(tabbar-selected                                  ((t (:foreground ,color-8 :background ,color-1 :box (:line-width -1 :style pressed-button)))))
+     `(tabbar-unselected                                ((t (:foreground ,color-8 :background ,color-3 :box (:line-width -1 :style released-button)))))
+;;;;; term
+     `(term-color-black                                 ((t (:foreground ,color-2 :background ,color-1))))
+     `(term-color-red                                   ((t (:foreground ,color-6 :background ,color-4))))
+     `(term-color-green                                 ((t (:foreground ,color-6 :background ,color-8))))
+     `(term-color-yellow                                ((t (:foreground ,color-8 :background ,color-8))))
+     `(term-color-blue                                  ((t (:foreground ,color-7 :background ,color-4))))
+     `(term-color-magenta                               ((t (:foreground ,color-7 :background ,color-7))))
+     `(term-color-cyan                                  ((t (:foreground ,color-8 :background ,color-8))))
+     `(term-color-white                                 ((t (:foreground ,color-8 :background ,color-4))))
+     '(term-default-fg-color                            ((t (:inherit term-color-white))))
+     '(term-default-bg-color                            ((t (:inherit term-color-black))))
+;;;;; undo-tree
+     `(undo-tree-visualizer-active-branch-face          ((t (:foreground ,color-8 :weight bold))))
+     `(undo-tree-visualizer-current-face                ((t (:foreground ,color-6 :weight bold))))
+     `(undo-tree-visualizer-default-face                ((t (:foreground ,color-8))))
+     `(undo-tree-visualizer-register-face               ((t (:foreground ,color-8))))
+     `(undo-tree-visualizer-unmodified-face             ((t (:foreground ,color-8))))
+;;;;; volatile-highlights
+     `(vhl/default-face                                 ((t (:background ,color-1))))
+;;;;; emacs-w3m
+     `(w3m-anchor                                       ((t (:foreground ,color-8 :background ,color-1 :underline t :weight normal))))
+     `(w3m-current-anchor                               ((t (:foreground ,color-8 :background ,color-1 :underline nil :weight bold))))
+     `(w3m-arrived-anchor-face                          ((t (:foreground ,color-4 :background ,color-2 :underline t :weight normal))))
+     `(w3m-image-anchor-face                            ((t (:foreground ,color-7  :background ,color-2 :underline t :weight normal))))
+     `(w3m-image-face                                   ((t (:foreground ,color-8 :background ,color-2 :underline t :weight normal))))
+     `(w3m-image-anchor                                 ((t (:foreground ,color-8 :background ,color-2 :underline t :weight normal))))
+     `(w3m-form                                         ((t (:foreground ,color-6 :underline t))))
+     `(w3m-header-line-location-title                   ((t (:foreground ,color-4 :background ,color-2 :underline nil :weight normal))))
+     `(w3m-header-line-location-content                 ((t (:foreground ,color-8 :background ,color-2 :underline nil :weight normal))))
+     `(w3m-history-current-url                          ((t (:inherit match))))
+     `(w3m-tab-background                               ((t (:foreground ,color-1 :background ,color-6 :underline nil :weight normal))) )
+     `(w3m-tab-unselected-retrieving                    ((t (:foreground ,color-1 :background ,color-6 :underline nil :weight normal))) )
+     `(w3m-tab-selected-background-face                 ((t (:foreground ,color-1 :background ,color-8 :underline nil :weight bold))) )
+     `(w3m-tab-selected-retrieving                      ((t (:foreground ,color-1 :background ,color-8 :underline nil :weight bold))) )
+     `(w3m-lnum                                         ((t (:foreground ,color-8 :background ,color-1))))
+     `(w3m-lnum-match                                   ((t (:background ,color-1 :foreground ,color-8 :weight bold))))
+     `(w3m-lnum-minibuffer-prompt                       ((t (:foreground ,color-8))))
+;;;;; web-mode
+     `(web-mode-builtin-face                            ((t (:inherit ,font-lock-builtin-face))))
+     `(web-mode-comment-face                            ((t (:inherit ,font-lock-comment-face))))
+     `(web-mode-constant-face                           ((t (:inherit ,font-lock-constant-face))))
+     `(web-mode-css-at-rule-face                        ((t (:foreground ,color-8 ))))
+     `(web-mode-css-prop-face                           ((t (:foreground ,color-8))))
+     `(web-mode-css-pseudo-class-face                   ((t (:foreground ,color-8 :weight bold))))
+     `(web-mode-css-rule-face                           ((t (:foreground ,color-8))))
+     `(web-mode-doctype-face                            ((t (:inherit ,font-lock-comment-face))))
+     `(web-mode-folded-face                             ((t (:underline t))))
+     `(web-mode-function-name-face                      ((t (:foreground ,color-8))))
+     `(web-mode-html-attr-name-face                     ((t (:foreground ,color-8))))
+     `(web-mode-html-attr-value-face                    ((t (:inherit ,font-lock-string-face))))
+     `(web-mode-html-tag-face                           ((t (:foreground ,color-8))))
+     `(web-mode-keyword-face                            ((t (:inherit ,font-lock-keyword-face))))
+     `(web-mode-preprocessor-face                       ((t (:inherit ,font-lock-preprocessor-face))))
+     `(web-mode-string-face                             ((t (:inherit ,font-lock-string-face))))
+     `(web-mode-type-face                               ((t (:inherit ,font-lock-type-face))))
+     `(web-mode-variable-name-face                      ((t (:inherit ,font-lock-variable-name-face))))
+     `(web-mode-server-background-face                  ((t (:background ,color-1))))
+     `(web-mode-server-comment-face                     ((t (:inherit web-mode-comment-face))))
+     `(web-mode-server-string-face                      ((t (:inherit web-mode-string-face))))
+     `(web-mode-symbol-face                             ((t (:inherit font-lock-constant-face))))
+     `(web-mode-warning-face                            ((t (:inherit font-lock-warning-face))))
+     `(web-mode-whitespaces-face                        ((t (:background ,color-7))))
+;;;;; whitespace-mode
+     `(whitespace-space                                 ((t (:background ,color-3 :foreground ,color-3))))
+     `(whitespace-hspace                                ((t (:background ,color-3 :foreground ,color-3))))
+     `(whitespace-tab                                   ((t (:background ,color-6))))
+     `(whitespace-newline                               ((t (:foreground ,color-3))))
+     `(whitespace-trailing                              ((t (:background ,color-7))))
+     `(whitespace-line                                  ((t (:background ,color-1 :foreground ,color-7))))
+     `(whitespace-space-before-tab                      ((t (:background ,color-8 :foreground ,color-8))))
+     `(whitespace-indentation                           ((t (:background ,color-8 :foreground ,color-7))))
+     `(whitespace-empty                                 ((t (:background ,color-8))))
+     `(whitespace-space-after-tab                       ((t (:background ,color-8 :foreground ,color-7))))
+;;;;; wanderlust
+     `(wl-highlight-folder-few-face                     ((t (:foreground ,color-6))))
+     `(wl-highlight-folder-many-face                    ((t (:foreground ,color-6))))
+     `(wl-highlight-folder-path-face                    ((t (:foreground ,color-8))))
+     `(wl-highlight-folder-unread-face                  ((t (:foreground ,color-8))))
+     `(wl-highlight-folder-zero-face                    ((t (:foreground ,color-8))))
+     `(wl-highlight-folder-unknown-face                 ((t (:foreground ,color-8))))
+     `(wl-highlight-message-citation-header             ((t (:foreground ,color-6))))
+     `(wl-highlight-message-cited-text-1                ((t (:foreground ,color-7))))
+     `(wl-highlight-message-cited-text-2                ((t (:foreground ,color-8))))
+     `(wl-highlight-message-cited-text-3                ((t (:foreground ,color-8))))
+     `(wl-highlight-message-cited-text-4                ((t (:foreground ,color-8))))
+     `(wl-highlight-message-header-contents-face        ((t (:foreground ,color-6))))
+     `(wl-highlight-message-headers-face                ((t (:foreground ,color-8))))
+     `(wl-highlight-message-important-header-contents   ((t (:foreground ,color-8))))
+     `(wl-highlight-message-header-contents             ((t (:foreground ,color-7))))
+     `(wl-highlight-message-important-header-contents2  ((t (:foreground ,color-8))))
+     `(wl-highlight-message-signature                   ((t (:foreground ,color-6))))
+     `(wl-highlight-message-unimportant-header-contents ((t (:foreground ,color-8))))
+     `(wl-highlight-summary-answered-face               ((t (:foreground ,color-8))))
+     `(wl-highlight-summary-disposed-face               ((t (:foreground ,color-8 :slant italic))))
+     `(wl-highlight-summary-new-face                    ((t (:foreground ,color-8))))
+     `(wl-highlight-summary-normal-face                 ((t (:foreground ,color-8))))
+     `(wl-highlight-summary-thread-top-face             ((t (:foreground ,color-8))))
+     `(wl-highlight-thread-indent-face                  ((t (:foreground ,color-7))))
+     `(wl-highlight-summary-refiled-face                ((t (:foreground ,color-8))))
+     `(wl-highlight-summary-displaying-face             ((t (:underline t :weight bold))))
+;;;;; which-func-mode
+     `(which-func                                       ((t (:foreground ,color-8))))
+;;;;; yascroll
+     `(yascroll:thumb-text-area                         ((t (:background ,color-1))))
+     `(yascroll:thumb-fringe                            ((t (:background ,color-1 :foreground ,color-1))))
+     `(minimap-active-region-background                 ((t (:background ,color-3 :foreground ,color-4))))
+;;;;; html fold/unfold face
+     `(html-fold-unfolded-face                          ((t (:background ,color-1))))
+     `(html-fold-folded-face                            ((t (:foreground ,color-8 :bold t))))
+;;;;; Markdown mode
+     `(markdown-header-delimiter-face                   ((t (:weight normal :foreground ,color-3))))
+     ;; ;; outline
+     `(markdown-header-face-1                           ((t ,,(eziam--heading-face-form 'markdown-heading-style 1))))
+     `(markdown-header-face-2                           ((t ,,(eziam--heading-face-form 'markdown-heading-style 2))))
+     `(markdown-header-face-3                           ((t ,,(eziam--heading-face-form 'markdown-heading-style 3))))
+     `(markdown-header-face-4                           ((t ,,(eziam--heading-face-form 'markdown-heading-style 4))))
+     `(markdown-header-face-5                           ((t ,,(eziam--heading-face-form 'markdown-heading-style 5))))
+     `(markdown-header-face-6                           ((t ,,(eziam--heading-face-form 'markdown-heading-style 6))))
+     `(markdown-link-face                               ((t (:underline t :foreground ,color-8))))
+     `(markdown-url-face                                ((t (:underline t :foreground ,color-8))))
+     `(markdown-pre-face                                ((t (:foreground ,color-8))))
+     `(markdown-bold-face                               ((t (:foreground ,color-5 :bold t ))))
+     `(markdown-italic-face                             ((t (:foreground ,color-5 :italic t ))))
+     `(markdown-list-face                               ((t (:foreground ,color-8))))
+     `(markdown-markup-face                             ((t (:foreground ,color-3 ))))
+;;;;; swoop
+     `(swoop-face-line-buffer-name                      ((t (:background ,color-6 :foreground ,color-1))))
+     `(swoop-face-target-line                           ((t (:background ,color-4 :foreground ,color-8))))
+     `(swoop-face-line-number                           ((t (:background ,color-1 :foreground ,color-3))))
+     `(swoop-face-header-format-line                    ((t (:background ,color-3 :foreground ,color-1))))
+     `(swoop-face-target-words                          ((t (:background ,color-3 :foreground ,color-8))))
+     `(highlight-indentation-face                       ((t (:background ,color-2))))
+     `(highlight-indentation-current-column-face        ((t (:background ,color-1))))
+;;;;; company
+     `(company-echo-common                              ((t (:foreground ,color-8))))
+     `(company-preview                                  ((t (:background ,color-3 :foreground ,color-8))))
+     `(company-preview-common                           ((t (:inherit company-preview :foreground ,color-8 :weight bold))))
+     `(company-scrollbar-fg                             ((t (:background ,color-4))))
+     `(company-tooltip                                  ((t (:background ,color-3 :foreground ,color-8))))
+     `(company-tooltip-annotation                       ((t (:inherit company-tooltip :foreground ,color-1))))
+     `(company-tooltip-common                           ((t (:inherit company-tooltip :foreground ,color-8))))
+     `(company-tooltip-common-selection                 ((t (:inherit company-tooltip-selection :foreground ,color-8))))
+     `(company-tooltip-selection                        ((t (:inherit company-tooltip :background ,color-5 :foreground ,color-1))))
+     `(company-scrollbar-bg                             ((t (:inherit company-tooltip))))
+;;;;; eval-sexp-fu
+     `(eval-sexp-fu-flash                               ((t (:background ,color-2))))
+     `(eval-sexp-fu-flash-error                         ((t (:background ,color-8 :foreground ,color-1))))
+;;;;; neotree
+     `(neo-dir-link-face                                ((t (:inherit diredp-dir-priv))))
+     `(neo-expand-btn-face                              ((t (:foreground ,color-8 :bold t))))
+     `(neo-file-link-face                               ((t (:foreground ,color-6))))
+     `(neo-root-dir-face                                ((t (:foreground ,color-5 :background ,color-1))))
+;;;;; geiser
+     `(geiser-font-lock-doc-link                        ((t (:foreground ,color-8 :underline t))))
+     `(geiser-font-lock-error-link                      ((t (:foreground ,color-8 :underline t))))
+     `(geiser-font-lock-autodoc-identifier              ((t (:foreground ,color-5 :bold t))))
+     `(compilation-error                                ((t (:foreground ,color-8 :underline t :bold t))))
+;;;;; elixir
+     `(elixir-atom-face                                 ((t (:foreground ,color-8 :bold t))))
+;;;;; tuareg
+     `(tuareg-font-lock-operator-face                   ((t (:inherit ,font-lock-variable-name-face))))
+     `(tuareg-font-lock-governing-face                  ((t (:inherit ,font-lock-keyword-face))))
+;;;;; avy
+     `(avy-lead-face                                    ((t (:background ,color-5 :foreground ,color-1 :bold t))))
+     `(avy-lead-face-0                                  ((t (:background ,color-6  :foreground ,color-1  :bold t))))
+     `(avy-lead-face-1                                  ((t (:background ,color-7  :foreground ,color-1 :bold t))))
+     `(avy-lead-face-2                                  ((t (:background ,color-8  :foreground ,color-1 :bold t))))
+     `(avy-background-face                              ((t (:background ,color-1 :foreground ,color-4 :bold t))))
+;;;;; calfw
+     `(cfw:face-title                                   ((t (:height ,(eziam--heading-height 2.5) :foreground ,color-5 :weight bold))))
+     `(cfw:face-grid                                    ((t (:foreground ,color-5))))
+     `(cfw:face-day-title                               ((t (:foreground ,color-5))))
+     `(cfw:face-header                                  ((t (:foreground ,color-6 :background ,color-2 :weight bold))))
+     `(cfw:face-saturday                                ((t (:inherit 'cfw:face-header))))
+     `(cfw:face-sunday                                  ((t (:inherit 'cfw:face-header))))
+     `(cfw:face-holiday                                 ((t (:foreground ,color-5 :slant italic))))
+     `(cfw:face-today                                   ((t (:background ,color-0))))
+     `(cfw:face-today-title                             ((t (:background ,color-0 :foreground ,color-8))))
+     `(cfw:face-select                                  ((t :inherit highlight)))
+     `(cfw:face-toolbar                                 ((t (:background ,color-1))))
+     `(cfw:face-toolbar-button-on                       ((,class ,button-on)))
+     `(cfw:face-toolbar-button-off                      ((,class ,button-off)))
+;;;;; highlight-indent-guides
+     ;; …has been removed: newer versions automatically compute faces.
+;;;;; (end)
+     )
+
+;;;; Variables
+
+    (custom-theme-set-variables
+     ,theme-name
+;;;;; pdf-tools midnight-mode
+     `(pdf-view-midnight-colors ,(if (string-lessp color-8 color-1)
+                                     `(quote (,color-0 . ,color-8))
+                                   `(quote (,color-8 . ,color-0))))
+;;;;; ansi-color
+     `(ansi-color-names-vector [,color-2
+                                ,color-7
+                                ,color-6
+                                ,color-8
+                                ,color-8
+                                ,color-7
+                                ,color-8
+                                ,color-8])
+;;;;; fill-column-indicator
+     `(fci-rule-color ,color-1
+;;;;;  vc-annotate
+                      `(vc-annotate-color-map
+                        '(( 20. . ,color-4)
+                          ( 40. . ,color-5)
+                          ( 60. . ,color-5)
+                          ( 80. . ,color-6)
+                          (100. . ,color-6)
+                          (120. . ,color-7)
+                          (140. . ,color-7)
+                          (160. . ,color-8)
+                          (180. . ,color-8)
+                          (200. . ,color-8)
+                          (220. . ,color-8)
+                          (240. . ,color-8)
+                          (260. . ,color-8)
+                          (280. . ,color-8)
+                          (300. . ,color-8)
+                          (320. . ,color-8)
+                          (340. . ,color-8)
+                          (360. . ,color-8))))
+     ;;                      `(vc-annotate-very-old-color ,color-7)
+     `(vc-annotate-background ,color-1))
+    ))
+
+(provide 'eziam-themes)
+;;; eziam-themes.el ends here
blob - /dev/null
blob + 47acc35da43cf92096cb7acbffa1194853bb477e (mode 644)
--- /dev/null
+++ themes/punpun/punpun-dark-theme.el
@@ -0,0 +1,36 @@
+;;; punpun-dark-theme.el --- Dark punpun theme
+
+;; Copyright (C) 2016 Vasilij Schneidermann <mail@vasilij.de>
+
+;; Author: Vasilij Schneidermann <mail@vasilij.de>
+;; URL: https://depp.brause.cc/punpun-themes
+
+;; This file is NOT part of GNU Emacs.
+
+;; This file is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3, or (at your option)
+;; any later version.
+
+;; This file is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'punpun-themes)
+
+(deftheme punpun-dark "A bleak theme (dark version)")
+
+(punpun-set-faces 'punpun-dark t)
+
+(provide-theme 'punpun-dark)
+;;; punpun-dark-theme.el ends here
blob - /dev/null
blob + 51118febe547da4966144c605aeae51a739dc342 (mode 644)
--- /dev/null
+++ themes/punpun/punpun-light-theme.el
@@ -0,0 +1,36 @@
+;;; punpun-light-theme.el --- Light punpun theme
+
+;; Copyright (C) 2016 Vasilij Schneidermann <mail@vasilij.de>
+
+;; Author: Vasilij Schneidermann <mail@vasilij.de>
+;; URL: https://depp.brause.cc/punpun-themes
+
+;; This file is NOT part of GNU Emacs.
+
+;; This file is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3, or (at your option)
+;; any later version.
+
+;; This file is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'punpun-themes)
+
+(deftheme punpun-light "A bleak theme (light version)")
+
+(punpun-set-faces 'punpun-light nil)
+
+(provide-theme 'punpun-light)
+;;; punpun-dark-theme.el ends here
blob - /dev/null
blob + ff2aa7e272e41101b2d388cc5ecb9ad5c372c44e (mode 644)
--- /dev/null
+++ themes/punpun/punpun-themes.el
@@ -0,0 +1,430 @@
+;;; punpun-themes.el --- Common color definitions for punpun themes
+
+;; Copyright (C) 2016 Vasilij Schneidermann <mail@vasilij.de>
+;; Version: 0.0.3
+;; Package-Requires: ((emacs "24.1"))
+;; Keywords: themes, faces
+;; Author: Vasilij Schneidermann <mail@vasilij.de>
+;; URL: https://depp.brause.cc/punpun-themes
+
+;; This file is NOT part of GNU Emacs.
+
+;; This file is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3, or (at your option)
+;; any later version.
+
+;; This file is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; A set of bleak themes. Uses shades of gray and the occasional
+;; splash of color. Designed for 256-color terminals. Comes in light
+;; and dark!
+
+;;; Code:
+
+(defvar punpun-colors
+  '((base0  ("#eeeeee" "#080808") ("color-255" "color-232"))
+    (base1  ("#d0d0d0" "#1c1c1c") ("color-252" "color-234"))
+    (base2  ("#b2b2b2" "#3a3a3a") ("color-249" "color-237"))
+    (base3  ("#949494" "#585858") ("color-246" "color-240"))
+    (base4  ("#767676" "#767676") ("color-243" "color-243"))
+    (base5  ("#585858" "#949494") ("color-240" "color-246"))
+    (base6  ("#3a3a3a" "#b2b2b2") ("color-237" "color-249"))
+    (base7  ("#1c1c1c" "#d0d0d0") ("color-234" "color-252"))
+
+    (yellow ("#ffaf00" "#ffd700") ("color-214" "color-220"))
+    (orange ("#d75f00" "#ff5f00") ("color-166" "color-202"))
+    (red    ("#d70000" "#ff0000") ("color-160" "color-196"))
+    (green  ("#00af00" "#00d700") ("color-34"  "color-40" ))
+    (blue   ("#5f00ff" "#005fff") ("color-57"  "color-27" ))
+    (cyan   ("#0087ff" "#00d7ff") ("color-33"  "color-45" ))
+    (pink   ("#ff005f" "#ff0087") ("color-197" "color-198"))
+    (violet ("#8700d7" "#af00d7") ("color-92"  "color-128"))))
+
+(defvar punpun-faces
+ '(;; faces sorted alphabetically by the file they appear in
+
+   ;; ace-jump-mode.el
+   (ace-jump-face-background :inherit shadow)
+   (ace-jump-face-foreground :foreground red)
+
+   ;; avy.el
+   (avy-lead-face :foreground base1 :background red)
+   (avy-lead-face-0 :foreground base1 :background pink)
+   (avy-lead-face-1 :foreground base1 :background violet)
+   (avy-lead-face-2 :foreground base1 :background blue)
+   (avy-background-face :foreground base4)
+
+   ;; compile.el
+   (compilation-mode-line-fail :inherit error :weight bold)
+   (compilation-mode-line-exit :inherit success :weight bold)
+
+   ;; cua-base.el
+   (cua-rectangle :inherit region)
+
+   ;;; cus-edit.el
+   ;; the "magic faces"; see `custom-magic-show-button'.
+   (custom-invalid :foreground yellow :background red)
+   (custom-rogue :foreground pink)
+   (custom-modified :foreground base0 :background blue)
+   (custom-set :foreground blue)
+   (custom-changed :foreground base0 :background blue)
+   (custom-themed :foreground base0 :background blue)
+   ;;(custom-saved)
+   ;; button-related
+   (custom-button :foreground base6 :background base1
+                  :box (:line-width -1 :style released-button))
+   (custom-button-mouse :foreground base6 :background base3
+                        :box (:line-width -1 :style released-button))
+   (custom-button-unraised)
+   (custom-button-pressed :foreground base6 :background base1
+                          :box (:line-width -1 :style pressed-button))
+   (custom-button-pressed-unraised :foreground violet)
+   ;; faces for text
+   ;;(custom-documentation)
+   (custom-state :foreground green)
+   ;;(custom-link)
+   (custom-comment :inherit widget-field :extend nil)
+   (custom-comment-tag :inherit font-lock-comment-face)
+   (custom-variable-obsolete)
+   (custom-variable-tag :weight bold)
+   ;;(custom-variable-button)
+   ;;(custom-visibility)
+   ;;(custom-face-tag)
+   (custom-group-tag-1 :weight bold :height 1.2 :inherit variable-pitch)
+   (custom-group-tag :weight bold :height 1.2 :inherit variable-pitch)
+   ;;(custom-group-subtitle)
+
+   ;; dired.el
+   (dired-symlink :foreground blue)
+
+   ;; display-line-numbers.el
+   (line-number :inherit shadow :background base1)
+   (line-number-current-line :background base1 :weight bold)
+
+   ;; enh-ruby-mode.el
+   (erm-syn-errline :box (:line-width 1 :color red))
+   (erm-syn-warnline :box (:line-width 1 :color orange))
+
+   ;; em-ls.el
+   (eshell-ls-directory :inherit dired-directory)
+   (eshell-ls-symlink :inherit dired-symlink)
+   (eshell-ls-executable :foreground green)
+   (eshell-ls-readonly :foreground pink)
+   (eshell-ls-unreadable :foreground cyan)
+   (eshell-ls-special :foreground orange)
+   (eshell-ls-missing :foreground red)
+   (eshell-ls-archive :inherit dired-ignored)
+   (eshell-ls-backup :inherit dired-ignored)
+   (eshell-ls-product :inherit dired-ignored)
+   (eshell-ls-clutter :inherit dired-ignored)
+
+   ;; em-prompt.el
+   (eshell-prompt :weight bold)
+
+   ;; eww.el
+   (eww-form-submit :foreground base6 :background base1 :box (:line-width -1))
+   (eww-form-checkbox :inherit eww-form-submit)
+   (eww-form-select :inherit eww-form-submit)
+   (eww-form-text :background base1)
+   (eww-form-textarea :inherit eww-form-text)
+
+   ;; faces.el
+   (default :foreground base5 :background base0)
+   (cursor :background base4)
+   (region :foreground unspecified :background base2)
+   (fringe :foreground base7 :background base1)
+   (vertical-border :foreground base6)
+   (shadow :inherit font-lock-comment-face)
+   (link :slant italic :underline t)
+   (link-visited :inherit link :foreground base4)
+   (highlight :background base1)
+   (secondary-selection :background base1)
+   (trailing-whitespace :background red)
+   (escape-glyph :foreground green :weight bold)
+
+   (mode-line :foreground base5 :background base1)
+   (mode-line-inactive :foreground base3 :background base1)
+   (mode-line-highlight :slant italic)
+   (mode-line-highlight :box (:line-width -1))
+   (header-line :inherit mode-line)
+   (vertical-border :foreground base4)
+   (window-divider :inherit vertical-border)
+   (minibuffer-prompt :inherit font-lock-comment-face)
+   (tab-bar :inherit variable-pitch :foreground base5 :background base1)
+
+   (error :foreground red)
+   (success :foreground green)
+   (warning :foreground orange :weight bold)
+
+   (show-paren-match :weight bold)
+   (show-paren-mismatch :foreground red :weight bold)
+
+   ;; flycheck.el
+   (flycheck-error :underline (:style wave :color red))
+   (flycheck-warning :underline (:style wave :color orange))
+   (flycheck-info :underline (:style wave :color green))
+
+   ;; flymake.el
+   (flymake-errline :underline (:style wave :color red))
+   (flymake-warnline :underline (:style wave :color orange))
+
+   ;; flyspell.el
+   (flyspell-duplicate :underline (:style wave :color orange))
+   (flyspell-incorrect :underline (:style wave :color red))
+
+   ;; font-latex.el
+   (font-latex-bold-face :weight bold)
+   (font-latex-doctex-documentation-face :slant italic)
+   (font-latex-italic-face :slant italic)
+   (font-latex-math-face :foreground violet)
+   (font-latex-sectioning-1-face :inherit outline-1)
+   (font-latex-sectioning-2-face :inherit outline-2)
+   (font-latex-sectioning-3-face :inherit outline-3)
+   (font-latex-sectioning-4-face :inherit outline-4)
+   (font-latex-sectioning-5-face :inherit outline-5)
+   (font-latex-sedate-face :inherit shadow)
+   (font-latex-string-face :inherit font-lock-string-face)
+   (font-latex-slide-title-face :inherit outline-1)
+   (font-latex-verbatim-face :inherit shadow)
+   (font-latex-warning-face :inherit warning)
+
+   ;; font-lock.el
+   (font-lock-builtin-face :foreground base4 :weight bold)
+   (font-lock-comment-face :foreground base4)
+   (font-lock-constant-face :slant italic)
+   (font-lock-function-name-face :slant italic)
+   (font-lock-keyword-face :foreground base4 :weight bold)
+   (font-lock-negation-char-face :weight bold)
+   (font-lock-regexp-grouping-construct :weight bold)
+   (font-lock-regexp-grouping-backslash :weight bold)
+   (font-lock-string-face :foreground base4)
+   (font-lock-type-face :slant italic)
+   (font-lock-variable-name-face :slant italic)
+   (font-lock-warning-face :foreground orange :weight bold)
+
+   ;; gdb-mi.el
+   (breakpoint-enabled :foreground red)
+
+   ;; highlight-indentation.el
+   (highlight-indentation-face :background base1)
+   (highlight-indentation-current-column-face :background base2)
+
+   ;; highlight-symbol.el
+   (highlight-symbol-face :inherit highlight)
+   ;; TODO: think up a solution for `highlight-symbol-colors'
+
+   ;; hl-todo.el
+   (hl-todo :foreground red :weight bold)
+
+   ;; hydra.el
+   (hydra-face-red :foreground red :weight bold)
+   (hydra-face-blue :foreground blue :weight bold)
+   (hydra-face-amaranth :foreground violet :weight bold)
+   (hydra-face-pink :foreground pink :weight bold)
+   (hydra-face-teal :foreground cyan :weight bold)
+
+   ;; ido.el
+   (ido-only-match :weight bold)
+   (ido-subdir :inherit font-lock-string-face)
+
+   ;; isearch.el
+   (isearch :background base2)
+   (isearch-fail :inherit error)
+   (lazy-highlight :background base1)
+
+   ;; info.el
+   (Info-quoted :inherit font-lock-constant-face)
+   (info-node :weight bold)
+   (info-title-1 :inherit info-node)
+   (info-title-2 :inherit info-node)
+   (info-title-3 :inherit info-node)
+   (info-title-4 :inherit info-node)
+   (info-menu-header :inherit default)
+   (info-menu-star :foreground red)
+
+   ;; ivy.el
+   (ivy-confirm-face :foreground green)
+   (ivy-current-match :weight bold :background base1)
+   (ivy-match-required-face :foreground red)
+   (ivy-minibuffer-match-face-1 :foreground orange)
+   (ivy-minibuffer-match-face-2 :foreground orange)
+   (ivy-minibuffer-match-face-3 :foreground orange)
+   (ivy-minibuffer-match-face-4 :foreground orange)
+   (ivy-modified-buffer :inherit default)
+   (ivy-remote :foreground blue)
+   (ivy-subdir :inherit dired-directory)
+   (ivy-virtual :inherit font-lock-builtin-face)
+
+   ;; linum.el
+   (linum :inherit shadow :background base1)
+
+   ;; make-mode.el
+   (makefile-space :background red)
+
+   ;; message.el
+   (message-header-to :inherit default :weight bold)
+   (message-header-cc :inherit default)
+   (message-header-subject :inherit default :weight bold)
+   (message-header-newsgroups :inherit default :weight bold)
+   (message-header-other :inherit default)
+   (message-header-name :inherit font-lock-variable-name-face)
+   (message-header-xheader :inherit default)
+   (message-separator :inherit font-lock-comment-face)
+   (message-cited-text :inherit font-lock-comment-face)
+   (message-mml :inherit font-lock-comment-face)
+
+   ;; org-faces.el
+   (org-done :foreground green :weight bold)
+   (org-hide :foreground base0)
+   (org-todo :foreground red :weight bold)
+
+   ;; outline.el
+   (outline-1 :weight bold)
+   (outline-2 :inherit outline-1)
+   (outline-3 :inherit outline-1)
+   (outline-4 :inherit outline-1)
+   (outline-5 :inherit outline-1)
+   (outline-6 :inherit outline-1)
+   (outline-7 :inherit outline-1)
+   (outline-8 :inherit outline-1)
+
+   ;; preview.el
+   (preview-face :inherit shadow)
+
+   ;; pulse.el
+   (pulse-highlight-start-face :background yellow)
+
+   ;; rainbow-delimiters.el
+   (rainbow-delimiters-unmatched-face :foreground red :weight bold)
+   (rainbow-delimiters-depth-1-face :foreground base5)
+   (rainbow-delimiters-depth-2-face :foreground base2)
+   (rainbow-delimiters-depth-3-face :foreground base3)
+   (rainbow-delimiters-depth-4-face :foreground base2)
+   (rainbow-delimiters-depth-5-face :foreground base3)
+   (rainbow-delimiters-depth-6-face :foreground base2)
+   (rainbow-delimiters-depth-7-face :foreground base3)
+   (rainbow-delimiters-depth-8-face :foreground base2)
+   (rainbow-delimiters-depth-9-face :foreground base3)
+
+   ;; re-builder.el
+   (reb-match-0 :foreground base7 :background base1)
+   (reb-match-1 :foreground base7 :background base2)
+   (reb-match-2 :foreground base7 :background yellow)
+   (reb-match-3 :foreground base7 :background orange)
+
+   ;; replace.el
+   (match :background yellow)
+
+   ;; rst.el
+   (rst-level-1 :inherit outline-1)
+   (rst-level-2 :inherit outline-2)
+   (rst-level-3 :inherit outline-3)
+   (rst-level-4 :inherit outline-4)
+   (rst-level-5 :inherit outline-5)
+   (rst-level-6 :inherit outline-6)
+
+   ;; sh-script.el
+   (sh-heredoc :inherit font-lock-string-face)
+   (sh-quoted-exec :slant italic)
+
+   ;; shorthands.el
+   (elisp-shorthand-font-lock-face :inherit shadow)
+
+   ;; smartparens.el
+   (sp-wrap-overlay-opening-pair :inherit sp-wrap-overlay-face :foreground green)
+   (sp-wrap-overlay-closing-pair :inherit sp-wrap-overlay-face :foreground red)
+
+   ;; tab-bar.el
+   (tab-bar-tab-inactive :inherit tab-bar-tab :foreground base3 :background base1)
+
+   ;; tex-fold.el
+   (TeX-fold-folded-face :foreground blue)
+   (TeX-fold-unfolded-face :foreground base1)
+
+   ;; tooltip.el
+   (tooltip :inherit default :background base0)
+
+   ;; undo-tree.el
+   (undo-tree-visualizer-default-face :inherit default)
+   (undo-tree-visualizer-active-branch-face :weight bold)
+   (undo-tree-visualizer-unmodified-face :foreground cyan)
+   (undo-tree-visualizer-current-face :foreground red)
+   (undo-tree-visualizer-register-face :foreground yellow)
+
+   ;; which-func.el
+   (which-func :slant italic)
+
+   ;; whitespace.el
+   (whitespace-space :foreground unspecified :background base1)
+   (whitespace-hspace :foreground unspecified :background base2)
+   (whitespace-tab :foreground unspecified :background red)
+   (whitespace-newline :inherit font-lock-comment-face)
+   (whitespace-line :inherit warning :underline t)
+   (whitespace-space-before-tab :foreground unspecified :background orange)
+   (whitespace-space-after-tab :foreground unspecified :background orange)
+   (whitespace-indentation :foreground unspecified :background orange)
+   (whitespace-empty :foreground unspecified :background yellow)
+   (whitespace-trailing :foreground unspecified :background red)
+
+   ;; wid-edit.el
+   (widget-field :background base1
+                 :box (:line-width (1 . -1) :color base1)
+                 :extend t)
+   ))
+
+(defun punpun-set-faces (theme darkp)
+  (apply #'custom-theme-set-faces theme
+         (mapcar (lambda (face) (punpun-transform-face face darkp))
+                 punpun-faces)))
+
+(defun punpun-transform-face (face darkp)
+  (let* ((name (car face))
+         (spec (cdr face))
+         (graphic-spec (punpun-transform-spec spec t darkp))
+         (tty-spec (punpun-transform-spec spec nil darkp)))
+    `(,name ((((type graphic)) ,@graphic-spec)
+             (((type tty)) ,@tty-spec)))))
+
+(defun punpun-transform-spec (spec display darkp)
+  (let (output)
+    (while spec
+      (let* ((key (car spec))
+             (value (cadr spec))
+             (color (punpun-color value display darkp)))
+        (cond
+         ((and (memq key '(:box :underline)) (listp value))
+          (setq output (append output
+                               (list key (punpun-transform-spec value display darkp)))))
+         ((and (not (memq value '(t unspecified)))
+               (memq key '(:foreground :background :underline :overline :strike-through :color))
+               color)
+          (setq output (append output (list key color))))
+         (t (setq output (append output (list key value))))))
+      (setq spec (cddr spec)))
+    output))
+
+(defun punpun-color (shade display darkp)
+  (nth (if darkp 1 0)
+       (nth (if display 1 2)
+            (assoc shade punpun-colors))))
+
+;;;###autoload
+(and load-file-name
+     (boundp 'custom-theme-load-path)
+     (add-to-list 'custom-theme-load-path
+                  (file-name-as-directory
+                   (file-name-directory load-file-name))))
+
+(provide 'punpun-themes)
+;;; punpun-themes.el ends here