eighters-theme.el (34463B)
1 ;; -*- lexical-binding: t -*- 2 3 (require 'color) 4 (require 'compile) ; compilation-*-directory-face 5 (require-theme 'modus-themes) 6 7 (deftheme eighters 8 "Eighters gonna eight.") 9 10 (defun eighters-hsl-to-hex (h s l) 11 (apply 12 'color-rgb-to-hex 13 `(,@(color-hsl-to-rgb h s l) 2))) 14 15 (defun eighters-decline-hue (name light-step) 16 (interactive 17 (list (read-color "Color to decline? ") 18 (read-number "Light step? (1–100) "))) 19 (pcase-let* ((`(,r ,g ,b) (color-name-to-rgb name)) 20 (`(,h _ _) (color-rgb-to-hsl r g b))) 21 (let ((variants (seq-map 22 (lambda (l) 23 (cons l (eighters-hsl-to-hex h 1.0 (/ l 100.0)))) 24 (number-sequence 0 100 light-step))) 25 (buf (format "*%s variants*" name))) 26 (with-current-buffer (get-buffer-create buf) 27 (pcase-dolist (`(,l . ,hex) variants) 28 (let ((cr (modus-themes-contrast "#fff" hex))) 29 (when (> cr 7.0) 30 (insert 31 (propertize (format "%s %3s\t%6.3f\n" hex l cr) 32 'face `(:background ,hex :extend t)))))) 33 (pcase-dolist (`(,l . ,hex) variants) 34 (let ((cr (modus-themes-contrast "#000" hex))) 35 (when (> cr 7.0) 36 (insert 37 (propertize (format "%s %3s\t%6.3f\n" hex l cr) 38 'face `(:foreground ,hex))))))) 39 (pop-to-buffer buf)))) 40 41 (defvar eighters-hues 42 '((red . "brown2") 43 (green . "chartreuse2") 44 (yellow . "gold") 45 (blue . "steelblue1") 46 (magenta . "violet") 47 (cyan . "cadetblue2"))) 48 49 (defvar eighters-palette 50 '((bg "#000") (bg-hl-dimmer "#0f0f0f") (bg-hl-dim "#181818") (bg-hl "#222") 51 (fg-red "#ed5e5e") (fg-red-dim "#ba5e5e") (fg-red-subtle "#f4a3a3") 52 (bg-red "#4c0000") (bg-red-dim "#300000") (bg-red-dimmer "#1e0000") 53 (fg-green "#a5ed5e") (fg-green-dim "#8bba5e") (fg-green-subtle "#cbf4a3") 54 (bg-green "#122600") (bg-green-dim "#0b1600") (bg-green-dimmer "#060c00") 55 (fg-yellow "#edd65e") (fg-yellow-dim "#baab5e") (fg-yellow-subtle "#f4e8a3") 56 (bg-yellow "#262000") (bg-yellow-dim "#161300") (bg-yellow-dimmer "#0c0a00") 57 (fg-blue "#5eaced") (fg-blue-dim "#5e90ba") (fg-blue-subtle "#a3cff4") 58 (bg-blue "#00223f") (bg-blue-dim "#001426") (bg-blue-dimmer "#000b14") 59 (fg-magenta "#ed5eed") (fg-magenta-dim "#ba5eba") (fg-magenta-subtle "#f4a3f4") 60 (bg-magenta "#420042") (bg-magenta-dim "#280028") (bg-magenta-dimmer "#190019") 61 (fg-cyan "#5edfed") (fg-cyan-dim "#5eb1ba") (fg-cyan-subtle "#a3edf4") 62 (bg-cyan "#002428") (bg-cyan-dim "#001416") (bg-cyan-dimmer "#000b0c") 63 (fg "#fff") (fg-dim "#bbb") (fg-dimmer "#888"))) 64 65 (defun eighters--step-while (init step predicate) 66 (let ((result init) 67 (next init)) 68 (while (funcall predicate (cl-incf next step)) 69 (setq result next)) 70 result)) 71 72 (defun eighters--brightest-bg (hue contrast-min) 73 (eighters-hsl-to-hex 74 hue 1 75 (eighters--step-while 76 0 .005 77 (lambda (luminance) 78 (let ((candidate (eighters-hsl-to-hex hue 1 luminance))) 79 (> (modus-themes-contrast "#fff" candidate) contrast-min)))))) 80 81 (defun eighters-set-palette () 82 (interactive) 83 (pcase-dolist (`(,hue-sym . ,hue-name) eighters-hues) 84 (let ((hue (car (apply 'color-rgb-to-hsl (color-name-to-rgb hue-name))))) 85 (setf 86 (eighters-color 'fg hue-sym nil) (eighters-hsl-to-hex hue .8 .65) 87 (eighters-color 'fg hue-sym 'dim) (eighters-hsl-to-hex hue .4 .55) 88 (eighters-color 'fg hue-sym 'subtle) (eighters-hsl-to-hex hue .8 .8) 89 (eighters-color 'bg hue-sym nil) (eighters--brightest-bg hue 16) 90 (eighters-color 'bg hue-sym 'dim) (eighters--brightest-bg hue 18.5) 91 (eighters-color 'bg hue-sym 'dimmer) (eighters--brightest-bg hue 19.75)))) 92 (load-theme 'eighters t)) 93 94 (defun eighters-showcase--insert (&rest _) 95 (erase-buffer) 96 (pcase-dolist (`(,sym ,color) 97 eighters-palette) 98 (pcase-let* ((`(,r ,g ,b) (color-name-to-rgb color)) 99 (`(,h ,s ,l) (color-rgb-to-hsl r g b))) 100 (let (bg fg face) 101 (if (string-prefix-p "fg" (symbol-name sym)) 102 (setq fg color 103 bg "#000") 104 (setq bg color 105 fg "#fff")) 106 (setq face `(:foreground ,fg :background ,bg :extend t)) 107 (insert 108 (propertize (format "%-16s\t(%.3f %.3f %.3f) (%.3f %.3f %.3f)\t\t%.3f\n" 109 sym r g b h s l (modus-themes-contrast fg bg)) 110 'face face)))))) 111 112 (defun eighters-showcase () 113 (interactive) 114 (let ((buf (get-buffer-create "*Eighters palette*"))) 115 (with-current-buffer buf 116 (eighters-showcase--insert) 117 (setq-local revert-buffer-function 'eighters-showcase--insert) 118 (pop-to-buffer buf)))) 119 120 (defun eighters-serialize () 121 (interactive) 122 (let ((blacks '(bg bg-hl-dimmer bg-hl-dim bg-hl)) 123 (colors '(red green yellow blue magenta cyan)) 124 (whites '(fg fg-dim fg-dimmer)) 125 (beg (point)) 126 (format-sym 127 (lambda (sym) 128 (format "(%s \"%s\")" 129 sym (car (alist-get sym eighters-palette)))))) 130 (insert 131 "(defvar eighters-palette\n'(" 132 (string-join (seq-map format-sym blacks) " ") 133 "\n") 134 (let ((beg (point))) 135 (dolist (hue colors) 136 (dolist (template '("fg-%s" "fg-%s-dim" "fg-%s-subtle")) 137 (insert (funcall format-sym (intern (format template hue))))) 138 (insert "\n") 139 (dolist (template '("bg-%s" "bg-%s-dim" "bg-%s-dimmer")) 140 (insert (funcall format-sym (intern (format template hue))))) 141 (insert "\n")) 142 (align-regexp beg (point) "\\(\\s-*\\)\\(\"[^)]\\|(\\)" 1 1 t)) 143 (insert 144 (string-join (seq-map format-sym whites) " ") 145 "))\n") 146 (indent-region beg (point)))) 147 148 (defun eighters-color (symbol) 149 (car (alist-get symbol eighters-palette))) 150 151 (defun eighters--sym (xground hue qualifier) 152 (intern 153 (apply 'concat `( ,(symbol-name xground) "-" 154 ,(symbol-name hue) 155 ,@(when qualifier `("-" ,(symbol-name qualifier))))))) 156 157 (defun eighters-color-set (xground hue qualifier value) 158 (let ((sym (eighters--sym xground hue qualifier))) 159 (setf (car (alist-get sym eighters-palette)) value))) 160 161 (gv-define-simple-setter eighters-color eighters-color-set) 162 163 (defface eighters-button nil 164 "Face for elements that can be \"pushed\" with RET.") 165 (defface eighters-checkbox nil 166 "Face for text that represents togglable boxes.") 167 (defface eighters-citation-1 nil 168 "Face for level 1 citations.") 169 (defface eighters-citation-2 nil 170 "Face for level 2 citations.") 171 (defface eighters-citation-3 nil 172 "Face for level 3 citations.") 173 (defface eighters-citation-4 nil 174 "Face for level 4 citations.") 175 (defface eighters-citation-5 nil 176 "Face for level 5 citations.") 177 (defface eighters-citation-6 nil 178 "Face for level 6 citations.") 179 (defface eighters-date nil 180 "Face for text that describes dates.") 181 (defface eighters-identity nil 182 "Face for names of persons.") 183 (defface eighters-markup nil 184 "Face for text that describes \"structure\" rather than content.") 185 (defface eighters-metadata nil 186 "Face for extra context surrounding something of interest.") 187 (defface eighters-title-1 nil 188 "Face for level 1 headings.") 189 (defface eighters-title-2 nil 190 "Face for level 2 headings.") 191 (defface eighters-title-3 nil 192 "Face for level 3 headings.") 193 (defface eighters-title-4 nil 194 "Face for level 4 headings.") 195 (defface eighters-title-5 nil 196 "Face for level 5 headings.") 197 (defface eighters-title-6 nil 198 "Face for level 6 headings.") 199 (defface eighters-title-7 nil 200 "Face for level 7 headings.") 201 (defface eighters-title-8 nil 202 "Face for level 8 headings.") 203 (defface eighters-ui-input nil 204 "Face for UI elements that invite user interaction.") 205 (defface eighters-ui-intangible nil 206 "Face for UI elements that point cannot reach.") 207 208 (defmacro eighters-with-palette (&rest body) 209 `(let ,eighters-palette ,@body)) 210 211 (eighters-with-palette 212 (custom-theme-set-faces 213 'eighters 214 ;;; Theme faces. 215 `(eighters-button ((t (:box (:line-width (-1 . -1) :style released-button) :inherit eighters-ui-input)))) 216 `(eighters-checkbox ((t (:background ,bg-hl-dim :foreground ,fg-blue-dim)))) 217 `(eighters-citation-1 ((t (:foreground ,fg-cyan-dim)))) 218 `(eighters-citation-2 ((t (:foreground ,fg-green-dim)))) 219 `(eighters-citation-3 ((t (:foreground ,fg-yellow-dim)))) 220 `(eighters-citation-4 ((t (:foreground ,fg-red-dim)))) 221 `(eighters-citation-5 ((t (:foreground ,fg-magenta-dim)))) 222 `(eighters-citation-6 ((t (:foreground ,fg-blue-dim)))) 223 `(eighters-date ((t (:foreground ,fg-magenta-dim)))) 224 `(eighters-identity ((t (:foreground ,fg-red-subtle)))) 225 `(eighters-markup ((t (:foreground ,fg-dim)))) 226 `(eighters-metadata ((t (:foreground ,fg-magenta-dim)))) 227 `(eighters-title-1 ((t (:foreground ,fg-cyan-subtle :weight bold :height 1.28 :inherit variable-pitch)))) 228 `(eighters-title-2 ((t (:foreground ,fg-green-subtle :weight bold :height 1.20 :inherit variable-pitch)))) 229 `(eighters-title-3 ((t (:foreground ,fg-yellow-subtle :weight bold :height 1.12 :inherit variable-pitch)))) 230 `(eighters-title-4 ((t (:foreground ,fg-red-subtle :weight bold :height 1.04 :inherit variable-pitch)))) 231 `(eighters-title-5 ((t (:foreground ,fg-magenta-subtle :weight bold :inherit variable-pitch)))) 232 `(eighters-title-6 ((t (:foreground ,fg-blue-subtle :weight bold :inherit variable-pitch)))) 233 `(eighters-title-7 ((t (:foreground ,fg-cyan-subtle :weight bold :inherit variable-pitch)))) 234 `(eighters-title-8 ((t (:foreground ,fg-green-subtle :weight bold :inherit variable-pitch)))) 235 `(eighters-ui-input ((t (:background ,bg-blue-dim :foreground ,fg-blue-subtle)))) 236 `(eighters-ui-intangible ((t (:inherit variable-pitch)))) 237 ;;; Standard faces. 238 `(ansi-color-black ((t (:foreground ,bg :background ,bg)))) 239 `(ansi-color-red ((t (:foreground ,fg-red :background ,bg-red-dim)))) 240 `(ansi-color-green ((t (:foreground ,fg-green :background ,bg-green-dim)))) 241 `(ansi-color-yellow ((t (:foreground ,fg-yellow :background ,bg-yellow-dim)))) 242 `(ansi-color-blue ((t (:foreground ,fg-blue :background ,bg-blue-dim)))) 243 `(ansi-color-magenta ((t (:foreground ,fg-magenta :background ,bg-magenta-dim)))) 244 `(ansi-color-cyan ((t (:foreground ,fg-cyan :background ,bg-cyan-dim)))) 245 `(ansi-color-white ((t (:foreground ,fg-dim :background ,fg-dim)))) 246 `(ansi-color-bright-black ((t (:foreground ,bg-hl :background ,bg-hl)))) 247 `(ansi-color-bright-red ((t (:foreground ,fg-red-subtle :background ,bg-red)))) 248 `(ansi-color-bright-green ((t (:foreground ,fg-green-subtle :background ,bg-green)))) 249 `(ansi-color-bright-yellow ((t (:foreground ,fg-yellow-subtle :background ,bg-yellow)))) 250 `(ansi-color-bright-blue ((t (:foreground ,fg-blue-subtle :background ,bg-blue)))) 251 `(ansi-color-bright-magenta ((t (:foreground ,fg-magenta-subtle :background ,bg-magenta)))) 252 `(ansi-color-bright-cyan ((t (:foreground ,fg-cyan-subtle :background ,bg-cyan)))) 253 `(ansi-color-bright-white ((t (:foreground ,fg :background ,fg)))) 254 `(button ((t (:inherit eighters-button)))) 255 `(calendar-today ((t (:inverse-video t)))) 256 `(change-log-date ((t (:inherit eighters-date)))) 257 `(change-log-email ((t (:inherit (eighters-identity fixed-pitch-serif))))) 258 `(change-log-name ((t (:inherit eighters-identity)))) 259 `(comint-highlight-prompt ((t (:weight bold :inherit eighters-ui-input)))) 260 `(compilation-column-number ((t (:inherit eighters-metadata)))) 261 `(compilation-line-number ((t (:inherit eighters-metadata)))) 262 `(compilation-mode-line-exit ((t (:inherit compilation-info)))) 263 `(compilation-mode-line-fail ((t (:inherit compilation-error)))) 264 `(compilation-mode-line-run ((t (:inherit compilation-warning)))) 265 `(completions-annotations ((t (:inherit font-lock-doc-face)))) 266 `(completions-common-part ((t (:inherit shadow)))) 267 `(completions-first-difference ((t (:foreground ,fg-magenta :weight bold)))) 268 `(completions-highlight ((t (:background ,bg-magenta)))) 269 `(custom-button ((t (:inherit eighters-button)))) 270 `(custom-comment ((t (:background ,bg-hl-dim :foreground ,fg-dim)))) 271 `(custom-variable-tag ((t (:inherit eighters-title-3)))) 272 `(default ((t (:background ,bg :foreground ,fg)))) 273 `(dired-broken-symlink ((t (:background ,bg-red :foreground ,fg-yellow :weight bold)))) 274 `(dired-directory ((t (:weight bold :foreground ,fg-blue)))) 275 `(dired-header ((t (:inherit eighters-title-1)))) 276 `(dired-special ((t (:foreground ,fg-yellow-dim)))) 277 `(eglot-highlight-symbol-face ((t (:background ,bg-cyan-dim :underline ,fg-cyan-dim)))) 278 `(eldoc-highlight-function-argument ((t (:background ,bg-red-dim :foreground ,fg-magenta :inverse-video t :weight bold)))) 279 `(elisp-bound-variable ((t (:slant italic :inherit font-lock-variable-use-face)))) 280 `(elisp-free-variable ((t (:foreground ,fg-yellow-subtle)))) 281 `(elisp-shadowed-variable ((t (:inherit elisp-shadowing-variable)))) 282 `(elisp-shadowing-variable ((t (:inherit (elisp-free-variable elisp-binding-variable))))) 283 `(emacs-authors-author ((t (:inherit (bold eighters-identity variable-pitch))))) 284 `(emacs-authors-descriptor ((t (:inherit (shadow variable-pitch))))) 285 `(emacs-news-does-not-need-documentation ((t (:foreground ,fg-dimmer)))) 286 `(emacs-news-is-documented ((t (:foreground ,fg-blue-dim)))) 287 `(erc-button ((t (:inherit link)))) 288 `(erc-current-nick-face ((t (:weight bold :inherit eighters-identity)))) 289 `(erc-direct-msg-face ((t (:inherit font-lock-doc-face)))) 290 `(erc-error-face ((t (:inherit error)))) 291 `(erc-input-face ((t (:inherit eighters-citation-1)))) 292 `(erc-keyword-face ((t (:inherit font-lock-keyword-face)))) 293 `(erc-my-nick-face ((t (:foreground ,fg-red-dim)))) 294 `(erc-nick-default-face ((t (:inherit eighters-identity)))) 295 `(erc-nick-msg-face ((t (:weight bold :inherit eighters-identity)))) 296 `(erc-notice-face ((t (:inherit font-lock-comment-face)))) 297 `(erc-prompt-face ((t (:inherit minibuffer-prompt)))) 298 `(erc-timestamp-face ((t (:inherit eighters-date)))) 299 `(error ((t :foreground ,fg-red :weight bold))) 300 `(escape-glyph ((t (:foreground ,fg-red-dim :inherit fixed-pitch-serif)))) 301 `(eww-invalid-certificate ((t (:inherit error)))) 302 `(eww-valid-certificate ((t (:inherit success)))) 303 `(flymake-error ((t (:underline (:color ,fg-red :style wave))))) 304 `(flymake-note ((t (:underline (:color ,fg-blue :style wave))))) 305 `(flymake-warning ((t (:underline (:color ,fg-yellow :style wave))))) 306 `(flyspell-duplicate ((t (:underline (:color ,fg-yellow :style wave))))) 307 `(flyspell-incorrect ((t (:underline (:color ,fg-red :style wave))))) 308 `(font-lock-builtin-face ((t (:foreground ,fg-blue)))) 309 `(font-lock-comment-face ((t (:foreground ,fg-dim :slant italic)))) 310 `(font-lock-constant-face ((t (:foreground ,fg-magenta)))) 311 `(font-lock-doc-face ((t (:foreground ,fg-green-dim :slant italic)))) 312 `(font-lock-function-call-face ((t (:foreground ,fg-blue-subtle)))) 313 `(font-lock-function-name-face ((t (:foreground ,fg-blue :weight bold)))) 314 `(font-lock-keyword-face ((t (:foreground ,fg-cyan :weight bold)))) 315 `(font-lock-negation-char-face ((t (:inherit warning)))) 316 `(font-lock-preprocessor-face ((t (:foreground ,fg-blue :inherit fixed-pitch-serif)))) 317 `(font-lock-regexp-grouping-backslash ((t (:foreground ,fg-yellow-dim)))) 318 `(font-lock-regexp-grouping-construct ((t (:foreground ,fg-yellow :weight bold)))) 319 `(font-lock-string-face ((t (:foreground ,fg-magenta-dim)))) 320 `(font-lock-type-face ((t (:foreground ,fg-green)))) 321 `(font-lock-variable-name-face ((t (:foreground ,fg-yellow)))) 322 `(font-lock-warning-face ((t (:inherit warning)))) 323 `(fringe ((t (:background ,bg-hl-dimmer :foreground ,fg-dimmer)))) 324 `(gnus-group-mail-1 ((t (:foreground ,fg-yellow :weight bold)))) 325 `(gnus-group-mail-1-empty ((t (:foreground ,fg-yellow-dim)))) 326 `(gnus-group-mail-3 ((t (:foreground ,fg-green :weight bold)))) 327 `(gnus-group-mail-3-empty ((t (:foreground ,fg-green-dim)))) 328 `(gnus-group-mail-low ((t (:foreground ,fg-dim :weight bold)))) 329 `(gnus-group-mail-low-empty ((t (:foreground ,fg-dimmer)))) 330 `(gnus-group-news-3 ((t (:foreground ,fg-magenta :weight bold)))) 331 `(gnus-group-news-3-empty ((t (:foreground ,fg-magenta-dim)))) 332 `(gnus-button ((t (:inherit link)))) 333 `(gnus-cite-1 ((t (:inherit eighters-citation-1)))) 334 `(gnus-cite-2 ((t (:inherit eighters-citation-2)))) 335 `(gnus-cite-3 ((t (:inherit eighters-citation-3)))) 336 `(gnus-cite-4 ((t (:inherit eighters-citation-4)))) 337 `(gnus-cite-5 ((t (:inherit eighters-citation-5)))) 338 `(gnus-cite-6 ((t (:inherit eighters-citation-6)))) 339 `(gnus-cite-7 ((t (:inherit eighters-citation-1)))) 340 `(gnus-cite-8 ((t (:inherit eighters-citation-2)))) 341 `(gnus-cite-9 ((t (:inherit eighters-citation-3)))) 342 `(gnus-cite-10 ((t (:inherit eighters-citation-4)))) 343 `(gnus-cite-11 ((t (:inherit eighters-citation-5)))) 344 `(gnus-header ((t ()))) 345 `(gnus-header-content ((t (:foreground ,fg-dim :inherit gnus-header)))) 346 `(gnus-header-from ((t (:inherit (eighters-identity gnus-header))))) 347 `(gnus-header-name ((t (:inherit (eighters-ui-intangible eighters-ui-input gnus-header))))) 348 `(gnus-header-newsgroups ((t (:inherit (warning gnus-header))))) 349 `(gnus-header-subject ((t (:inherit (eighters-title-1 gnus-header))))) 350 `(gnus-server-closed ((t (:inherit shadow)))) 351 `(gnus-server-cloud ((t (:foreground ,fg-dimmer)))) 352 `(gnus-server-cloud-host ((t (:foreground ,fg-dim :underline t)))) 353 `(gnus-server-denied ((t (:inherit error)))) 354 `(gnus-server-offline ((t (:inherit error)))) 355 `(gnus-server-opened ((t (:inherit success)))) 356 `(gnus-signature ((t (:inherit font-lock-comment-face)))) 357 `(gnus-summary-cancelled ((t (:strike-through t :inherit shadow)))) 358 `(gnus-summary-normal-ancient ((t (:foreground ,fg-dim)))) 359 `(gnus-summary-normal-read ((t (:foreground ,fg-dim :slant italic)))) 360 `(gnus-summary-normal-ticked ((t (:foreground ,fg-yellow-dim)))) 361 `(gnus-summary-selected ((t (:inherit highlight)))) 362 `(header-line ((t (:background ,bg-hl :inherit eighters-ui-intangible)))) 363 `(help-key-binding ((t (:background ,bg-hl-dimmer :foreground ,fg-magenta :inherit fixed-pitch-serif)))) 364 `(hi-aquamarine ((t (:foreground ,fg-cyan :inverse-video t)))) 365 `(hi-blue ((t (:foreground ,fg-blue :inverse-video t)))) 366 `(hi-blue-b ((t (:foreground ,fg-blue :weight bold)))) 367 `(hi-green ((t (:foreground ,fg-green :inverse-video t)))) 368 `(hi-green-b ((t (:foreground ,fg-green :weight bold)))) 369 `(hi-pink ((t (:foreground ,fg-red-subtle :inverse-video t)))) 370 `(hi-red-b ((t (:foreground ,fg-red :weight bold)))) 371 `(hi-salmon ((t (:foreground ,fg-red-dim :inverse-video t)))) 372 `(hi-yellow ((t (:foreground ,fg-yellow :inverse-video t)))) 373 `(highlight ((t (:background ,bg-hl-dim)))) 374 `(icomplete-selected-match ((t (:inherit completions-highlight)))) 375 `(info-title-1 ((t (:inherit eighters-title-1)))) 376 `(info-title-2 ((t (:inherit eighters-title-2)))) 377 `(info-title-3 ((t (:inherit eighters-title-3)))) 378 `(info-title-4 ((t (:inherit eighters-title-4)))) 379 `(isearch ((t (:background ,bg-red-dim :foreground ,fg-magenta :inverse-video t)))) 380 `(isearch-fail ((t (:background ,bg-red :weight bold)))) 381 `(isearch-group-1 ((t (:background ,bg-red :foreground ,fg-red :inverse-video t)))) 382 `(isearch-group-2 ((t (:background ,bg-red :foreground ,fg-blue :inverse-video t)))) 383 `(lazy-highlight ((t (:background ,bg-cyan :foreground ,fg-cyan :inverse-video t)))) 384 `(link ((t (:foreground ,fg-blue :underline t)))) 385 `(link-visited ((t (:foreground ,fg-magenta-dim :underline t)))) 386 `(log-edit-header ((t (:inherit minibuffer-prompt)))) 387 `(log-edit-headers-separator ((t (:inherit separator-line)))) 388 `(log-edit-summary ((t (:inherit eighters-title-1)))) 389 `(Man-overstrike ((t (:foreground ,fg-cyan :inherit bold)))) 390 `(match ((t (:background ,bg-cyan-dim :underline ,fg-cyan-dim)))) 391 `(message-cited-text-1 ((t (:inherit eighters-citation-1)))) 392 `(message-cited-text-2 ((t (:inherit eighters-citation-2)))) 393 `(message-cited-text-3 ((t (:inherit eighters-citation-3)))) 394 `(message-cited-text-4 ((t (:inherit eighters-citation-4)))) 395 `(message-header-cc ((t (:inherit eighters-identity)))) 396 `(message-header-from ((t (:inherit eighters-identity)))) 397 `(message-header-name ((t (:inherit (eighters-ui-intangible eighters-ui-input))))) 398 `(message-header-newsgroups ((t (:inherit warning)))) 399 `(message-header-subject ((t (:inherit eighters-title-1)))) 400 `(message-header-other ((t (:foreground ,fg-dim)))) 401 `(message-header-to ((t (:weight bold :inherit eighters-identity)))) 402 `(message-header-xheader ((t (:inherit font-lock-preprocessor-face)))) 403 `(message-mml ((t (:foreground ,fg-blue :inherit eighters-ui-input)))) 404 `(message-separator ((t (:background ,bg-hl-dim :inherit (eighters-ui-intangible shadow))))) 405 `(message-signature-separator ((t (:inherit message-separator)))) 406 `(minibuffer-prompt ((t (:weight bold :inherit (eighters-ui-input eighters-ui-intangible))))) 407 `(minibuffer-nonselected ((t (:background ,bg-red :foreground ,fg-yellow)))) 408 `(mm-uu-extract ((t (:background ,bg-hl-dimmer)))) 409 `(mode-line ((t (:background ,bg-hl :box (:color ,fg) :inherit eighters-ui-intangible)))) 410 `(mode-line-inactive ((t (:background ,bg-hl-dimmer :foreground ,fg-dimmer :box (:color ,bg-hl-dimmer) :inherit eighters-ui-intangible)))) 411 `(nobreak-space ((t (:background ,bg-magenta-dimmer :underline t :inherit escape-glyph)))) 412 `(outline-1 ((t (:inherit eighters-title-1)))) 413 `(outline-2 ((t (:inherit eighters-title-2)))) 414 `(outline-3 ((t (:inherit eighters-title-3)))) 415 `(outline-4 ((t (:inherit eighters-title-4)))) 416 `(outline-5 ((t (:inherit eighters-title-5)))) 417 `(outline-6 ((t (:inherit eighters-title-6)))) 418 `(outline-7 ((t (:inherit eighters-title-7)))) 419 `(outline-8 ((t (:inherit eighters-title-8)))) 420 `(org-block ((t (:background ,bg-hl-dimmer :inherit fixed-pitch-serif)))) 421 `(org-block-begin-line ((t (:background ,bg-hl-dim :inherit shadow :extend t)))) 422 `(org-block-end-line ((t (:background ,bg-hl-dim :inherit shadow :extend t)))) 423 `(org-checkbox ((t (:inherit eighters-checkbox)))) 424 `(org-code ((t (:background ,bg-hl-dim :inherit fixed-pitch-serif)))) 425 `(org-date ((t (:inherit eighters-date)))) 426 `(org-done ((t (:inherit success)))) 427 `(org-drawer ((t (:inherit shadow)))) 428 `(org-ellipsis ((t (:inherit shadow)))) 429 `(org-footnote ((t (:inherit font-lock-comment-face)))) 430 `(org-macro ((t (:inherit font-lock-preprocessor-face)))) 431 `(org-mode-line-clock ((t (:inherit font-lock-constant-face)))) 432 `(org-special-keyword ((t (:inherit shadow)))) 433 `(org-table ((t (:foreground ,fg-dim :inherit fixed-pitch-serif)))) 434 `(org-tag ((t (:inherit eighters-metadata)))) 435 `(org-todo ((t (:inherit error)))) 436 `(org-verbatim ((t (:background ,bg-hl-dim :foreground ,fg-magenta :inherit fixed-pitch-serif)))) 437 `(package-mark-delete-line ((t (:inherit diff-removed :extend t)))) 438 `(package-mark-install-line ((t (:inherit diff-added :extend t)))) 439 `(region ((t (:background ,bg-cyan)))) 440 `(rst-adornment ((t (:inherit shadow)))) 441 `(rst-block ((t (:inherit (bold rst-adornment))))) 442 `(rst-definition ((t (:inherit font-lock-type-face)))) 443 `(rst-directive ((t (:foreground ,fg-dim)))) 444 `(rst-external ((t (:inherit font-lock-constant-face)))) 445 `(rst-level-1 ((t (:inherit eighters-title-1)))) 446 `(rst-level-2 ((t (:inherit eighters-title-2)))) 447 `(rst-level-3 ((t (:inherit eighters-title-3)))) 448 `(rst-level-4 ((t (:inherit eighters-title-4)))) 449 `(rst-level-5 ((t (:inherit eighters-title-5)))) 450 `(rst-level-6 ((t (:inherit eighters-title-6)))) 451 `(rst-literal ((t (:background ,bg-hl-dim :foreground ,fg-magenta :extend t :inherit fixed-pitch-serif)))) 452 `(rst-reference ((t (:inherit font-lock-string-face)))) 453 `(secondary-selection ((t (:background ,bg-blue)))) 454 `(separator-line ((t (:background ,bg-hl :height 0.1)))) 455 `(sh-heredoc ((t (:background ,bg-hl-dimmer :extend t :inherit fixed-pitch-serif)))) 456 `(sh-quoted-exec ((t (:background ,bg-hl-dim :inherit fixed-pitch-serif)))) 457 `(shadow ((t (:foreground ,fg-dimmer)))) 458 `(shortdoc-heading ((t (:inherit eighters-title-1)))) 459 `(show-paren-match ((t (:foreground ,fg-cyan :inverse-video t)))) 460 `(show-paren-mismatch ((t (:foreground ,fg-red :inverse-video t)))) 461 `(shr-h1 ((t (:inherit eighters-title-1)))) 462 `(shr-h2 ((t (:inherit eighters-title-2)))) 463 `(shr-h3 ((t (:inherit eighters-title-3)))) 464 `(shr-h4 ((t (:inherit eighters-title-4)))) 465 `(shr-h5 ((t (:inherit eighters-title-5)))) 466 `(shr-h6 ((t (:inherit eighters-title-6)))) 467 `(success ((t (:foreground ,fg-blue :weight bold)))) 468 `(tab-bar ((t (:background ,bg-hl-dimmer :inherit eighters-ui-intangible)))) 469 `(tab-bar-tab ((t (:weight bold :box (:style released-button) :inherit tab-bar)))) 470 `(tab-bar-tab-highlight ((t (:background ,bg-hl :inherit tab-bar-tab)))) 471 `(tab-bar-tab-inactive ((t (:foreground ,fg-dimmer :weight normal :box (:style pressed-button) :inherit tab-bar-tab)))) 472 `(tab-line ((t (:inherit tab-bar :height 0.9)))) 473 `(tab-line-tab-current ((t (:inherit (tab-line-tab tab-bar-tab))))) 474 `(tab-line-highlight ((t (:inherit tab-bar-tab-highlight)))) 475 `(tab-line-tab-inactive ((t (:inherit (tab-line-tab tab-bar-tab-inactive))))) 476 `(table-cell ((t (:inherit fixed-pitch-serif)))) 477 `(textsec-suspicious ((t (:background ,bg-red)))) 478 `(trailing-whitespace ((t (:background ,bg-red)))) 479 `(transient-argument ((t :weight bold :inherit font-lock-string-face))) 480 `(transient-key ((t :inherit help-key-binding))) 481 `(transient-key-exit ((t :inherit (bold transient-key)))) 482 `(transient-key-return ((t :inherit (bold transient-key)))) 483 `(transient-key-stay ((t :inherit transient-key))) 484 `(transient-unreachable-key ((t :inherit (shadow help-key-binding)))) 485 `(vc-dir-directory ((t (:inherit dired-directory)))) 486 `(vc-dir-file ((t (:inherit default)))) 487 `(vc-dir-header ((t (:foreground ,fg-blue-subtle)))) 488 `(vc-dir-header-value ((t (:foreground ,fg-dim)))) 489 `(vc-dir-mark-indicator ((t (:inherit dired-mark)))) 490 `(vc-dir-status-edited ((t (:foreground ,fg-yellow)))) 491 `(vertical-border ((t (:foreground ,bg-hl)))) 492 `(warning ((t (:foreground ,fg-yellow :weight bold)))) 493 `(whitespace-hspace ((t (:weight bold :inherit whitespace-space)))) 494 `(whitespace-indentation ((t (:background ,bg-yellow-dim :foreground ,fg-red)))) 495 `(whitespace-newline ((t (:foreground ,fg-blue-dim)))) 496 `(whitespace-space ((t (:background ,bg-blue-dimmer :foreground ,fg-blue-dim)))) 497 `(whitespace-space-after-tab ((t (:inherit whitespace-indentation)))) 498 `(whitespace-tab ((t (:inherit whitespace-space)))) 499 `(whitespace-trailing ((t (:background ,bg-red-dim :foreground ,fg-yellow :weight bold)))) 500 `(widget-field ((t (:background ,bg-hl-dim)))) 501 ;;;; Diff faces. 502 `(diff-header ((t (:background ,bg-hl-dimmer :foreground ,fg-dim)))) 503 `(diff-file-header ((t (:background ,bg-hl-dimmer :foreground ,fg :weight bold)))) 504 `(diff-hunk-header ((t (:background ,bg-hl-dim :foreground ,fg-dim)))) 505 `(diff-function ((t (:background ,bg-hl-dim :weight bold)))) 506 `(diff-context ((t :foreground ,fg-dim))) 507 `(diff-removed ((t (:background ,bg-red-dimmer)))) 508 `(diff-refine-removed ((t (:background ,bg-red)))) 509 `(diff-indicator-removed ((t (:foreground ,fg-red :inherit diff-removed)))) 510 `(diff-added ((t :background ,bg-blue-dimmer))) 511 `(diff-refine-added ((t (:background ,bg-blue)))) 512 `(diff-indicator-added ((t (:foreground ,fg-blue :inherit diff-added)))) 513 `(diff-changed ((t :background ,bg-yellow-dimmer))) 514 `(diff-refine-changed ((t (:background ,bg-yellow)))) 515 `(diff-indicator-changed ((t (:foreground ,fg-yellow :inherit diff-changed)))) 516 `(ediff-even-diff-A ((t (:background ,bg-hl-dimmer)))) 517 `(ediff-even-diff-B ((t (:background ,bg-hl-dimmer)))) 518 `(ediff-even-diff-C ((t (:background ,bg-hl-dimmer)))) 519 `(ediff-even-diff-Ancestor ((t (:background ,bg-hl-dimmer)))) 520 `(ediff-odd-diff-A ((t (:background ,bg-hl-dimmer)))) 521 `(ediff-odd-diff-B ((t (:background ,bg-hl-dimmer)))) 522 `(ediff-odd-diff-C ((t (:background ,bg-hl-dimmer)))) 523 `(ediff-odd-diff-Ancestor ((t (:background ,bg-hl-dimmer)))) 524 `(ediff-current-diff-A ((t (:inherit diff-removed)))) 525 `(ediff-current-diff-B ((t (:inherit diff-added)))) 526 `(ediff-current-diff-C ((t (:inherit diff-changed)))) 527 `(ediff-current-diff-Ancestor ((t (:background ,bg-magenta-dimmer)))) 528 `(ediff-fine-diff-A ((t (:inherit diff-refine-removed)))) 529 `(ediff-fine-diff-B ((t (:inherit diff-refine-added)))) 530 `(ediff-fine-diff-C ((t (:inherit diff-refine-changed)))) 531 `(ediff-fine-diff-Ancestor ((t (:background ,bg-magenta)))) 532 `(smerge-markers ((t (:background ,bg-hl-dim :foreground ,fg-dim)))) 533 `(smerge-base ((t (:background ,bg-yellow-dim)))) 534 `(smerge-refine-shadow-cursor ((t (:box (:color ,fg-dimmer :line-width (-1 . -1)))))) 535 ;; Do *NOT* customize smerge-refined-changed, because that tells 536 ;; smerge to use it for both removed and added sections. 537 `(smerge-upper ((t (:background ,bg-red-dim)))) 538 `(smerge-refined-removed ((t (:inherit diff-refine-removed)))) 539 `(smerge-lower ((t (:background ,bg-blue-dim)))) 540 `(smerge-refined-added ((t (:inherit diff-refine-added)))) 541 ;;; Third-party faces. 542 `(diff-hl-delete ((t (:foreground ,fg-red :background ,bg-red)))) 543 `(diff-hl-insert ((t (:foreground ,fg-blue :background ,bg-blue)))) 544 `(diff-hl-change ((t (:foreground ,fg-yellow :background ,bg-yellow)))) 545 `(forge-dimmed ((t (:inherit shadow)))) 546 `(forge-post-author ((t (:inherit eighters-identity)))) 547 `(forge-post-date ((t (:inherit eighters-date)))) 548 `(forge-pullreq-merged ((t (:inherit forge-dimmed)))) 549 `(forge-pullreq-open ((t ()))) 550 `(forge-pullreq-rejected ((t (:inherit forge-dimmed :strike-through t)))) 551 `(forge-topic-done ((t ()))) 552 `(forge-topic-slug-completed ((t (:foreground ,fg-blue-dim)))) 553 `(forge-topic-slug-open ((t (:foreground ,fg-red-subtle)))) 554 `(forge-topic-slug-saved ((t (:foreground ,fg-yellow)))) 555 `(forge-topic-slug-unplanned ((t (:inherit forge-dimmed :strike-through t)))) 556 `(forge-topic-slug-unread ((t ()))) 557 `(markdown-blockquote-face ((t (:inherit eighters-citation-1)))) 558 `(markdown-code-face ((t (:inherit fixed-pitch-serif)))) 559 `(markdown-gfm-checkbox-face ((t :inherit eighters-checkbox))) 560 `(markdown-header-face-1 ((t (:inherit eighters-title-1)))) 561 `(markdown-header-face-2 ((t (:inherit eighters-title-2)))) 562 `(markdown-header-face-3 ((t (:inherit eighters-title-3)))) 563 `(markdown-header-face-4 ((t (:inherit eighters-title-4)))) 564 `(markdown-header-face-5 ((t (:inherit eighters-title-5)))) 565 `(markdown-header-face-6 ((t (:inherit eighters-title-6)))) 566 `(markdown-inline-code-face ((t (:background ,bg-hl-dim :foreground ,fg-magenta :inherit markdown-code-face)))) 567 `(markdown-line-break-face ((t (:background ,bg-hl-dimmer :underline t :inherit markdown-markup-face)))) 568 `(markdown-pre-face ((t (:background ,bg-hl-dimmer :inherit markdown-code-face :extend t)))) 569 `(markdown-url-face ((t (:inherit (markdown-markup-face markdown-plain-url-face))))) 570 `(which-key-group-description-face ((t (:foreground ,fg-green-dim)))) 571 `(which-key-key-face ((t :weight bold :inherit help-key-binding))) 572 ;;;; Magit. 573 `(magit-blame-highlight ((t (:foreground ,fg-blue-dim :background ,bg-blue-dimmer :inherit eighters-ui-intangible)))) 574 `(magit-branch-current ((t (:inverse-video t :inherit magit-branch-local)))) 575 `(magit-branch-local ((t (:foreground ,fg-blue)))) 576 `(magit-branch-remote ((t (:foreground ,fg-green-dim)))) 577 `(magit-branch-remote-head ((t (:inverse-video t :inherit magit-branch-remote)))) 578 `(magit-keyword ((t (:inherit eighters-metadata)))) 579 `(magit-process-ng ((t (:inherit error)))) 580 `(magit-process-ok ((t (:inherit success)))) 581 `(magit-log-date ((t (:inherit eighters-date)))) 582 `(magit-hash ((t (:inherit shadow)))) 583 `(magit-log-author ((t (:inherit eighters-identity)))) 584 `(magit-log-graph ((t (:inherit eighters-markup)))) 585 `(magit-mode-line-process ((t (:inherit compilation-mode-line-run)))) 586 ;; FIXME: Teach magit-section overlays to de-prioritize their 587 ;; :background so that tags can have one. 588 `(magit-tag ((t (:foreground ,fg-yellow)))) 589 ;;;;; Section backgrounds. 590 `(magit-section-highlight ((t :background ,bg-hl-dimmer))) 591 `(magit-diff-revision-summary ((t (:inherit (magit-diff-hunk-heading eighters-title-1))))) 592 `(magit-section-heading ((t (:inherit eighters-title-2)))) 593 `(magit-diff-file-heading ((t (:inherit eighters-title-3)))) 594 `(magit-diff-context ((t (:foreground ,fg-dim)))) 595 `(magit-diff-context-highlight ((t (:background ,bg-hl-dimmer :inherit magit-diff-context)))) 596 `(magit-diff-hunk-heading ((t (:background ,bg-hl-dim)))) 597 `(magit-diff-hunk-heading-highlight ((t (:background ,bg-hl)))) 598 ;;;;; Selections. 599 `(magit-section-heading-selection ((t (:foreground ,fg-cyan :background ,bg-cyan-dim)))) 600 `(magit-diff-file-heading-selection ((t (:foreground ,fg-cyan :background ,bg-cyan-dim)))) 601 `(magit-diff-hunk-heading-selection ((t (:foreground ,fg-cyan :background ,bg-cyan-dim)))) 602 `(magit-diff-lines-heading ((t (:foreground ,fg-cyan :inverse-video t)))) 603 ;;;;; Diffs. 604 `(magit-diff-base ((t (:foreground ,fg-dim :inherit diff-changed)))) 605 `(magit-diff-base-highlight ((t (:background ,bg-yellow-dim)))) 606 `(magit-diff-removed ((t (:foreground ,fg-dim :inherit diff-removed)))) 607 `(magit-diff-removed-highlight ((t (:background ,bg-red-dim)))) 608 `(magit-diffstat-removed ((t (:foreground ,fg-red)))) 609 `(magit-diff-added ((t (:foreground ,fg-dim :inherit diff-added)))) 610 `(magit-diff-added-highlight ((t (:background ,bg-blue-dim)))) 611 `(magit-diffstat-added ((t (:foreground ,fg-blue)))) 612 ;;;;; Git commit. 613 `(git-commit-comment-action ((t (:inherit eighters-title-3)))) 614 `(git-commit-comment-branch-local ((t (:inherit magit-branch-local)))) 615 `(git-commit-comment-branch-remote ((t (:inherit magit-branch-remote)))) 616 `(git-commit-comment-file ((t (:foreground ,fg-dim)))) 617 `(git-commit-comment-heading ((t (:inherit eighters-title-2)))) 618 `(git-commit-keyword ((t (:inherit eighters-metadata)))) 619 `(git-commit-known-pseudo-header ((t (:inherit message-header-name)))) 620 `(git-commit-pseudo-header ((t (:inherit eighters-identity)))) 621 `(git-commit-summary ((t (:inherit eighters-title-1))))) 622 (custom-theme-set-variables 623 'eighters 624 '(compilation-enter-directory-face 'dired-directory) 625 `(compilation-leave-directory-face '(:foreground ,fg-blue-dim)))) 626 627 (provide-theme 'eighters)