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
;;; 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