Themes

Bryce Canyon Ultra - Emacs Theme

This page renders the palette from the remote .el file and shows the source.

Source status: Loaded directly from the gist.

Theme Colors

Source: bryce-canyon-ultra-theme.el

Open raw file

;;; bryce-canyon-ultra-theme.el --- Bryce Canyon Ultra theme -*- lexical-binding: t; -*-

;; Author: OpenAI ChatGPT
;; Version: 0.1.0
;; Package-Requires: ((emacs "27.1"))
;; Keywords: faces, theme, dark
;; URL: https://example.invalid/bryce-canyon-ultra-theme

;;; Commentary:
;;
;; A dark theme built from the shirt palette in the user's Bryce Canyon Ultras
;; photos: volcanic charcoal, canyon orange, sunlit amber, and dusty mauve.
;;
;; Install:
;;   1. Put this file somewhere in your `custom-theme-load-path`, or add:
;;        (add-to-list 'custom-theme-load-path "/path/to/themes/")
;;   2. Then run:
;;        M-x load-theme RET bryce-canyon-ultra RET
;;
;; This theme targets modern Emacs releases and should work well on recent
;; versions, including Emacs 30.x.

;;; Code:

(deftheme bryce-canyon-ultra
  "A dark canyon-at-dusk theme with orange, amber, and dusty mauve accents.")

(let* ((class '((class color) (min-colors 89)))
       ;; Core palette sampled and interpreted from the user's shirt photos.
       (bg         "#171A1D") ; deep shirt charcoal
       (bg-alt     "#1F242A") ; lifted charcoal / slate
       (bg-soft    "#2A3138") ; muted panel background
       (bg-hl      "#323B44") ; selection / current line
       (bg-inactive "#121518")
       (fg         "#E6D3CB") ; warm off-white from the dusty print highlights
       (fg-alt     "#C9B2A8") ; softer parchment
       (fg-muted   "#9E8A84") ; subdued mauve-gray
       (shadow     "#0D0F11")

       (orange     "#F56F10") ; main canyon blaze
       (orange-2   "#FF7E12") ; brighter edge highlight
       (amber      "#E8A10B") ; Bryce gold/yellow text
       (amber-2    "#FFB11C") ; brighter amber
       (mauve      "#C58F96") ; dusty pink-purple print
       (mauve-2    "#D8A3A9") ; lighter mauve
       (sand       "#A06A4A") ; warm earth tone for secondary details
       (red-warm   "#D15A3B")
       (green      "#8DA46B") ; restrained complement for success/diff added
       (teal       "#6EA39B") ; cool balance for links/types
       (blue       "#7D95B8") ; calm informational accent
       (violet     "#B197C8") ; rare alternate accent

       (err        "#E36B4C")
       (warn       amber)
       (ok         "#8DA46B")
       (info       "#7D95B8"))
  (custom-theme-set-faces
   'bryce-canyon-ultra

   ;; Basics
   `(default ((,class (:background ,bg :foreground ,fg))))
   `(cursor ((,class (:background ,orange-2))))
   `(fringe ((,class (:background ,bg :foreground ,fg-muted))))
   `(region ((,class (:background ,bg-hl :extend t))))
   `(highlight ((,class (:background ,bg-soft))))
   `(hl-line ((,class (:background ,bg-alt :extend t))))
   `(shadow ((,class (:foreground ,fg-muted))))
   `(minibuffer-prompt ((,class (:foreground ,orange-2 :weight bold))))
   `(vertical-border ((,class (:foreground ,bg-soft))))
   `(link ((,class (:foreground ,teal :underline t))))
   `(link-visited ((,class (:foreground ,violet :underline t))))
   `(error ((,class (:foreground ,err :weight bold))))
   `(warning ((,class (:foreground ,warn :weight bold))))
   `(success ((,class (:foreground ,ok :weight bold))))
   `(escape-glyph ((,class (:foreground ,amber-2))))
   `(homoglyph ((,class (:foreground ,err))))
   `(match ((,class (:background ,orange :foreground ,shadow :weight bold))))
   `(lazy-highlight ((,class (:background ,mauve :foreground ,shadow))))
   `(isearch ((,class (:background ,amber-2 :foreground ,shadow :weight bold))))
   `(isearch-fail ((,class (:background ,err :foreground ,shadow :weight bold))))
   `(trailing-whitespace ((,class (:background ,err))))
   `(line-number ((,class (:background ,bg :foreground ,bg-hl))))
   `(line-number-current-line ((,class (:background ,bg-alt :foreground ,amber :weight bold))))

   ;; Font lock
   `(font-lock-builtin-face ((,class (:foreground ,orange))))
   `(font-lock-comment-face ((,class (:foreground ,fg-muted :slant italic))))
   `(font-lock-comment-delimiter-face ((,class (:foreground ,fg-muted :slant italic))))
   `(font-lock-constant-face ((,class (:foreground ,mauve-2))))
   `(font-lock-doc-face ((,class (:foreground ,fg-alt))))
   `(font-lock-function-name-face ((,class (:foreground ,amber :weight semi-bold))))
   `(font-lock-keyword-face ((,class (:foreground ,orange-2 :weight bold))))
   `(font-lock-negation-char-face ((,class (:foreground ,err :weight bold))))
   `(font-lock-preprocessor-face ((,class (:foreground ,orange))))
   `(font-lock-regexp-grouping-backslash ((,class (:foreground ,amber-2 :weight bold))))
   `(font-lock-regexp-grouping-construct ((,class (:foreground ,mauve :weight bold))))
   `(font-lock-string-face ((,class (:foreground ,mauve))))
   `(font-lock-type-face ((,class (:foreground ,teal :weight semi-bold))))
   `(font-lock-variable-name-face ((,class (:foreground ,fg))))
   `(font-lock-warning-face ((,class (:foreground ,warn :weight bold))))
   `(font-lock-number-face ((,class (:foreground ,mauve-2))))
   `(font-lock-operator-face ((,class (:foreground ,orange-2))))
   `(font-lock-property-name-face ((,class (:foreground ,amber))))
   `(font-lock-property-use-face ((,class (:foreground ,amber))))
   `(font-lock-punctuation-face ((,class (:foreground ,fg-alt))))
   `(font-lock-bracket-face ((,class (:foreground ,fg-alt))))
   `(font-lock-delimiter-face ((,class (:foreground ,fg-alt))))
   `(font-lock-escape-face ((,class (:foreground ,amber-2))))
   `(font-lock-misc-punctuation-face ((,class (:foreground ,fg-alt))))

   ;; Mode line / header line
   `(mode-line ((,class (:background ,bg-soft :foreground ,fg :box (:line-width 1 :color ,bg-soft)))))
   `(mode-line-inactive ((,class (:background ,bg-inactive :foreground ,fg-muted :box (:line-width 1 :color ,bg-inactive)))))
   `(mode-line-buffer-id ((,class (:foreground ,amber :weight bold))))
   `(header-line ((,class (:background ,bg-alt :foreground ,fg-alt :box nil))))

   ;; Completion / ivy / vertico / orderless / company / corfu
   `(completions-common-part ((,class (:foreground ,orange-2 :weight bold))))
   `(completions-first-difference ((,class (:foreground ,amber-2 :weight bold))))
   `(icomplete-first-match ((,class (:foreground ,amber :weight bold))))
   `(company-tooltip ((,class (:background ,bg-soft :foreground ,fg))))
   `(company-tooltip-selection ((,class (:background ,bg-hl :foreground ,fg))))
   `(company-tooltip-common ((,class (:foreground ,orange-2 :weight bold))))
   `(company-tooltip-common-selection ((,class (:foreground ,amber-2 :weight bold))))
   `(company-scrollbar-bg ((,class (:background ,bg-alt))))
   `(company-scrollbar-fg ((,class (:background ,bg-hl))))
   `(company-preview ((,class (:background ,bg-alt :foreground ,mauve))))
   `(company-preview-common ((,class (:foreground ,mauve-2 :weight bold))))
   `(corfu-default ((,class (:background ,bg-soft :foreground ,fg))))
   `(corfu-current ((,class (:background ,bg-hl :foreground ,fg))))
   `(corfu-bar ((,class (:background ,orange))))
   `(corfu-border ((,class (:background ,bg-soft :foreground ,bg-soft))))
   `(vertico-current ((,class (:background ,bg-hl :foreground ,fg :extend t))))
   `(vertico-group-title ((,class (:foreground ,amber :weight bold))))
   `(vertico-group-separator ((,class (:foreground ,fg-muted))))
   `(orderless-match-face-0 ((,class (:foreground ,orange-2 :weight bold))))
   `(orderless-match-face-1 ((,class (:foreground ,amber-2 :weight bold))))
   `(orderless-match-face-2 ((,class (:foreground ,mauve-2 :weight bold))))
   `(orderless-match-face-3 ((,class (:foreground ,teal :weight bold))))

   ;; Treesit / modern syntax extras
   `(treesit-explorer-anonymous-node ((,class (:foreground ,fg-muted))))
   `(treesit-explorer-field-name ((,class (:foreground ,amber))))

   ;; Org
   `(org-document-title ((,class (:foreground ,orange-2 :weight bold :height 1.2))))
   `(org-document-info ((,class (:foreground ,fg-alt))))
   `(org-level-1 ((,class (:foreground ,orange-2 :weight bold :height 1.10))))
   `(org-level-2 ((,class (:foreground ,amber :weight bold :height 1.06))))
   `(org-level-3 ((,class (:foreground ,mauve-2 :weight bold :height 1.03))))
   `(org-level-4 ((,class (:foreground ,teal :weight semi-bold))))
   `(org-level-5 ((,class (:foreground ,fg))))
   `(org-level-6 ((,class (:foreground ,fg-alt))))
   `(org-level-7 ((,class (:foreground ,sand))))
   `(org-level-8 ((,class (:foreground ,blue))))
   `(org-block ((,class (:background ,bg-alt :foreground ,fg))))
   `(org-block-begin-line ((,class (:background ,bg-alt :foreground ,fg-muted))))
   `(org-block-end-line ((,class (:background ,bg-alt :foreground ,fg-muted))))
   `(org-code ((,class (:foreground ,amber-2))))
   `(org-verbatim ((,class (:foreground ,mauve-2))))
   `(org-quote ((,class (:slant italic :background ,bg-alt :foreground ,fg-alt))))
   `(org-table ((,class (:foreground ,teal))))
   `(org-date ((,class (:foreground ,mauve :underline t))))
   `(org-done ((,class (:foreground ,ok :weight bold))))
   `(org-todo ((,class (:foreground ,orange-2 :weight bold))))
   `(org-headline-done ((,class (:foreground ,fg-muted))))
   `(org-checkbox ((,class (:foreground ,amber :weight bold))))
   `(org-special-keyword ((,class (:foreground ,fg-muted))))
   `(org-meta-line ((,class (:foreground ,fg-muted))))
   `(org-tag ((,class (:foreground ,sand :weight semi-bold))))
   `(org-agenda-date ((,class (:foreground ,amber))))
   `(org-agenda-date-today ((,class (:foreground ,orange-2 :weight bold))))
   `(org-agenda-date-weekend ((,class (:foreground ,mauve))))
   `(org-scheduled ((,class (:foreground ,ok))))
   `(org-scheduled-today ((,class (:foreground ,amber-2 :weight bold))))
   `(org-warning ((,class (:foreground ,warn :weight bold))))

   ;; Markdown
   `(markdown-header-face-1 ((,class (:foreground ,orange-2 :weight bold))))
   `(markdown-header-face-2 ((,class (:foreground ,amber :weight bold))))
   `(markdown-header-face-3 ((,class (:foreground ,mauve-2 :weight bold))))
   `(markdown-code-face ((,class (:background ,bg-alt :foreground ,amber-2))))
   `(markdown-inline-code-face ((,class (:foreground ,amber-2))))
   `(markdown-link-face ((,class (:foreground ,teal :underline t))))
   `(markdown-url-face ((,class (:foreground ,blue :underline t))))

   ;; Diff / VC / Magit
   `(diff-added ((,class (:background "#1D241A" :foreground ,green))))
   `(diff-removed ((,class (:background "#2A1715" :foreground ,err))))
   `(diff-changed ((,class (:background "#2A2214" :foreground ,amber))))
   `(diff-refine-added ((,class (:background "#2E3828" :foreground ,green :weight bold))))
   `(diff-refine-removed ((,class (:background "#3A201C" :foreground ,err :weight bold))))
   `(diff-refine-changed ((,class (:background "#43351C" :foreground ,amber-2 :weight bold))))
   `(diff-header ((,class (:background ,bg-alt :foreground ,fg-alt))))
   `(diff-file-header ((,class (:background ,bg-soft :foreground ,orange-2 :weight bold))))
   `(magit-section-heading ((,class (:foreground ,orange-2 :weight bold))))
   `(magit-section-highlight ((,class (:background ,bg-alt))))
   `(magit-branch-local ((,class (:foreground ,amber))))
   `(magit-branch-remote ((,class (:foreground ,green))))
   `(magit-diff-added ((,class (:background "#1D241A" :foreground ,green))))
   `(magit-diff-removed ((,class (:background "#2A1715" :foreground ,err))))
   `(magit-diff-context ((,class (:foreground ,fg-alt))))
   `(magit-diff-file-heading ((,class (:foreground ,fg :weight bold))))
   `(magit-diff-file-heading-highlight ((,class (:background ,bg-alt :foreground ,fg :weight bold))))
   `(magit-diff-added-highlight ((,class (:background "#2A3224" :foreground ,green))))
   `(magit-diff-removed-highlight ((,class (:background "#33201D" :foreground ,err))))
   `(magit-hash ((,class (:foreground ,fg-muted))))
   `(magit-popup-heading ((,class (:foreground ,orange-2 :weight bold))))

   ;; Dired
   `(dired-directory ((,class (:foreground ,orange-2 :weight bold))))
   `(dired-flagged ((,class (:foreground ,err :weight bold))))
   `(dired-header ((,class (:foreground ,amber :weight bold))))
   `(dired-ignored ((,class (:foreground ,fg-muted))))
   `(dired-mark ((,class (:foreground ,amber-2 :weight bold))))
   `(dired-marked ((,class (:foreground ,mauve-2 :weight bold))))
   `(dired-perm-write ((,class (:foreground ,fg))))
   `(dired-symlink ((,class (:foreground ,teal :weight semi-bold))))
   `(dired-warning ((,class (:foreground ,warn))))

   ;; Whitespace / show-paren / pulse
   `(show-paren-match ((,class (:background ,orange :foreground ,shadow :weight bold))))
   `(show-paren-mismatch ((,class (:background ,err :foreground ,shadow :weight bold))))
   `(whitespace-space ((,class (:foreground ,bg-soft))))
   `(whitespace-tab ((,class (:foreground ,bg-soft))))
   `(whitespace-trailing ((,class (:background ,err))))
   `(pulse-highlight-start-face ((,class (:background ,bg-soft))))
   `(pulse-highlight-face ((,class (:background ,bg-soft))))

   ;; Flymake / Flycheck
   `(flymake-error ((,class (:underline (:style wave :color ,err)))))
   `(flymake-warning ((,class (:underline (:style wave :color ,warn)))))
   `(flymake-note ((,class (:underline (:style wave :color ,info)))))
   `(flycheck-error ((,class (:underline (:style wave :color ,err)))))
   `(flycheck-warning ((,class (:underline (:style wave :color ,warn)))))
   `(flycheck-info ((,class (:underline (:style wave :color ,info)))))

   ;; Terminal colors
   `(term-color-black ((,class (:foreground ,bg :background ,bg))))
   `(term-color-blue ((,class (:foreground ,blue :background ,blue))))
   `(term-color-cyan ((,class (:foreground ,teal :background ,teal))))
   `(term-color-green ((,class (:foreground ,green :background ,green))))
   `(term-color-magenta ((,class (:foreground ,mauve :background ,mauve))))
   `(term-color-red ((,class (:foreground ,err :background ,err))))
   `(term-color-white ((,class (:foreground ,fg :background ,fg))))
   `(term-color-yellow ((,class (:foreground ,amber :background ,amber))))

   ;; ANSI colors
   `(ansi-color-black ((,class (:foreground ,bg :background ,bg))))
   `(ansi-color-blue ((,class (:foreground ,blue :background ,blue))))
   `(ansi-color-cyan ((,class (:foreground ,teal :background ,teal))))
   `(ansi-color-green ((,class (:foreground ,green :background ,green))))
   `(ansi-color-magenta ((,class (:foreground ,mauve :background ,mauve))))
   `(ansi-color-red ((,class (:foreground ,err :background ,err))))
   `(ansi-color-white ((,class (:foreground ,fg :background ,fg))))
   `(ansi-color-yellow ((,class (:foreground ,amber :background ,amber))))))

;;;###autoload
(when load-file-name
  (add-to-list 'custom-theme-load-path (file-name-directory load-file-name)))

(provide-theme 'bryce-canyon-ultra)

;;; bryce-canyon-ultra-theme.el ends here

Return to base