summaryrefslogtreecommitdiff
path: root/.config/emacs/eighters-theme.el
diff options
context:
space:
mode:
Diffstat (limited to '.config/emacs/eighters-theme.el')
-rw-r--r--.config/emacs/eighters-theme.el600
1 files changed, 600 insertions, 0 deletions
diff --git a/.config/emacs/eighters-theme.el b/.config/emacs/eighters-theme.el
new file mode 100644
index 0000000..d81a070
--- /dev/null
+++ b/.config/emacs/eighters-theme.el
@@ -0,0 +1,600 @@
+;; -*- lexical-binding: t -*-
+
+(require 'color)
+(require 'compile) ; compilation-*-directory-face
+(require-theme 'modus-themes)
+
+(deftheme eighters
+ "Eighters gonna eight.")
+
+(defun eighters-hsl-to-hex (h s l)
+ (apply
+ 'color-rgb-to-hex
+ `(,@(color-hsl-to-rgb h s l) 2)))
+
+(defun eighters-decline-hue (name light-step)
+ (interactive
+ (list (read-color "Color to decline? ")
+ (read-number "Light step? (1–100) ")))
+ (pcase-let* ((`(,r ,g ,b) (color-name-to-rgb name))
+ (`(,h _ _) (color-rgb-to-hsl r g b)))
+ (let ((variants (seq-map
+ (lambda (l)
+ (cons l (eighters-hsl-to-hex h 1.0 (/ l 100.0))))
+ (number-sequence 0 100 light-step)))
+ (buf (format "*%s variants*" name)))
+ (with-current-buffer (get-buffer-create buf)
+ (pcase-dolist (`(,l . ,hex) variants)
+ (let ((cr (modus-themes-contrast "#fff" hex)))
+ (when (> cr 7.0)
+ (insert
+ (propertize (format "%s %3s\t%6.3f\n" hex l cr)
+ 'face `(:background ,hex :extend t))))))
+ (pcase-dolist (`(,l . ,hex) variants)
+ (let ((cr (modus-themes-contrast "#000" hex)))
+ (when (> cr 7.0)
+ (insert
+ (propertize (format "%s %3s\t%6.3f\n" hex l cr)
+ 'face `(:foreground ,hex)))))))
+ (pop-to-buffer buf))))
+
+(defvar eighters-hues
+ '((red . "brown2")
+ (green . "chartreuse2")
+ (yellow . "gold")
+ (blue . "steelblue1")
+ (magenta . "violet")
+ (cyan . "cadetblue2")))
+
+(defvar eighters-palette
+ '((bg "#000") (bg-hl-dimmer "#0f0f0f") (bg-hl-dim "#181818") (bg-hl "#222")
+ (fg-red "#ed5e5e") (fg-red-dim "#ba5e5e") (fg-red-subtle "#f4a3a3")
+ (bg-red "#4c0000") (bg-red-dim "#300000") (bg-red-dimmer "#1e0000")
+ (fg-green "#a5ed5e") (fg-green-dim "#8bba5e") (fg-green-subtle "#cbf4a3")
+ (bg-green "#122600") (bg-green-dim "#0b1600") (bg-green-dimmer "#060c00")
+ (fg-yellow "#edd65e") (fg-yellow-dim "#baab5e") (fg-yellow-subtle "#f4e8a3")
+ (bg-yellow "#262000") (bg-yellow-dim "#161300") (bg-yellow-dimmer "#0c0a00")
+ (fg-blue "#5eaced") (fg-blue-dim "#5e90ba") (fg-blue-subtle "#a3cff4")
+ (bg-blue "#00223f") (bg-blue-dim "#001426") (bg-blue-dimmer "#000b14")
+ (fg-magenta "#ed5eed") (fg-magenta-dim "#ba5eba") (fg-magenta-subtle "#f4a3f4")
+ (bg-magenta "#420042") (bg-magenta-dim "#280028") (bg-magenta-dimmer "#190019")
+ (fg-cyan "#5edfed") (fg-cyan-dim "#5eb1ba") (fg-cyan-subtle "#a3edf4")
+ (bg-cyan "#002428") (bg-cyan-dim "#001416") (bg-cyan-dimmer "#000b0c")
+ (fg "#fff") (fg-dim "#bbb") (fg-dimmer "#888")))
+
+(defun eighters--step-while (init step predicate)
+ (let ((result init)
+ (next init))
+ (while (funcall predicate (cl-incf next step))
+ (setq result next))
+ result))
+
+(defun eighters--brightest-bg (hue contrast-min)
+ (eighters-hsl-to-hex
+ hue 1
+ (eighters--step-while
+ 0 .005
+ (lambda (luminance)
+ (let ((candidate (eighters-hsl-to-hex hue 1 luminance)))
+ (> (modus-themes-contrast "#fff" candidate) contrast-min))))))
+
+(defun eighters-set-palette ()
+ (interactive)
+ (pcase-dolist (`(,hue-sym . ,hue-name) eighters-hues)
+ (let ((hue (car (apply 'color-rgb-to-hsl (color-name-to-rgb hue-name)))))
+ (setf
+ (eighters-color 'fg hue-sym nil) (eighters-hsl-to-hex hue .8 .65)
+ (eighters-color 'fg hue-sym 'dim) (eighters-hsl-to-hex hue .4 .55)
+ (eighters-color 'fg hue-sym 'subtle) (eighters-hsl-to-hex hue .8 .8)
+ (eighters-color 'bg hue-sym nil) (eighters--brightest-bg hue 16)
+ (eighters-color 'bg hue-sym 'dim) (eighters--brightest-bg hue 18.5)
+ (eighters-color 'bg hue-sym 'dimmer) (eighters--brightest-bg hue 19.75))))
+ (load-theme 'eighters t))
+
+(defun eighters-showcase--insert (&rest _)
+ (erase-buffer)
+ (pcase-dolist (`(,sym ,color)
+ eighters-palette)
+ (pcase-let* ((`(,r ,g ,b) (color-name-to-rgb color))
+ (`(,h ,s ,l) (color-rgb-to-hsl r g b)))
+ (let (bg fg face)
+ (if (string-prefix-p "fg" (symbol-name sym))
+ (setq fg color
+ bg "#000")
+ (setq bg color
+ fg "#fff"))
+ (setq face `(:foreground ,fg :background ,bg :extend t))
+ (insert
+ (propertize (format "%-16s\t(%.3f %.3f %.3f) (%.3f %.3f %.3f)\t\t%.3f\n"
+ sym r g b h s l (modus-themes-contrast fg bg))
+ 'face face))))))
+
+(defun eighters-showcase ()
+ (interactive)
+ (let ((buf (get-buffer-create "*Eighters palette*")))
+ (with-current-buffer buf
+ (eighters-showcase--insert)
+ (setq-local revert-buffer-function 'eighters-showcase--insert)
+ (pop-to-buffer buf))))
+
+(defun eighters-serialize ()
+ (interactive)
+ (let ((blacks '(bg bg-hl-dimmer bg-hl-dim bg-hl))
+ (colors '(red green yellow blue magenta cyan))
+ (whites '(fg fg-dim fg-dimmer))
+ (beg (point))
+ (format-sym
+ (lambda (sym)
+ (format "(%s \"%s\")"
+ sym (car (alist-get sym eighters-palette))))))
+ (insert
+ "(defvar eighters-palette\n'("
+ (string-join (seq-map format-sym blacks) " ")
+ "\n")
+ (let ((beg (point)))
+ (dolist (hue colors)
+ (dolist (template '("fg-%s" "fg-%s-dim" "fg-%s-subtle"))
+ (insert (funcall format-sym (intern (format template hue)))))
+ (insert "\n")
+ (dolist (template '("bg-%s" "bg-%s-dim" "bg-%s-dimmer"))
+ (insert (funcall format-sym (intern (format template hue)))))
+ (insert "\n"))
+ (align-regexp beg (point) "\\(\\s-*\\)\\(\"[^)]\\|(\\)" 1 1 t))
+ (insert
+ (string-join (seq-map format-sym whites) " ")
+ "))\n")
+ (indent-region beg (point))))
+
+(defun eighters-color (symbol)
+ (car (alist-get symbol eighters-palette)))
+
+(defun eighters--sym (xground hue qualifier)
+ (intern
+ (apply 'concat `( ,(symbol-name xground) "-"
+ ,(symbol-name hue)
+ ,@(when qualifier `("-" ,(symbol-name qualifier)))))))
+
+(defun eighters-color-set (xground hue qualifier value)
+ (let ((sym (eighters--sym xground hue qualifier)))
+ (setf (car (alist-get sym eighters-palette)) value)))
+
+(gv-define-simple-setter eighters-color eighters-color-set)
+
+(defface eighters-button nil
+ "Face for elements that can be \"pushed\" with RET.")
+(defface eighters-checkbox nil
+ "Face for text that represents togglable boxes.")
+(defface eighters-citation-1 nil
+ "Face for level 1 citations.")
+(defface eighters-citation-2 nil
+ "Face for level 2 citations.")
+(defface eighters-citation-3 nil
+ "Face for level 3 citations.")
+(defface eighters-citation-4 nil
+ "Face for level 4 citations.")
+(defface eighters-citation-5 nil
+ "Face for level 5 citations.")
+(defface eighters-citation-6 nil
+ "Face for level 6 citations.")
+(defface eighters-date nil
+ "Face for text that describes dates.")
+(defface eighters-identity nil
+ "Face for names of persons.")
+(defface eighters-markup nil
+ "Face for text that describes \"structure\" rather than content.")
+(defface eighters-metadata nil
+ "Face for extra context surrounding something of interest.")
+(defface eighters-title-1 nil
+ "Face for level 1 headings.")
+(defface eighters-title-2 nil
+ "Face for level 2 headings.")
+(defface eighters-title-3 nil
+ "Face for level 3 headings.")
+(defface eighters-title-4 nil
+ "Face for level 4 headings.")
+(defface eighters-title-5 nil
+ "Face for level 5 headings.")
+(defface eighters-title-6 nil
+ "Face for level 6 headings.")
+(defface eighters-title-7 nil
+ "Face for level 7 headings.")
+(defface eighters-title-8 nil
+ "Face for level 8 headings.")
+(defface eighters-ui nil
+ "Face for inalterable UI elements.")
+
+(defmacro eighters-with-palette (&rest body)
+ `(let ,eighters-palette ,@body))
+
+(eighters-with-palette
+ (custom-theme-set-faces
+ 'eighters
+;;; Theme faces.
+ `(eighters-button ((t (:background ,bg-hl-dimmer :box (:color ,bg-hl :style released-button) :inherit eighters-ui))))
+ `(eighters-checkbox ((t (:background ,bg-hl-dim :foreground ,fg-blue-dim))))
+ `(eighters-citation-1 ((t (:foreground ,fg-cyan-dim))))
+ `(eighters-citation-2 ((t (:foreground ,fg-green-dim))))
+ `(eighters-citation-3 ((t (:foreground ,fg-yellow-dim))))
+ `(eighters-citation-4 ((t (:foreground ,fg-red-dim))))
+ `(eighters-citation-5 ((t (:foreground ,fg-magenta-dim))))
+ `(eighters-citation-6 ((t (:foreground ,fg-blue-dim))))
+ `(eighters-date ((t (:foreground ,fg-magenta-dim))))
+ `(eighters-identity ((t (:foreground ,fg-red-subtle))))
+ `(eighters-markup ((t (:foreground ,fg-dim))))
+ `(eighters-metadata ((t (:foreground ,fg-magenta-dim))))
+ `(eighters-title-1 ((t (:foreground ,fg-cyan-subtle :weight bold :height 1.28 :inherit variable-pitch))))
+ `(eighters-title-2 ((t (:foreground ,fg-green-subtle :weight bold :height 1.20 :inherit variable-pitch))))
+ `(eighters-title-3 ((t (:foreground ,fg-yellow-subtle :weight bold :height 1.12 :inherit variable-pitch))))
+ `(eighters-title-4 ((t (:foreground ,fg-red-subtle :weight bold :height 1.04 :inherit variable-pitch))))
+ `(eighters-title-5 ((t (:foreground ,fg-magenta-subtle :weight bold :inherit variable-pitch))))
+ `(eighters-title-6 ((t (:foreground ,fg-blue-subtle :weight bold :inherit variable-pitch))))
+ `(eighters-title-7 ((t (:foreground ,fg-cyan-subtle :weight bold :inherit variable-pitch))))
+ `(eighters-title-8 ((t (:foreground ,fg-green-subtle :weight bold :inherit variable-pitch))))
+ `(eighters-ui ((t (:inherit variable-pitch))))
+;;; Standard faces.
+ `(ansi-color-black ((t (:foreground ,bg :background ,bg))))
+ `(ansi-color-red ((t (:foreground ,fg-red :background ,bg-red-dim))))
+ `(ansi-color-green ((t (:foreground ,fg-green :background ,bg-green-dim))))
+ `(ansi-color-yellow ((t (:foreground ,fg-yellow :background ,bg-yellow-dim))))
+ `(ansi-color-blue ((t (:foreground ,fg-blue :background ,bg-blue-dim))))
+ `(ansi-color-magenta ((t (:foreground ,fg-magenta :background ,bg-magenta-dim))))
+ `(ansi-color-cyan ((t (:foreground ,fg-cyan :background ,bg-cyan-dim))))
+ `(ansi-color-white ((t (:foreground ,fg-dim :background ,fg-dim))))
+ `(ansi-color-bright-black ((t (:foreground ,bg-hl :background ,bg-hl))))
+ `(ansi-color-bright-red ((t (:foreground ,fg-red-subtle :background ,bg-red))))
+ `(ansi-color-bright-green ((t (:foreground ,fg-green-subtle :background ,bg-green))))
+ `(ansi-color-bright-yellow ((t (:foreground ,fg-yellow-subtle :background ,bg-yellow))))
+ `(ansi-color-bright-blue ((t (:foreground ,fg-blue-subtle :background ,bg-blue))))
+ `(ansi-color-bright-magenta ((t (:foreground ,fg-magenta-subtle :background ,bg-magenta))))
+ `(ansi-color-bright-cyan ((t (:foreground ,fg-cyan-subtle :background ,bg-cyan))))
+ `(ansi-color-bright-white ((t (:foreground ,fg :background ,fg))))
+ `(button ((t (:inherit eighters-button))))
+ `(calendar-today ((t (:inverse-video t))))
+ `(change-log-date ((t (:inherit eighters-date))))
+ `(change-log-email ((t (:inherit (eighters-identity fixed-pitch-serif)))))
+ `(change-log-name ((t (:inherit eighters-identity))))
+ `(compilation-column-number ((t (:inherit eighters-metadata))))
+ `(compilation-line-number ((t (:inherit eighters-metadata))))
+ `(compilation-mode-line-exit ((t (:inherit compilation-info))))
+ `(compilation-mode-line-fail ((t (:inherit compilation-error))))
+ `(compilation-mode-line-run ((t (:inherit compilation-warning))))
+ `(completions-annotations ((t (:inherit font-lock-doc-face))))
+ `(completions-common-part ((t (:inherit shadow))))
+ `(completions-first-difference ((t (:foreground ,fg-magenta :weight bold))))
+ `(completions-highlight ((t (:background ,bg-magenta))))
+ `(custom-button ((t (:inherit eighters-button))))
+ `(custom-comment ((t (:background ,bg-hl-dim :foreground ,fg-dim))))
+ `(custom-variable-tag ((t (:inherit eighters-title-3))))
+ `(default ((t (:background ,bg :foreground ,fg))))
+ `(dired-broken-symlink ((t (:background ,bg-red :foreground ,fg-yellow :weight bold))))
+ `(dired-directory ((t (:weight bold :foreground ,fg-blue))))
+ `(dired-header ((t (:inherit eighters-title-1))))
+ `(dired-special ((t (:foreground ,fg-yellow-dim))))
+ `(eglot-highlight-symbol-face ((t (:background ,bg-cyan-dim :underline ,fg-cyan-dim))))
+ `(eldoc-highlight-function-argument ((t (:background ,bg-red-dim :foreground ,fg-magenta :inverse-video t :weight bold))))
+ `(emacs-authors-author ((t (:inherit (bold eighters-identity variable-pitch)))))
+ `(emacs-authors-descriptor ((t (:inherit (shadow variable-pitch)))))
+ `(emacs-news-does-not-need-documentation ((t (:foreground ,fg-dimmer))))
+ `(emacs-news-is-documented ((t (:foreground ,fg-blue-dim))))
+ `(erc-button ((t (:inherit link))))
+ `(erc-current-nick-face ((t (:weight bold :inherit eighters-identity))))
+ `(erc-direct-msg-face ((t (:inherit font-lock-doc-face))))
+ `(erc-error-face ((t (:inherit error))))
+ `(erc-input-face ((t (:inherit eighters-citation-1))))
+ `(erc-keyword-face ((t (:inherit font-lock-keyword-face))))
+ `(erc-my-nick-face ((t (:foreground ,fg-red-dim))))
+ `(erc-nick-default-face ((t (:inherit eighters-identity))))
+ `(erc-nick-msg-face ((t (:weight bold :inherit eighters-identity))))
+ `(erc-notice-face ((t (:inherit font-lock-comment-face))))
+ `(erc-prompt-face ((t (:inherit minibuffer-prompt))))
+ `(erc-timestamp-face ((t (:inherit eighters-date))))
+ `(error ((t :foreground ,fg-red :weight bold)))
+ `(escape-glyph ((t (:foreground ,fg-red-dim :inherit fixed-pitch-serif))))
+ `(eww-invalid-certificate ((t (:inherit error))))
+ `(eww-valid-certificate ((t (:inherit success))))
+ `(flymake-error ((t (:underline (:color ,fg-red :style wave)))))
+ `(flymake-note ((t (:underline (:color ,fg-blue :style wave)))))
+ `(flymake-warning ((t (:underline (:color ,fg-yellow :style wave)))))
+ `(flyspell-duplicate ((t (:underline (:color ,fg-yellow :style wave)))))
+ `(flyspell-incorrect ((t (:underline (:color ,fg-red :style wave)))))
+ `(font-lock-builtin-face ((t (:foreground ,fg-blue))))
+ `(font-lock-comment-face ((t (:foreground ,fg-dim :slant italic))))
+ `(font-lock-constant-face ((t (:foreground ,fg-magenta))))
+ `(font-lock-doc-face ((t (:foreground ,fg-green-dim :slant italic))))
+ `(font-lock-function-name-face ((t (:foreground ,fg-blue :weight bold))))
+ `(font-lock-keyword-face ((t (:foreground ,fg-cyan :weight bold))))
+ `(font-lock-negation-char-face ((t (:inherit warning))))
+ `(font-lock-preprocessor-face ((t (:foreground ,fg-blue :inherit fixed-pitch-serif))))
+ `(font-lock-regexp-grouping-backslash ((t (:foreground ,fg-yellow-dim))))
+ `(font-lock-regexp-grouping-construct ((t (:foreground ,fg-yellow :weight bold))))
+ `(font-lock-string-face ((t (:foreground ,fg-magenta-dim))))
+ `(font-lock-type-face ((t (:foreground ,fg-green))))
+ `(font-lock-variable-name-face ((t (:foreground ,fg-yellow))))
+ `(font-lock-warning-face ((t (:inherit warning))))
+ `(fringe ((t (:background ,bg-hl-dimmer :foreground ,fg-dimmer))))
+ `(gnus-group-mail-1 ((t (:foreground ,fg-yellow :weight bold))))
+ `(gnus-group-mail-1-empty ((t (:foreground ,fg-yellow-dim))))
+ `(gnus-group-mail-3 ((t (:foreground ,fg-green :weight bold))))
+ `(gnus-group-mail-3-empty ((t (:foreground ,fg-green-dim))))
+ `(gnus-group-mail-low ((t (:foreground ,fg-dim :weight bold))))
+ `(gnus-group-mail-low-empty ((t (:foreground ,fg-dimmer))))
+ `(gnus-group-news-3 ((t (:foreground ,fg-magenta :weight bold))))
+ `(gnus-group-news-3-empty ((t (:foreground ,fg-magenta-dim))))
+ `(gnus-button ((t (:inherit link))))
+ `(gnus-cite-1 ((t (:inherit eighters-citation-1))))
+ `(gnus-cite-2 ((t (:inherit eighters-citation-2))))
+ `(gnus-cite-3 ((t (:inherit eighters-citation-3))))
+ `(gnus-cite-4 ((t (:inherit eighters-citation-4))))
+ `(gnus-cite-5 ((t (:inherit eighters-citation-5))))
+ `(gnus-cite-6 ((t (:inherit eighters-citation-6))))
+ `(gnus-cite-7 ((t (:inherit eighters-citation-1))))
+ `(gnus-cite-8 ((t (:inherit eighters-citation-2))))
+ `(gnus-cite-9 ((t (:inherit eighters-citation-3))))
+ `(gnus-cite-10 ((t (:inherit eighters-citation-4))))
+ `(gnus-cite-11 ((t (:inherit eighters-citation-5))))
+ `(gnus-header ((t ())))
+ `(gnus-header-content ((t (:foreground ,fg-dim :inherit gnus-header))))
+ `(gnus-header-from ((t (:inherit (eighters-identity gnus-header)))))
+ `(gnus-header-name ((t (:background ,bg-blue-dim :foreground ,fg-blue-subtle :inherit (eighters-ui gnus-header)))))
+ `(gnus-header-newsgroups ((t (:inherit (warning gnus-header)))))
+ `(gnus-header-subject ((t (:inherit (eighters-title-1 gnus-header)))))
+ `(gnus-server-closed ((t (:inherit shadow))))
+ `(gnus-server-cloud ((t (:foreground ,fg-dimmer))))
+ `(gnus-server-cloud-host ((t (:foreground ,fg-dim :underline t))))
+ `(gnus-server-denied ((t (:inherit error))))
+ `(gnus-server-offline ((t (:inherit error))))
+ `(gnus-server-opened ((t (:inherit success))))
+ `(gnus-signature ((t (:inherit font-lock-comment-face))))
+ `(gnus-summary-cancelled ((t (:strike-through t :inherit shadow))))
+ `(gnus-summary-normal-ancient ((t (:foreground ,fg-dim))))
+ `(gnus-summary-normal-read ((t (:foreground ,fg-dim :slant italic))))
+ `(gnus-summary-normal-ticked ((t (:foreground ,fg-yellow-dim))))
+ `(gnus-summary-selected ((t (:inherit highlight))))
+ `(header-line ((t (:background ,bg-hl :inherit eighters-ui))))
+ `(help-key-binding ((t (:background ,bg-hl-dimmer :foreground ,fg-magenta :inherit fixed-pitch-serif))))
+ `(highlight ((t (:background ,bg-hl-dim))))
+ `(icomplete-selected-match ((t (:inherit completions-highlight))))
+ `(info-title-1 ((t (:inherit eighters-title-1))))
+ `(info-title-2 ((t (:inherit eighters-title-2))))
+ `(info-title-3 ((t (:inherit eighters-title-3))))
+ `(info-title-4 ((t (:inherit eighters-title-4))))
+ `(isearch ((t (:background ,bg-red-dim :foreground ,fg-magenta :inverse-video t))))
+ `(isearch-fail ((t (:background ,bg-red :weight bold))))
+ `(isearch-group-1 ((t (:background ,bg-red :foreground ,fg-red :inverse-video t))))
+ `(isearch-group-2 ((t (:background ,bg-red :foreground ,fg-blue :inverse-video t))))
+ `(lazy-highlight ((t (:background ,bg-cyan :foreground ,fg-cyan :inverse-video t))))
+ `(link ((t (:foreground ,fg-blue :underline t))))
+ `(link-visited ((t (:foreground ,fg-magenta-dim :underline t))))
+ `(log-edit-header ((t (:inherit minibuffer-prompt))))
+ `(log-edit-headers-separator ((t (:inherit separator-line))))
+ `(log-edit-summary ((t (:inherit eighters-title-1))))
+ `(Man-overstrike ((t (:foreground ,fg-cyan :inherit bold))))
+ `(match ((t (:background ,bg-cyan-dim :underline ,fg-cyan-dim))))
+ `(message-cited-text-1 ((t (:inherit eighters-citation-1))))
+ `(message-cited-text-2 ((t (:inherit eighters-citation-2))))
+ `(message-cited-text-3 ((t (:inherit eighters-citation-3))))
+ `(message-cited-text-4 ((t (:inherit eighters-citation-4))))
+ `(message-header-cc ((t (:inherit eighters-identity))))
+ `(message-header-from ((t (:inherit eighters-identity))))
+ `(message-header-name ((t (:background ,bg-blue-dim :foreground ,fg-blue-subtle :inherit eighters-ui))))
+ `(message-header-newsgroups ((t (:inherit warning))))
+ `(message-header-subject ((t (:inherit eighters-title-1))))
+ `(message-header-other ((t (:foreground ,fg-dim))))
+ `(message-header-to ((t (:weight bold :inherit eighters-identity))))
+ `(message-header-xheader ((t (:inherit font-lock-preprocessor-face))))
+ `(message-mml ((t (:foreground ,fg-blue :inherit eighters-ui))))
+ `(message-separator ((t (:background ,bg-hl-dim :inherit (eighters-ui shadow)))))
+ `(message-signature-separator ((t (:background ,bg-hl-dim :inherit (eighters-ui shadow)))))
+ `(minibuffer-prompt ((t (:background ,bg-blue :foreground ,fg-blue-subtle :weight bold :inherit eighters-ui))))
+ `(mm-uu-extract ((t (:background ,bg-hl-dimmer))))
+ `(mode-line ((t (:background ,bg-hl :box (:color ,fg) :inherit eighters-ui))))
+ `(mode-line-inactive ((t (:background ,bg-hl-dimmer :foreground ,fg-dimmer :box (:color ,bg-hl-dimmer) :inherit eighters-ui))))
+ `(nobreak-space ((t (:background ,bg-magenta-dimmer :underline t :inherit escape-glyph))))
+ `(outline-1 ((t (:inherit eighters-title-1))))
+ `(outline-2 ((t (:inherit eighters-title-2))))
+ `(outline-3 ((t (:inherit eighters-title-3))))
+ `(outline-4 ((t (:inherit eighters-title-4))))
+ `(outline-5 ((t (:inherit eighters-title-5))))
+ `(outline-6 ((t (:inherit eighters-title-6))))
+ `(outline-7 ((t (:inherit eighters-title-7))))
+ `(outline-8 ((t (:inherit eighters-title-8))))
+ `(org-block ((t (:background ,bg-hl-dimmer :inherit fixed-pitch-serif))))
+ `(org-block-begin-line ((t (:background ,bg-hl-dim :inherit shadow :extend t))))
+ `(org-block-end-line ((t (:background ,bg-hl-dim :inherit shadow :extend t))))
+ `(org-checkbox ((t (:inherit eighters-checkbox))))
+ `(org-code ((t (:background ,bg-hl-dim :inherit fixed-pitch-serif))))
+ `(org-date ((t (:inherit eighters-date))))
+ `(org-done ((t (:inherit success))))
+ `(org-drawer ((t (:inherit shadow))))
+ `(org-ellipsis ((t (:inherit shadow))))
+ `(org-footnote ((t (:inherit font-lock-comment-face))))
+ `(org-mode-line-clock ((t (:inherit font-lock-constant-face))))
+ `(org-special-keyword ((t (:inherit shadow))))
+ `(org-table ((t (:foreground ,fg-dim :inherit fixed-pitch-serif))))
+ `(org-tag ((t (:inherit eighters-metadata))))
+ `(org-todo ((t (:inherit error))))
+ `(org-verbatim ((t (:background ,bg-hl-dim :foreground ,fg-magenta :inherit fixed-pitch-serif))))
+ `(region ((t (:background ,bg-cyan))))
+ `(rst-adornment ((t (:inherit shadow))))
+ `(rst-block ((t (:inherit (bold rst-adornment)))))
+ `(rst-definition ((t (:inherit font-lock-type-face))))
+ `(rst-directive ((t (:foreground ,fg-dim))))
+ `(rst-external ((t (:inherit font-lock-constant-face))))
+ `(rst-level-1 ((t (:inherit eighters-title-1))))
+ `(rst-level-2 ((t (:inherit eighters-title-2))))
+ `(rst-level-3 ((t (:inherit eighters-title-3))))
+ `(rst-level-4 ((t (:inherit eighters-title-4))))
+ `(rst-level-5 ((t (:inherit eighters-title-5))))
+ `(rst-level-6 ((t (:inherit eighters-title-6))))
+ `(rst-literal ((t (:background ,bg-hl-dim :foreground ,fg-magenta :extend t :inherit fixed-pitch-serif))))
+ `(rst-reference ((t (:inherit font-lock-string-face))))
+ `(separator-line ((t (:background ,bg-hl :height 0.1))))
+ `(sh-heredoc ((t (:background ,bg-hl-dimmer :extend t :inherit fixed-pitch-serif))))
+ `(sh-quoted-exec ((t (:background ,bg-hl-dim :inherit fixed-pitch-serif))))
+ `(shadow ((t (:foreground ,fg-dimmer))))
+ `(shortdoc-heading ((t (:inherit eighters-title-1))))
+ `(show-paren-match ((t (:foreground ,fg-cyan :inverse-video t))))
+ `(show-paren-mismatch ((t (:foreground ,fg-red :inverse-video t))))
+ `(shr-h1 ((t (:inherit eighters-title-1))))
+ `(shr-h2 ((t (:inherit eighters-title-2))))
+ `(shr-h3 ((t (:inherit eighters-title-3))))
+ `(shr-h4 ((t (:inherit eighters-title-4))))
+ `(shr-h5 ((t (:inherit eighters-title-5))))
+ `(shr-h6 ((t (:inherit eighters-title-6))))
+ `(success ((t (:foreground ,fg-blue :weight bold))))
+ `(tab-bar ((t (:background ,bg-hl-dimmer :inherit eighters-ui))))
+ `(tab-bar-tab ((t (:weight bold :box (:style released-button) :inherit tab-bar))))
+ `(tab-bar-tab-inactive ((t (:foreground ,fg-dimmer :weight normal :box (:style pressed-button) :inherit tab-bar-tab))))
+ `(tab-line ((t (:inherit tab-bar :height 0.9))))
+ `(tab-line-tab-current ((t (:inherit (tab-line-tab tab-bar-tab)))))
+ `(tab-line-tab-inactive ((t (:inherit (tab-line-tab tab-bar-tab-inactive)))))
+ `(textsec-suspicious ((t (:background ,bg-red))))
+ `(trailing-whitespace ((t (:background ,bg-red))))
+ `(transient-argument ((t :weight bold :inherit font-lock-string-face)))
+ `(transient-key ((t :inherit help-key-binding)))
+ `(transient-key-exit ((t :inherit (bold transient-key))))
+ `(transient-key-return ((t :inherit (bold transient-key))))
+ `(transient-key-stay ((t :inherit transient-key)))
+ `(transient-unreachable-key ((t :inherit (shadow help-key-binding))))
+ `(vc-dir-directory ((t (:inherit dired-directory))))
+ `(vc-dir-file ((t (:inherit default))))
+ `(vc-dir-header ((t (:foreground ,fg-blue-subtle))))
+ `(vc-dir-header-value ((t (:foreground ,fg-dim))))
+ `(vc-dir-mark-indicator ((t (:inherit dired-mark))))
+ `(vc-dir-status-edited ((t (:foreground ,fg-yellow))))
+ `(vertical-border ((t (:foreground ,bg-hl))))
+ `(warning ((t (:foreground ,fg-yellow :weight bold))))
+ `(whitespace-hspace ((t (:weight bold :inherit whitespace-space))))
+ `(whitespace-indentation ((t (:background ,bg-yellow-dim :foreground ,fg-red))))
+ `(whitespace-newline ((t (:foreground ,fg-blue-dim))))
+ `(whitespace-space ((t (:background ,bg-blue-dimmer :foreground ,fg-blue-dim))))
+ `(whitespace-space-after-tab ((t (:inherit whitespace-indentation))))
+ `(whitespace-tab ((t (:inherit whitespace-space))))
+ `(whitespace-trailing ((t (:background ,bg-red-dim :foreground ,fg-yellow :weight bold))))
+ `(widget-field ((t (:background ,bg-hl-dim))))
+;;;; Diff faces.
+ `(diff-header ((t (:background ,bg-hl-dimmer :foreground ,fg-dim))))
+ `(diff-file-header ((t (:background ,bg-hl-dimmer :foreground ,fg :weight bold))))
+ `(diff-hunk-header ((t (:background ,bg-hl-dim :foreground ,fg-dim))))
+ `(diff-function ((t (:background ,bg-hl-dim :weight bold))))
+ `(diff-context ((t :foreground ,fg-dim)))
+ `(diff-removed ((t (:background ,bg-red-dimmer))))
+ `(diff-refine-removed ((t (:background ,bg-red))))
+ `(diff-indicator-removed ((t (:foreground ,fg-red :inherit diff-removed))))
+ `(diff-added ((t :background ,bg-blue-dimmer)))
+ `(diff-refine-added ((t (:background ,bg-blue))))
+ `(diff-indicator-added ((t (:foreground ,fg-blue :inherit diff-added))))
+ `(diff-changed ((t :background ,bg-yellow-dimmer)))
+ `(diff-refine-changed ((t (:background ,bg-yellow))))
+ `(diff-indicator-changed ((t (:foreground ,fg-yellow :inherit diff-changed))))
+ `(ediff-even-diff-A ((t (:background ,bg-hl-dimmer))))
+ `(ediff-even-diff-B ((t (:background ,bg-hl-dimmer))))
+ `(ediff-even-diff-C ((t (:background ,bg-hl-dimmer))))
+ `(ediff-even-diff-Ancestor ((t (:background ,bg-hl-dimmer))))
+ `(ediff-odd-diff-A ((t (:background ,bg-hl-dimmer))))
+ `(ediff-odd-diff-B ((t (:background ,bg-hl-dimmer))))
+ `(ediff-odd-diff-C ((t (:background ,bg-hl-dimmer))))
+ `(ediff-odd-diff-Ancestor ((t (:background ,bg-hl-dimmer))))
+ `(ediff-current-diff-A ((t (:inherit diff-removed))))
+ `(ediff-current-diff-B ((t (:inherit diff-added))))
+ `(ediff-current-diff-C ((t (:inherit diff-changed))))
+ `(ediff-current-diff-Ancestor ((t (:background ,bg-magenta-dimmer))))
+ `(ediff-fine-diff-A ((t (:inherit diff-refine-removed))))
+ `(ediff-fine-diff-B ((t (:inherit diff-refine-added))))
+ `(ediff-fine-diff-C ((t (:inherit diff-refine-changed))))
+ `(ediff-fine-diff-Ancestor ((t (:background ,bg-magenta))))
+ `(smerge-markers ((t (:background ,bg-hl-dim :foreground ,fg-dim))))
+ `(smerge-base ((t (:background ,bg-yellow-dim))))
+ ;; Do *NOT* customize smerge-refined-changed, because that tells
+ ;; smerge to use it for both removed and added sections.
+ `(smerge-upper ((t (:background ,bg-red-dim))))
+ `(smerge-refined-removed ((t (:inherit diff-refine-removed))))
+ `(smerge-lower ((t (:background ,bg-blue-dim))))
+ `(smerge-refined-added ((t (:inherit diff-refine-added))))
+;;; Third-party faces.
+ `(diff-hl-delete ((t (:foreground ,fg-red :background ,bg-red))))
+ `(diff-hl-insert ((t (:foreground ,fg-blue :background ,bg-blue))))
+ `(diff-hl-change ((t (:foreground ,fg-yellow :background ,bg-yellow))))
+ `(forge-dimmed ((t (:inherit shadow))))
+ `(forge-post-author ((t (:inherit eighters-identity))))
+ `(forge-post-date ((t (:inherit eighters-date))))
+ `(forge-pullreq-merged ((t (:inherit forge-dimmed))))
+ `(forge-pullreq-open ((t ())))
+ `(forge-pullreq-rejected ((t (:inherit forge-dimmed :strike-through t))))
+ `(forge-topic-done ((t ())))
+ `(forge-topic-slug-completed ((t (:foreground ,fg-blue-dim))))
+ `(forge-topic-slug-open ((t (:foreground ,fg-red-subtle))))
+ `(forge-topic-slug-saved ((t (:foreground ,fg-yellow))))
+ `(forge-topic-slug-unplanned ((t (:inherit forge-dimmed :strike-through t))))
+ `(forge-topic-slug-unread ((t ())))
+ `(markdown-blockquote-face ((t (:inherit eighters-citation-1))))
+ `(markdown-code-face ((t (:inherit fixed-pitch-serif))))
+ `(markdown-gfm-checkbox-face ((t :inherit eighters-checkbox)))
+ `(markdown-header-face-1 ((t (:inherit eighters-title-1))))
+ `(markdown-header-face-2 ((t (:inherit eighters-title-2))))
+ `(markdown-header-face-3 ((t (:inherit eighters-title-3))))
+ `(markdown-header-face-4 ((t (:inherit eighters-title-4))))
+ `(markdown-header-face-5 ((t (:inherit eighters-title-5))))
+ `(markdown-header-face-6 ((t (:inherit eighters-title-6))))
+ `(markdown-inline-code-face ((t (:background ,bg-hl-dim :foreground ,fg-magenta :inherit markdown-code-face))))
+ `(markdown-line-break-face ((t (:background ,bg-hl-dimmer :underline t :inherit markdown-markup-face))))
+ `(markdown-pre-face ((t (:background ,bg-hl-dimmer :inherit markdown-code-face :extend t))))
+ `(markdown-url-face ((t (:inherit (markdown-markup-face markdown-plain-url-face)))))
+ `(which-key-group-description-face ((t (:foreground ,fg-green-dim))))
+ `(which-key-key-face ((t :weight bold :inherit help-key-binding)))
+;;;; Magit.
+ `(magit-blame-highlight ((t (:foreground ,fg-blue-dim :background ,bg-blue-dimmer))))
+ `(magit-branch-current ((t (:inverse-video t :inherit magit-branch-local))))
+ `(magit-branch-local ((t (:foreground ,fg-blue))))
+ `(magit-branch-remote ((t (:foreground ,fg-green-dim))))
+ `(magit-branch-remote-head ((t (:inverse-video t :inherit magit-branch-remote))))
+ `(magit-keyword ((t (:inherit eighters-metadata))))
+ `(magit-process-ng ((t (:inherit error))))
+ `(magit-process-ok ((t (:inherit success))))
+ `(magit-log-date ((t (:inherit eighters-date))))
+ `(magit-hash ((t (:inherit shadow))))
+ `(magit-log-author ((t (:inherit eighters-identity))))
+ `(magit-log-graph ((t (:inherit eighters-markup))))
+ `(magit-mode-line-process ((t (:inherit compilation-mode-line-run))))
+ ;; FIXME: Teach magit-section overlays to de-prioritize their
+ ;; :background so that tags can have one.
+ `(magit-tag ((t (:foreground ,fg-yellow))))
+;;;;; Section backgrounds.
+ `(magit-section-highlight ((t :background ,bg-hl-dimmer)))
+ `(magit-diff-revision-summary ((t (:inherit (magit-diff-hunk-heading eighters-title-1)))))
+ `(magit-section-heading ((t (:inherit eighters-title-2))))
+ `(magit-diff-file-heading ((t (:inherit eighters-title-3))))
+ `(magit-diff-context ((t (:foreground ,fg-dim))))
+ `(magit-diff-context-highlight ((t (:background ,bg-hl-dimmer :inherit magit-diff-context))))
+ `(magit-diff-hunk-heading ((t (:background ,bg-hl-dim))))
+ `(magit-diff-hunk-heading-highlight ((t (:background ,bg-hl))))
+;;;;; Selections.
+ `(magit-section-heading-selection ((t (:foreground ,fg-cyan :background ,bg-cyan-dim))))
+ `(magit-diff-file-heading-selection ((t (:foreground ,fg-cyan :background ,bg-cyan-dim))))
+ `(magit-diff-hunk-heading-selection ((t (:foreground ,fg-cyan :background ,bg-cyan-dim))))
+ `(magit-diff-lines-heading ((t (:foreground ,fg-cyan :inverse-video t))))
+;;;;; Diffs.
+ `(magit-diff-base ((t (:foreground ,fg-dim :inherit diff-changed))))
+ `(magit-diff-base-highlight ((t (:background ,bg-yellow-dim))))
+ `(magit-diff-removed ((t (:foreground ,fg-dim :inherit diff-removed))))
+ `(magit-diff-removed-highlight ((t (:background ,bg-red-dim))))
+ `(magit-diffstat-removed ((t (:foreground ,fg-red))))
+ `(magit-diff-added ((t (:foreground ,fg-dim :inherit diff-added))))
+ `(magit-diff-added-highlight ((t (:background ,bg-blue-dim))))
+ `(magit-diffstat-added ((t (:foreground ,fg-blue))))
+;;;;; Git commit.
+ `(git-commit-comment-action ((t (:inherit eighters-title-3))))
+ `(git-commit-comment-branch-local ((t (:inherit magit-branch-local))))
+ `(git-commit-comment-branch-remote ((t (:inherit magit-branch-remote))))
+ `(git-commit-comment-file ((t (:foreground ,fg-dim))))
+ `(git-commit-comment-heading ((t (:inherit eighters-title-2))))
+ `(git-commit-keyword ((t (:inherit eighters-metadata))))
+ `(git-commit-known-pseudo-header ((t (:inherit message-header-name))))
+ `(git-commit-pseudo-header ((t (:inherit eighters-identity))))
+ `(git-commit-summary ((t (:inherit eighters-title-1)))))
+ (custom-theme-set-variables
+ 'eighters
+ '(compilation-enter-directory-face 'dired-directory)
+ `(compilation-leave-directory-face '(:foreground ,fg-blue-dim))))
+
+(provide-theme 'eighters)