├── screenshot-go.png ├── .gitignore ├── README.md ├── LICENSE └── nova-theme.el /screenshot-go.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muirdm/emacs-nova-theme/HEAD/screenshot-go.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled 2 | *.elc 3 | 4 | # Packaging 5 | .cask 6 | 7 | # Backup files 8 | *~ 9 | 10 | # Undo-tree save-files 11 | *.~undo-tree 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Emacs Nova Theme 2 | 3 | This is a dark, pastel color theme for Emacs based on Trevor Miller's [Nova](https://trevordmiller.com/projects/nova) color scheme. 4 | 5 | ## Installation from MELPA 6 | 7 | 1. `M-x package-refresh-contents` if necessary 8 | 1. `M-x package-install RET nova-theme` 9 | 1. `M-x load-theme RET nova` 10 | 11 | Add `(load-theme 'nova t)` to your config to load at startup. 12 | 13 | ## Samples 14 | 15 | ![golang sample](https://github.com/muirmanders/emacs-nova-theme/raw/master/screenshot-go.png "golang sample") 16 | 17 | ## Philosophy 18 | * favor more color over less color where it helps to usefully distinguish things 19 | * but don't style to the point where _everything_ has a color 20 | * don't use bold in any prog modes, use sparingly otherwise 21 | * use underline very sparingly, perhaps only for links (I think it looks cheesy when used for emphasis) 22 | 23 | ## Customizing 24 | 25 | I tried to make it easy to tweak faces and add new faces. Assuming you have the theme loaded, you can change or add new faces like this: 26 | 27 | ``` emacs-lisp 28 | ;; colors in nova-base-colors are available as variables 29 | (nova-set-faces 30 | (some-face :foreground cyan) 31 | (some-other-face :background blue :inherit 'unspecified)) 32 | ``` 33 | 34 | ## Contributing 35 | 36 | With few exceptions, I will only style modes I use myself. You are more than welcome to contribute styling for additional modes. Please open a PR and include before and after screenshots. 37 | 38 | If you don't like existing styling or find a bug, please open an issue with a screenshot. 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2018, Muir Manders 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | * Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | * Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /nova-theme.el: -------------------------------------------------------------------------------- 1 | ;;; nova-theme.el --- A dark, pastel color theme 2 | ;; 3 | ;; Copyright (C) 2020 Muir Manders 4 | ;; 5 | ;; Author: Muir Manders 6 | ;; Version: 0.1.0 7 | ;; Package-Requires: ((emacs "24.3")) 8 | ;; Keywords: theme dark nova pastel faces 9 | ;; URL: https://github.com/muirmanders/emacs-nova-theme 10 | ;; 11 | ;; This file is not part of GNU Emacs. 12 | ;; 13 | ;;; Commentary: 14 | ;; 15 | ;; Nova is an Emacs color theme using Trevor Miller's Nova color scheme 16 | ;; . 17 | ;; 18 | ;;; Credits: 19 | ;; 20 | ;; Trevor Miller came up with the color scheme. 21 | ;; 22 | ;;; Code: 23 | 24 | (require 'color) 25 | (require 'cl-lib) 26 | 27 | (deftheme nova 28 | "A dark theme using Trevor Miller's Nova color scheme. 29 | See .") 30 | 31 | (defvar nova-base-colors 32 | '((cyan "#7FC1CA") 33 | (blue "#83AFE5") 34 | (purple "#9A93E1") 35 | (pink "#D18EC2") 36 | (red "#DF8C8C") 37 | (orange "#F2C38F") 38 | (yellow "#DADA93") 39 | (green "#A8CE93") 40 | (gray0 "#1E272C") 41 | (gray1 "#3C4C55") 42 | (gray2 "#556873") 43 | (gray3 "#6A7D89") 44 | (gray4 "#899BA6") 45 | (gray5 "#C5D4DD") 46 | (gray6 "#E6EEF3") 47 | 48 | (bg gray1) 49 | (fg gray5) 50 | (constant cyan) 51 | (identifier blue) 52 | (statement yellow) 53 | (type green) 54 | (global purple) 55 | (emphasis pink) 56 | (special orange) 57 | (trivial gray4) 58 | 59 | (user-action-needed red) 60 | (user-current-state cyan) 61 | (background-shade gray0) 62 | 63 | (added green) 64 | (modified orange) 65 | (removed red) 66 | (renamed blue) 67 | 68 | ;; non-standard additions 69 | (variable pink) 70 | (brown "#AE938C") 71 | (peach "#F1E3C1") 72 | (black (nova-darken bg 0.2)) 73 | (white (nova-lighten fg 0.5)))) 74 | 75 | ;;;###autoload 76 | (defun nova--build-face (face) 77 | "Internal helper to turn FACE into proper face spec." 78 | (let ((name (car face)) (attrs (cdr face))) 79 | `(list ',name (list (list t ,@attrs))))) 80 | 81 | ;;;###autoload 82 | (defun nova-darken (color alpha) 83 | "Darken given rgb string COLOR by ALPHA (0-1)." 84 | (nova-blend "#000000" color alpha)) 85 | 86 | ;;;###autoload 87 | (defmacro nova-with-colors (&rest body) 88 | "Macro to make color variables available to BODY." 89 | (declare (indent defun)) 90 | `(let* ,nova-base-colors ,@body)) 91 | 92 | ;;;###autoload 93 | (defun nova-blend (c1 c2 a) 94 | "Combine A C1 with (1-a) C2." 95 | (apply 96 | 'color-rgb-to-hex 97 | (cl-mapcar 98 | (lambda (c1 c2) (+ (* a c1) (* (- 1 a) c2))) 99 | (color-name-to-rgb c1) 100 | (color-name-to-rgb c2)))) 101 | 102 | ;;;###autoload 103 | (defun nova-lighten (color alpha) 104 | "Lighten given rgb string COLOR by ALPHA (0-1)." 105 | (nova-blend "#FFFFFF" color alpha)) 106 | 107 | (defmacro nova-set-faces (&rest faces) 108 | "Macro for conveniently setting nova faces. 109 | Makes color variables available, and reduces face spec clutter. 110 | FACES is a list of faces of the form (name :attr value) such as: 111 | 112 | \(some-important-face :foreground red)" 113 | (declare (indent defun)) 114 | `(nova-with-colors 115 | (custom-theme-set-faces 116 | 'nova 117 | ,@(mapcar #'nova--build-face faces)))) 118 | 119 | (nova-set-faces 120 | ;; basic faces (faces.el) 121 | (default :foreground fg :background bg) 122 | (cursor :background user-current-state) 123 | (region :background gray3 :distant-foreground nil) 124 | (highlight :background gray3) 125 | (fringe :foreground gray3) 126 | (success :foreground green) 127 | (warning :foreground yellow) 128 | (error :foreground user-action-needed) 129 | (escape-glyph :foreground special) 130 | (button :foreground constant :inherit 'underline) 131 | (minibuffer-prompt :foreground cyan) 132 | (trailing-whitespace :background user-action-needed) 133 | (show-paren-match :background gray3) 134 | (show-paren-mismatch :background (nova-darken red 0.4) :foreground red) 135 | (header-line :background bg) 136 | (mode-line :box nil :background black :foreground cyan) 137 | (mode-line-inactive :box nil :background (nova-darken black -0.2) :foreground (nova-darken cyan 0.2)) 138 | (mode-line-buffer-id :weight 'unspecified :foreground white) 139 | (mode-line-highlight :inherit 'highlight) 140 | (link :foreground cyan :underline t) 141 | (link-visited :foreground trivial :underline t) 142 | (vertical-border :foreground trivial) 143 | (window-divider :inherit 'vertical-border) 144 | (window-divider-first-pixel :inherit 'vertical-border) 145 | (window-divider-last-pixel :inherit 'vertical-border) 146 | (shadow :foreground trivial) 147 | (homoglyph :foreground cyan) 148 | (tooltip :background yellow :foreground black) 149 | (help-key-binding :background 'unspecified :foreground blue) 150 | 151 | ;; doom-modeline faces 152 | (doom-modeline-buffer-path :foreground trivial) 153 | (doom-modeline-buffer-file :foreground fg) 154 | (doom-modeline-buffer-modified :foreground modified) 155 | (doom-modeline-buffer-major-mode :weight 'unspecified) 156 | (doom-modeline-buffer-minor-mode :weight 'unspecified) 157 | (doom-modeline-project-parent-dir :weight 'unspecified) 158 | (doom-modeline-project-dir :weight 'unspecified) 159 | (doom-modeline-project-root-dir :weight 'unspecified) 160 | (doom-modeline-info :inherit 'success :weight 'unspecified) 161 | (doom-modeline-highlight :weight 'unspecified) 162 | (doom-modeline-warning :inherit 'warning :weight 'unspecified) 163 | (doom-modeline-urgent :inherit 'error :weight 'unspecified) 164 | (doom-modeline-bar :background purple) 165 | 166 | ;; font lock faces 167 | (font-lock-function-name-face :foreground identifier) 168 | (font-lock-constant-face :foreground constant) 169 | (font-lock-string-face :foreground constant) 170 | (font-lock-keyword-face :foreground global) 171 | (font-lock-builtin-face :foreground global) 172 | (font-lock-variable-name-face :foreground variable) 173 | (font-lock-type-face :foreground type) 174 | (font-lock-warning-face :foreground yellow) 175 | (font-lock-comment-face :foreground trivial) 176 | (font-lock-doc-face :foreground trivial) 177 | (font-lock-negation-char-face :foreground emphasis) 178 | 179 | ;; powerline faces 180 | (powerline-active0 :background (nova-blend purple bg 0.4) :foreground cyan) 181 | (powerline-active1 :background black :foreground cyan) 182 | (powerline-active2 :background gray0 :foreground cyan) 183 | (powerline-inactive0 :background (nova-blend purple bg 0.2) :foreground (nova-darken cyan 0.2)) 184 | (powerline-inactive1 :background (nova-darken black -0.2) :foreground (nova-darken cyan 0.2)) 185 | (powerline-inactive2 :background (nova-darken gray0 -0.3) :foreground (nova-darken fg 0.2)) 186 | (mode-line-buffer-id-inactive :foreground (nova-darken fg 0.2)) ; doesn't seem to work 187 | 188 | ;; search faces 189 | (match :background emphasis :foreground bg :distant-foreground bg) 190 | (isearch :inherit 'match) 191 | (isearch-fail :background (nova-darken red 0.4) :foreground red) 192 | (lazy-highlight :background (nova-darken emphasis 0.3) :foreground bg) 193 | 194 | ;; ivy faces 195 | (ivy-current-match :background user-current-state :foreground bg) 196 | (ivy-remote :foreground yellow) 197 | (ivy-modified-buffer :foreground modified) 198 | (ivy-highlight-face :foreground emphasis) 199 | (ivy-match-required-face :foreground user-action-needed) 200 | (ivy-confirm-face :foreground green) 201 | (ivy-minibuffer-match-face-1 :background 'unspecified :foreground 'unspecified) 202 | (ivy-minibuffer-match-face-2 :background emphasis :foreground bg) 203 | (ivy-minibuffer-match-face-3 :background orange :foreground bg) 204 | (ivy-minibuffer-match-face-4 :background green :foreground bg) 205 | 206 | ;; swiper faces 207 | (swiper-line-face :inherit 'highlight) 208 | (swiper-match-face-1 :background 'unspecified :foreground 'unspecified) 209 | (swiper-match-face-2 :background emphasis :foreground bg) 210 | (swiper-match-face-3 :background orange :foreground bg) 211 | (swiper-match-face-4 :background green :foreground bg) 212 | 213 | ;; orderless 214 | (orderless-match-face-0 :background blue :foreground bg) 215 | (orderless-match-face-1 :background emphasis :foreground bg) 216 | (orderless-match-face-2 :background orange :foreground bg) 217 | (orderless-match-face-3 :background green :foreground bg) 218 | 219 | (completions-common-part :inherit 'orderless-match-face-0) 220 | (completions-first-difference :inherit 'unspecified) 221 | 222 | ;; hydra faces 223 | (hydra-face-red :foreground red) 224 | (hydra-face-amaranth :foreground purple) 225 | (hydra-face-blue :foreground blue) 226 | (hydra-face-pink :foreground pink) 227 | (hydra-face-teal :foreground cyan) 228 | 229 | ;; avy faces 230 | (avy-lead-face-0 :foreground white :background blue) 231 | (avy-lead-face-1 :foreground white :background trivial) 232 | (avy-lead-face-2 :foreground white :background pink) 233 | (avy-lead-face :foreground white :background red) 234 | (avy-background-face :foreground gray3) 235 | 236 | ;; ido faces 237 | (ido-first-match :foreground emphasis) 238 | (ido-indicator :foreground red :background bg) 239 | (ido-only-match :foreground green) 240 | (ido-subdir :foreground blue) 241 | (ido-virtual :foreground trivial) 242 | 243 | ;; selectrum-mode 244 | (selectrum-current-candidate :background cyan :foreground bg) 245 | (selectrum-primary-highlight :background emphasis :foreground bg) 246 | (selectrum-secondary-highlight :background orange :foreground bg) 247 | 248 | ;; magit faces 249 | (magit-tag :foreground yellow) 250 | (magit-filename :foreground fg) 251 | (magit-branch-current :foreground user-current-state :box t) 252 | (magit-branch-local :foreground user-current-state) 253 | (magit-branch-remote :foreground green) 254 | (magit-dimmed :foreground trivial) 255 | (magit-hash :foreground trivial) 256 | (magit-process-ng :inherit 'error) 257 | (magit-process-ok :inherit 'success) 258 | (magit-section-highlight :background gray2) 259 | (magit-section-heading :foreground blue) 260 | (magit-section-heading-selection :foreground cyan :background gray2) 261 | (magit-section-secondary-heading :foreground purple :weight 'bold) 262 | (magit-diff-file-heading-selection :foreground cyan :background gray2) 263 | (magit-diff-hunk-heading :foreground (nova-darken cyan 0.1) :background gray2) 264 | (magit-diff-hunk-heading-highlight :foreground cyan :background gray2) 265 | (magit-diff-lines-heading :background orange :foreground bg) 266 | (magit-diff-added :foreground added :background (nova-blend added bg 0.1)) 267 | (magit-diff-added-highlight :foreground added :background (nova-blend added bg 0.2)) 268 | (magit-diff-removed :foreground removed :background (nova-blend removed bg 0.1)) 269 | (magit-diff-removed-highlight :foreground removed :background (nova-blend removed bg 0.2)) 270 | (magit-diff-base :foreground yellow :background (nova-blend yellow bg 0.1)) 271 | (magit-diff-base-highlight :foreground yellow :background (nova-blend yellow bg 0.2)) 272 | (magit-diff-context :foreground trivial :background bg) 273 | (magit-diff-context-highlight :foreground trivial :background bg) 274 | (magit-diff-revision-summary :foreground pink :background bg) 275 | (magit-diff-revision-summary-highlight :foreground pink) 276 | (magit-diffstat-added :foreground added) 277 | (magit-diffstat-removed :foreground removed) 278 | (magit-log-author :foreground pink) 279 | (magit-log-date :foreground blue) 280 | (magit-log-graph :foreground trivial) 281 | (magit-bisect-bad :foreground red) 282 | (magit-bisect-good :foreground green) 283 | (magit-bisect-skip :foreground orange) 284 | (magit-blame-heading :background black) 285 | (magit-blame-name :foreground pink :background black) 286 | (magit-blame-date :foreground blue :background black) 287 | (magit-blame-summary :foreground cyan :background black) 288 | (magit-blame-hash :foreground trivial :background black) 289 | (magit-cherry-equivalent :foreground purple) 290 | (magit-cherry-unmatched :foreground cyan) 291 | (magit-reflog-amend :foreground pink) 292 | (magit-reflog-checkout :foreground blue) 293 | (magit-reflog-cherry-pick :foreground green) 294 | (magit-reflog-commit :foreground green) 295 | (magit-reflog-merge :foreground green) 296 | (magit-reflog-other :foreground cyan) 297 | (magit-reflog-rebase :foreground pink) 298 | (magit-reflog-remote :foreground cyan) 299 | (magit-reflog-reset :inherit 'error) 300 | (magit-refname :foreground trivial) 301 | (magit-sequence-drop :foreground red) 302 | (magit-sequence-head :foreground (nova-lighten blue 0.2)) 303 | (magit-sequence-part :foreground yellow) 304 | (magit-sequence-stop :foreground (nova-darken green 0.2)) 305 | (magit-signature-bad :inherit 'error) 306 | (magit-signature-error :inherit 'error) 307 | (magit-signature-expired :inherit 'warning) 308 | (magit-signature-good :inherit 'success) 309 | (magit-signature-revoked :foreground pink) 310 | (magit-signature-untrusted :foreground orange) 311 | 312 | ;; vc faces 313 | (diff-context :inherit 'magit-diff-context) 314 | (diff-added :inherit 'magit-diff-added) 315 | (diff-removed :inherit 'magit-diff-removed) 316 | (diff-file-header :inherit 'magit-diff-file-heading) 317 | (diff-header :inherit 'magit-section) 318 | (diff-function :foreground identifier) 319 | (diff-hunk-header :foreground purple) 320 | (diff-refine-added :foreground added :background (nova-blend added bg 0.4)) 321 | (diff-refine-removed :foreground removed :background (nova-blend removed bg 0.4)) 322 | (diff-indicator-added :inherit 'magit-diff-added) 323 | (diff-indicator-removed :inherit 'magit-diff-removed) 324 | 325 | ;; ediff faces 326 | (ediff-current-diff-A :background (nova-blend removed bg 0.3)) 327 | (ediff-current-diff-B :background (nova-blend added bg 0.3)) 328 | (ediff-current-diff-C :background (nova-blend yellow bg 0.3)) 329 | (ediff-current-diff-Ancestor :background (nova-blend blue bg 0.3)) 330 | (ediff-fine-diff-A :background (nova-blend removed bg 0.6)) 331 | (ediff-fine-diff-B :background (nova-blend added bg 0.6)) 332 | (ediff-fine-diff-C :background (nova-blend yellow bg 0.6)) 333 | (ediff-fine-diff-Ancestor :background (nova-blend blue bg 0.6)) 334 | (ediff-even-diff-A :background (nova-blend removed bg 0.2)) 335 | (ediff-even-diff-B :background (nova-blend added bg 0.2)) 336 | (ediff-even-diff-C :background (nova-blend yellow bg 0.2)) 337 | (ediff-even-diff-Ancestor :background (nova-blend blue bg 0.2)) 338 | (ediff-odd-diff-A :background (nova-blend removed bg 0.2)) 339 | (ediff-odd-diff-B :background (nova-blend added bg 0.2)) 340 | (ediff-odd-diff-C :background (nova-blend yellow bg 0.2)) 341 | (ediff-odd-diff-Ancestor :background (nova-blend blue bg 0.2)) 342 | 343 | ;; smerge faces 344 | (smerge-lower :background (nova-blend added bg 0.2)) 345 | (smerge-refined-added :background (nova-blend added bg 0.4)) 346 | (smerge-upper :background (nova-blend removed bg 0.2)) 347 | (smerge-refined-removed :background (nova-blend removed bg 0.4)) 348 | (smerge-base :background (nova-blend yellow bg 0.2)) 349 | (smerge-markers :background gray2) 350 | 351 | ;; rainbow-delimiters faces 352 | (rainbow-delimiters-depth-1-face :foreground blue) 353 | (rainbow-delimiters-depth-2-face :foreground pink) 354 | (rainbow-delimiters-depth-3-face :foreground green) 355 | (rainbow-delimiters-depth-4-face :foreground orange) 356 | (rainbow-delimiters-depth-5-face :foreground purple) 357 | (rainbow-delimiters-depth-6-face :foreground yellow) 358 | (rainbow-delimiters-depth-7-face :foreground cyan) 359 | (rainbow-delimiters-unmatched-face :foreground red :background (nova-blend red bg 0.2)) 360 | 361 | ;; wgrep faces 362 | (wgrep-face :background gray2 :foreground 'unspecified) 363 | (wgrep-delete-face :foreground red :background (nova-blend red bg 0.2)) 364 | (wgrep-done-face :foreground blue) 365 | (wgrep-file-face :foreground 'unspecified :background gray2) 366 | (wgrep-reject-face :foreground red :weight 'bold) 367 | 368 | ;; outline faces 369 | (outline-1 :foreground blue) 370 | (outline-2 :foreground orange) 371 | (outline-3 :foreground green) 372 | (outline-4 :foreground cyan) 373 | (outline-5 :foreground red ) 374 | (outline-6 :foreground pink) 375 | (outline-7 :foreground yellow) 376 | (outline-8 :foreground purple) 377 | 378 | ;; org-mode faces 379 | (org-hide :foreground bg) 380 | (org-code :foreground blue :background (nova-blend blue bg 0.2)) 381 | (org-block :inherit 'unspecified :background (nova-blend blue bg 0.2)) 382 | (org-date :inherit 'link) 383 | (org-footnote :inherit 'link) 384 | (org-todo :foreground yellow :weight 'bold :box '(:line-width 1) :background (nova-blend yellow bg 0.1)) 385 | (org-done :foreground green :weight 'bold :box '(:line-width 1) :background (nova-blend green bg 0.1)) 386 | (org-table :foreground yellow :background (nova-blend yellow bg 0.1)) 387 | (org-checkbox :background gray2 :box '(:line-width 1 :style released-button)) 388 | (org-formula :foreground yellow) 389 | (org-sexp-date :foreground cyan) 390 | (org-scheduled :foreground green) 391 | 392 | (compilation-mode-line-fail :foreground red) 393 | (compilation-mode-line-exit :foreground green) 394 | 395 | (company-tooltip :foreground white :background gray2) 396 | (company-tooltip-selection :background cyan :foreground bg) 397 | (company-tooltip-common :background orange :foreground gray2) 398 | (company-tooltip-common-selection :background emphasis :foreground gray2) 399 | (company-preview :foreground bg) 400 | (company-preview-common :background gray3 :foreground fg) 401 | (company-scrollbar-bg :background gray3) 402 | (company-scrollbar-fg :background cyan) 403 | (company-template-field :background orange :foreground bg) 404 | (company-tooltip-annotation :foreground trivial) 405 | (company-tooltip-annotation-selection :foreground gray2) 406 | 407 | (web-mode-doctype-face :foreground trivial) 408 | (web-mode-html-tag-face :foreground global) 409 | (web-mode-html-tag-bracket-face :foreground global) 410 | (web-mode-html-attr-name-face :foreground variable) 411 | (web-mode-block-attr-name-face :foreground constant) 412 | (web-mode-html-entity-face :foreground special :inherit 'italic) 413 | (web-mode-block-control-face :foreground emphasis) 414 | 415 | ;; enh-ruby-mode 416 | (enh-ruby-op-face :inherit 'default) 417 | (enh-ruby-string-delimiter-face :inherit 'font-lock-string-face) 418 | (enh-ruby-heredoc-delimiter-face :inherit 'font-lock-string-face) 419 | (enh-ruby-regexp-delimiter-face :foreground special) 420 | (enh-ruby-regexp-face :foreground special) 421 | (erm-syn-errline :box `(:line-width 1 :color ,red)) 422 | (erm-syn-warnline :box `(:line-width 1 :color ,yellow)) 423 | 424 | ;; widget faces 425 | (widget-field :background gray2) 426 | (widget-single-line-field :background gray2) 427 | (widget-documentation :foreground cyan) 428 | 429 | ;; info faces 430 | (info-menu-star :foreground red) 431 | 432 | ;; customize faces 433 | (custom-variable-button :foreground green :underline t) 434 | (custom-variable-tag :foreground pink) 435 | (custom-group-tag :foreground purple) 436 | (custom-group-tag-1 :foreground blue) 437 | (custom-state :foreground yellow :background (nova-blend yellow bg 0.2)) 438 | (custom-saved :foreground green :background (nova-blend green bg 0.2)) 439 | (custom-button :foreground bg :background gray5 :box '(:line-width 2 :style released-button)) 440 | (custom-button-mouse :inherit 'custom-button :background gray6) 441 | (custom-button-pressed :inherit 'custom-button :box '(:line-width 2 :style pressed-button)) 442 | (custom-button-pressed-unraised :foreground purple) 443 | (custom-comment :foreground fg :background gray3) 444 | (custom-comment-tag :foreground trivial) 445 | (custom-modified :foreground modified :background (nova-blend modified bg 0.2)) 446 | (custom-group-subtitle :foreground orange) 447 | (custom-variable-obsolete :foreground trivial) 448 | (custom-set :foreground green :background bg) 449 | (custom-themed :foreground blue :background bg) 450 | (custom-invalid :foreground red :background (nova-blend red bg 0.2)) 451 | (custom-changed :foreground orange :background bg) 452 | 453 | ;; dired faces 454 | (dired-directory :foreground blue) 455 | (dired-ignored :foreground trivial) 456 | (dired-flagged :foreground red :background (nova-blend red bg 0.2)) 457 | (dired-header :foreground pink) 458 | (dired-mark :foreground blue) 459 | (dired-marked :background gray3) 460 | (dired-perm-write :foreground red) 461 | (dired-symlink :foreground orange) 462 | (dired-warning :inherit 'warning) 463 | 464 | ;; dired+ 465 | ;; 466 | ;; file faces 467 | (diredp-dir-heading :foreground pink) 468 | (diredp-dir-name :foreground blue) 469 | (diredp-file-name :inherit 'default) 470 | (diredp-file-suffix :inherit 'default) 471 | (diredp-compressed-file-name :foreground yellow) 472 | (diredp-compressed-file-suffix :foreground yellow) 473 | (diredp-symlink :foreground orange) 474 | (diredp-autofile-name :foreground pink) 475 | (diredp-ignored-file-name :foreground (nova-darken red 0.2)) 476 | 477 | ;; other column faces 478 | (diredp-number :foreground yellow) 479 | (diredp-date-time :foreground cyan) 480 | 481 | ;; priv faces 482 | (diredp-dir-priv :foreground blue) 483 | (diredp-read-priv :foreground green) 484 | (diredp-write-priv :foreground orange) 485 | (diredp-exec-priv :foreground red) 486 | (diredp-link-priv :foreground blue) 487 | (diredp-other-priv :foreground yellow) 488 | (diredp-rare-priv :foreground pink) 489 | (diredp-no-priv :foreground fg) 490 | 491 | ;; mark/tag/flag faces 492 | (diredp-deletion :foreground red :background (nova-blend red bg 0.2)) 493 | (diredp-deletion-file-name :foreground red :background (nova-blend red bg 0.2)) 494 | (diredp-executable-tag :foreground red) 495 | (diredp-flag-mark :foreground blue :background gray2) 496 | (diredp-flag-mark-line :background gray2) 497 | (diredp-mode-line-marked :foreground blue) 498 | (diredp-mode-line-flagged :foreground red) 499 | 500 | ;; eshell faces 501 | (eshell-prompt :foreground cyan) 502 | (eshell-ls-archive :inherit 'diredp-compressed-file-name) 503 | (eshell-ls-backup :foreground trivial) 504 | (eshell-ls-clutter :foreground trivial) 505 | (eshell-ls-directory :inherit 'diredp-dir-name) 506 | (eshell-ls-executable :foreground red) 507 | (eshell-ls-missing :foreground red) 508 | (eshell-ls-product :foreground orange) 509 | (eshell-ls-readonly :foreground yellow) 510 | (eshell-ls-special :foreground pink) 511 | (eshell-ls-symlink :foreground cyan) 512 | (eshell-ls-unreadable :foreground orange) 513 | 514 | ;; term faces 515 | (term :foreground fg) 516 | (term-bold :weight 'bold) 517 | (term-color-black :background gray0 :foreground gray0) 518 | (term-color-red :background red :foreground red) 519 | (term-color-green :background green :foreground green) 520 | (term-color-yellow :background yellow :foreground yellow) 521 | (term-color-blue :background blue :foreground blue) 522 | (term-color-magenta :background pink :foreground pink) 523 | (term-color-cyan :background cyan :foreground cyan) 524 | (term-color-white :background white :foreground white) 525 | 526 | ;; sh-mode faces 527 | (sh-heredoc :inherit 'font-lock-string-face :weight 'unspecified) 528 | (sh-quoted-exec :foreground yellow) 529 | (sh-escaped-newline :foreground special) 530 | 531 | ;; flyspell faces 532 | (flyspell-incorrect :underline `(:style wave :color ,red)) 533 | (flyspell-duplicate :underline `(:style wave :color ,yellow)) 534 | 535 | ;; flymake faces 536 | (flymake-error :underline `(:style wave :color ,red)) 537 | (flymake-warning :underline `(:style wave :color ,yellow)) 538 | (flymake-note :underline `(:style wave :color ,green)) 539 | 540 | ;; flycheck faces 541 | (flycheck-error :underline `(:style wave :color ,red)) 542 | (flycheck-warning :underline `(:style wave :color ,yellow)) 543 | (flycheck-info :underline `(:style wave :color ,green)) 544 | 545 | ;; realgud faces 546 | (realgud-bp-enable-face :foreground red) 547 | (realgud-bp-disabled-face :foreground trivial) 548 | (realgud-bp-line-enable-face :foreground red) 549 | (realgud-bp-line-enable-face :foreground red) 550 | (realgud-debugger-running :foreground green) 551 | (realgud-overlay-arrow2 :foreground fg) 552 | (realgud-overlay-arrow3 :foreground trivial) 553 | 554 | ;; cperl-mode faces 555 | (cperl-hash-face :foreground red :background 'unspecified) 556 | (cperl-array-face :foreground yellow :background 'unspecified) 557 | (cperl-nonoverridable-face :inherit 'font-lock-builtin-face) 558 | 559 | ;; xah-elisp 560 | (xah-elisp-command-face :foreground green) 561 | (xah-elisp-at-symbol :foreground red) 562 | (xah-elisp-dollar-symbol :foreground green) 563 | (xah-elisp-cap-variable :foreground red) 564 | 565 | ;; lsp-mode 566 | (lsp-face-highlight-read :inherit 'highlight :underline nil) 567 | (lsp-face-highlight-write :inherit 'highlight :weight 'unspecified) 568 | (lsp-lsp-flycheck-error-unnecessary-face :inherit 'flycheck-error) 569 | (lsp-lsp-flycheck-warning-unnecessary-face :inherit 'flycheck-warning) 570 | (lsp-lsp-flycheck-error-deprecated-face :inherit 'flycheck-error) 571 | (lsp-lsp-flycheck-warning-deprecated-face :inherit 'flycheck-warning) 572 | 573 | ;; regexp-builder 574 | (reb-match-0 :background user-current-state :foreground bg) 575 | (reb-match-1 :background emphasis :foreground bg) 576 | (reb-match-2 :background orange :foreground bg) 577 | (reb-match-3 :background green :foreground bg) 578 | 579 | ;; ert faces 580 | (ert-test-result-expected :background green) 581 | (ert-test-result-unexpected :background red) 582 | 583 | ;; typescript-mode 584 | (typescript-jsdoc-value :foreground pink) 585 | (typescript-jsdoc-type :foreground green) 586 | (typescript-jsdoc-tag :foreground purple) 587 | 588 | ;; messages (i.e. email) faces 589 | (message-header-to :foreground fg) 590 | (message-header-cc :foreground fg) 591 | (message-header-subject :foreground fg) 592 | (message-header-other :foreground fg) 593 | (message-header-name :foreground global) 594 | (message-header-xheader :foreground fg) 595 | (message-separator :foreground trivial) 596 | (message-cited-text :foreground pink) 597 | 598 | ;; opencl-mode 599 | (font-lock-opencl-face :foreground orange) 600 | 601 | ;; go-mode 602 | (go-dot-mod-module-name :foreground constant) 603 | (go-dot-mod-module-version :foreground trivial) 604 | (go-dot-mod-module-semver :foreground fg) 605 | 606 | ;; make-mode 607 | (makefile-space :background user-action-needed) 608 | 609 | ;; x509-mode 610 | (x509-hex-string-face :inherit 'font-lock-comment-face) 611 | (x509-oid-face :inherit 'font-lock-constant-face) 612 | (x509-bad-date-face :background red) 613 | 614 | (tree-sitter-hl-face:function.call :inherit 'font-lock-function-face) 615 | (tree-sitter-hl-face:property :foreground orange) 616 | 617 | (js2-warning :underline yellow) 618 | (js2-error :underline user-action-needed) 619 | (js2-function-param :foreground variable) 620 | (js2-function-call :foreground identifier) 621 | (js2-jsdoc-tag :foreground trivial) 622 | (js2-jsdoc-type :foreground trivial) 623 | (js2-jsdoc-value :foreground trivial) 624 | (js2-external-variable :foreground special) 625 | (js2-jsdoc-html-tag-name :foreground trivial) 626 | (js2-jsdoc-html-tag-delimiter :foreground trivial) 627 | 628 | (rustic-errno-face :inherit 'error) 629 | 630 | (thrift-ordinal-face :foreground orange) 631 | (thrift-doxygen-key-face :foreground orange) 632 | 633 | (ansi-color-black :foreground black :background bg) 634 | (ansi-color-red :foreground red :background bg) 635 | (ansi-color-green :foreground green :background bg) 636 | (ansi-color-yellow :foreground yellow :background bg) 637 | (ansi-color-blue :foreground blue :background bg) 638 | (ansi-color-magenta :foreground pink :background bg) 639 | (ansi-color-cyan :foreground cyan :background bg) 640 | (ansi-color-white :foreground white :background bg) 641 | 642 | (ansi-color-bright-black :foreground black :background bg) 643 | (ansi-color-bright-red :foreground red :background bg) 644 | (ansi-color-bright-green :foreground green :background bg) 645 | (ansi-color-bright-yellow :foreground yellow :background bg) 646 | (ansi-color-bright-blue :foreground blue :background bg) 647 | (ansi-color-bright-magenta :foreground pink :background bg) 648 | (ansi-color-bright-cyan :foreground cyan :background bg) 649 | (ansi-color-bright-white :foreground white :background bg) 650 | 651 | 652 | ;; (ansi-color-bright-black :foreground (nova-lighten black 0.5) :background black) 653 | ;; (ansi-color-bright-red :foreground (nova-lighten red 0.5) :background red) 654 | ;; (ansi-color-bright-green :foreground (nova-lighten green 0.5) :background green) 655 | ;; (ansi-color-bright-yellow :foreground (nova-lighten yellow 0.5) :background yellow) 656 | ;; (ansi-color-bright-blue :foreground (nova-lighten blue 0.5) :background blue) 657 | ;; (ansi-color-bright-magenta :foreground (nova-lighten pink 0.5) :background pink) 658 | ;; (ansi-color-bright-cyan :foreground (nova-lighten cyan 0.5) :background cyan) 659 | ;; (ansi-color-bright-white :foreground (nova-lighten white 0.5) :background white) 660 | 661 | ) 662 | 663 | (nova-with-colors 664 | (custom-theme-set-variables 665 | 'nova 666 | `(frame-background-mode 'dark) 667 | `(vc-annotate-background ,bg) 668 | `(vc-annotate-very-old-color ,(nova-darken purple 0.2)) 669 | `(ansi-color-names-vector [,bg ,red ,green ,yellow ,blue ,purple ,cyan ,fg]) 670 | `(rustic-ansi-faces [,bg ,red ,green ,yellow ,blue ,purple ,cyan ,fg]) 671 | `(lsp-ui-imenu-colors '(,cyan ,green)) 672 | `(vc-annotate-color-map 673 | `((20 . ,,red) 674 | (40 . ,,(nova-blend red orange 0.8)) 675 | (60 . ,,(nova-blend red orange 0.6)) 676 | (80 . ,,(nova-blend red orange 0.4)) 677 | (100 . ,,(nova-blend red orange 0.2)) 678 | (120 . ,,orange) 679 | (140 . ,,(nova-blend orange yellow 0.8)) 680 | (160 . ,,(nova-blend orange yellow 0.6)) 681 | (180 . ,,(nova-blend orange yellow 0.4)) 682 | (200 . ,,(nova-blend orange yellow 0.2)) 683 | (220 . ,,yellow) 684 | (240 . ,,(nova-blend yellow green 0.8)) 685 | (260 . ,,(nova-blend yellow green 0.6)) 686 | (280 . ,,(nova-blend yellow green 0.4)) 687 | (300 . ,,(nova-blend yellow green 0.2)) 688 | (320 . ,,green) 689 | (340 . ,,(nova-blend green blue 0.8)) 690 | (360 . ,,(nova-blend green blue 0.6)) 691 | (380 . ,,(nova-blend green blue 0.4)) 692 | (400 . ,,(nova-blend green blue 0.2)) 693 | (420 . ,,blue) 694 | (440 . ,,(nova-blend blue purple 0.8)) 695 | (460 . ,,(nova-blend blue purple 0.6)) 696 | (480 . ,,(nova-blend blue purple 0.4)) 697 | (500 . ,,(nova-blend blue purple 0.2)) 698 | (520 . ,,purple))))) 699 | 700 | ;;;###autoload 701 | (when (and load-file-name (boundp 'custom-theme-load-path)) 702 | (add-to-list 703 | 'custom-theme-load-path 704 | (file-name-directory load-file-name))) 705 | 706 | (provide-theme 'nova) 707 | 708 | ;;; nova-theme.el ends here 709 | --------------------------------------------------------------------------------