;; -*- 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-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-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)))) `(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 (:background ,bg-hl :foreground ,fg-yellow-dim :weight bold)))) `(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)))) `(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-unreachable-key ((t :inherit (shadow help-key-binding)))) `(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-post-author ((t (:inherit eighters-identity)))) `(forge-post-date ((t (:inherit eighters-date)))) `(markdown-blockquote-face ((t (:inherit eighters-citation-1)))) `(markdown-code-face ((t (:inherit fixed-pitch-serif)))) `(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-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)