diff options
Diffstat (limited to '.config/emacs/eighters-theme.el')
| -rw-r--r-- | .config/emacs/eighters-theme.el | 600 |
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) |
