aboutsummaryrefslogblamecommitdiffstats
path: root/ntmacs/campbell-theme.el
blob: f85b6092ee86c2896c68c1900c1000b717600856 (plain) (tree)






















































































































































































































































































































                                                                                                   
;;; campbell-theme.el --- Classic blue PowerShell theme -*- lexical-binding: t; -*-

;; Copyright (C) 2026

;; Author: ntmacs contributors
;; Version: 1.0.0
;; Package-Requires: ((emacs "27.1"))
;; Keywords: faces, theme

;;; Commentary:

;; An Emacs theme with the classic Windows PowerShell blue background and
;; white foreground.  The Campbell terminal palette is preserved verbatim for
;; ANSI output; brighter variants are used where editor text needs contrast.

;;; Code:

(deftheme campbell
  "Classic blue PowerShell with the Windows Campbell terminal palette.")

(let ((background     "#012456")
      (foreground     "#FFFFFF")
      (cursor         "#FFFFFF")
      (selection      "#FFFFFF")
      (black          "#0C0C0C")
      (blue           "#0037DA")
      (cyan           "#3A96DD")
      (green          "#8CBD8C")
      (purple         "#881798")
      (red            "#C50F1F")
      (white          "#CCCCCC")
      (yellow         "#C19C00")
      (bright-black   "#767676")
      (bright-blue    "#3B78FF")
      (bright-cyan    "#61D6D6")
      (bright-green   "#16C60C")
      (bright-purple  "#B4009E")
      (bright-red     "#E74856")
      (bright-white   "#F2F2F2")
      (bright-yellow  "#F9F1A5"))
  (custom-theme-set-faces
   'campbell

   ;; Core Emacs UI
   `(default ((t (:background ,background :foreground ,foreground))))
   `(cursor ((t (:background ,cursor))))
   `(fringe ((t (:background ,background :foreground ,bright-black))))
   `(highlight ((t (:background ,bright-black :foreground ,bright-white))))
   `(region ((t (:background ,selection :foreground ,black :extend t))))
   `(secondary-selection ((t (:background ,cyan :foreground ,black :extend t))))
   `(shadow ((t (:foreground ,bright-black))))
   `(vertical-border ((t (:foreground ,bright-black))))
   `(window-divider ((t (:foreground ,bright-black))))
   `(window-divider-first-pixel ((t (:foreground ,background))))
   `(window-divider-last-pixel ((t (:foreground ,bright-black))))
   `(minibuffer-prompt ((t (:foreground ,bright-cyan :weight bold))))
   `(link ((t (:foreground ,bright-cyan :underline t))))
   `(link-visited ((t (:foreground ,bright-purple :underline t))))
   `(button ((t (:foreground ,bright-cyan :underline t))))
   `(escape-glyph ((t (:foreground ,bright-yellow))))
   `(homoglyph ((t (:foreground ,bright-yellow))))
   `(error ((t (:foreground ,bright-red :weight bold))))
   `(warning ((t (:foreground ,bright-yellow :weight bold))))
   `(success ((t (:foreground ,bright-green :weight bold))))
   `(tooltip ((t (:background ,bright-white :foreground ,black))))
   `(child-frame-border ((t (:background ,bright-blue))))

   ;; Mode lines, tabs, and line numbers
   `(mode-line ((t (:background ,bright-white :foreground ,black
                    :box (:line-width -1 :color ,white) :weight bold))))
   `(mode-line-inactive ((t (:background ,background :foreground ,bright-black
                             :box (:line-width -1 :color ,bright-black)))))
   `(mode-line-buffer-id ((t (:weight bold))))
   `(header-line ((t (:background ,background :foreground ,bright-cyan
                      :box (:line-width -1 :color ,bright-black)))))
   `(tab-bar ((t (:background ,background :foreground ,foreground))))
   `(tab-bar-tab ((t (:background ,bright-white :foreground ,black
                       :box (:line-width -1 :color ,bright-white) :weight bold))))
   `(tab-bar-tab-inactive ((t (:background ,background :foreground ,bright-black
                                :box (:line-width -1 :color ,bright-black)))))
   `(tab-line ((t (:background ,background :foreground ,bright-black))))
   `(tab-line-tab ((t (:background ,bright-white :foreground ,black))))
   `(tab-line-tab-current ((t (:background ,bright-blue :foreground ,bright-white
                            :weight bold))))
   `(tab-line-tab-inactive ((t (:background ,background :foreground ,bright-black))))
   `(line-number ((t (:background ,background :foreground ,bright-black))))
   `(line-number-current-line ((t (:background ,background :foreground ,bright-yellow
                                   :weight bold))))
   `(fill-column-indicator ((t (:foreground ,bright-black))))

   ;; Searching, matching, and editing feedback
   `(isearch ((t (:background ,bright-blue :foreground ,bright-white :weight bold))))
   `(isearch-fail ((t (:background ,bright-red :foreground ,black :weight bold))))
   `(lazy-highlight ((t (:background ,yellow :foreground ,black))))
   `(match ((t (:background ,bright-yellow :foreground ,black :weight bold))))
   `(query-replace ((t (:inherit isearch))))
   `(show-paren-match ((t (:background ,bright-green :foreground ,black :weight bold))))
   `(show-paren-mismatch ((t (:background ,bright-red :foreground ,black :weight bold))))
   `(trailing-whitespace ((t (:background ,red))))
   `(hl-line ((t (:underline (:color ,bright-black :style line)))))
   `(pulse-highlight-start-face ((t (:background ,yellow :foreground ,black))))

   ;; Syntax highlighting
   `(font-lock-builtin-face ((t (:foreground ,bright-purple))))
   `(font-lock-comment-face ((t (:foreground ,bright-black :slant italic))))
   `(font-lock-comment-delimiter-face ((t (:foreground ,bright-black))))
   `(font-lock-constant-face ((t (:foreground ,bright-purple))))
   `(font-lock-doc-face ((t (:foreground ,green :slant italic))))
   `(font-lock-doc-markup-face ((t (:foreground ,bright-green))))
   `(font-lock-function-call-face ((t (:foreground ,bright-cyan))))
   `(font-lock-function-name-face ((t (:foreground ,bright-cyan :weight bold))))
   `(font-lock-keyword-face ((t (:foreground ,bright-blue :weight bold))))
   `(font-lock-negation-char-face ((t (:foreground ,bright-red :weight bold))))
   `(font-lock-number-face ((t (:foreground ,bright-purple))))
   `(font-lock-operator-face ((t (:foreground ,bright-white))))
   `(font-lock-preprocessor-face ((t (:foreground ,bright-purple))))
   `(font-lock-property-name-face ((t (:foreground ,cyan))))
   `(font-lock-property-use-face ((t (:foreground ,cyan))))
   `(font-lock-punctuation-face ((t (:foreground ,white))))
   `(font-lock-regexp-grouping-backslash ((t (:foreground ,bright-yellow :weight bold))))
   `(font-lock-regexp-grouping-construct ((t (:foreground ,bright-purple :weight bold))))
   `(font-lock-string-face ((t (:foreground ,bright-yellow))))
   `(font-lock-type-face ((t (:foreground ,bright-green))))
   `(font-lock-variable-name-face ((t (:foreground ,cyan))))
   `(font-lock-variable-use-face ((t (:foreground ,cyan))))
   `(font-lock-warning-face ((t (:foreground ,bright-red :weight bold))))

   ;; Completion and minibuffer interfaces
   `(completions-annotations ((t (:foreground ,bright-black :slant italic))))
   `(completions-common-part ((t (:foreground ,bright-cyan :weight bold))))
   `(completions-first-difference ((t (:foreground ,bright-yellow :weight bold))))
   `(icomplete-first-match ((t (:foreground ,bright-green :weight bold))))
   `(vertico-current ((t (:background ,bright-black :foreground ,bright-white))))
   `(orderless-match-face-0 ((t (:foreground ,bright-cyan :weight bold))))
   `(orderless-match-face-1 ((t (:foreground ,bright-yellow :weight bold))))
   `(orderless-match-face-2 ((t (:foreground ,bright-green :weight bold))))
   `(orderless-match-face-3 ((t (:foreground ,bright-purple :weight bold))))
   `(company-tooltip ((t (:background ,background :foreground ,foreground))))
   `(company-tooltip-selection ((t (:background ,bright-black :foreground ,bright-white))))
   `(company-tooltip-common ((t (:foreground ,bright-cyan :weight bold))))
   `(company-scrollbar-bg ((t (:background ,background))))
   `(company-scrollbar-fg ((t (:background ,bright-black))))
   `(company-preview-common ((t (:foreground ,bright-cyan))))
   `(corfu-default ((t (:background ,background :foreground ,foreground))))
   `(corfu-current ((t (:background ,bright-black :foreground ,bright-white))))
   `(corfu-bar ((t (:background ,bright-black))))
   `(corfu-border ((t (:background ,bright-blue))))

   ;; Diagnostics and compilation
   `(flymake-error ((t (:underline (:style wave :color ,bright-red)))))
   `(flymake-warning ((t (:underline (:style wave :color ,bright-yellow)))))
   `(flymake-note ((t (:underline (:style wave :color ,bright-cyan)))))
   `(flycheck-error ((t (:underline (:style wave :color ,bright-red)))))
   `(flycheck-warning ((t (:underline (:style wave :color ,bright-yellow)))))
   `(flycheck-info ((t (:underline (:style wave :color ,bright-cyan)))))
   `(compilation-error ((t (:foreground ,bright-red :weight bold))))
   `(compilation-warning ((t (:foreground ,bright-yellow :weight bold))))
   `(compilation-info ((t (:foreground ,bright-green))))
   `(compilation-mode-line-exit ((t (:foreground ,bright-green :weight bold))))
   `(compilation-mode-line-fail ((t (:foreground ,bright-red :weight bold))))
   `(compilation-mode-line-run ((t (:foreground ,bright-yellow :weight bold))))

   ;; Diff and version-control interfaces
   `(diff-added ((t (:foreground ,bright-green))))
   `(diff-removed ((t (:foreground ,bright-red))))
   `(diff-changed ((t (:foreground ,bright-yellow))))
   `(diff-refine-added ((t (:background ,green :foreground ,black))))
   `(diff-refine-removed ((t (:background ,red :foreground ,bright-white))))
   `(diff-refine-changed ((t (:background ,yellow :foreground ,black))))
   `(diff-header ((t (:foreground ,bright-cyan))))
   `(diff-file-header ((t (:foreground ,bright-white :weight bold))))
   `(diff-hunk-header ((t (:foreground ,bright-purple))))
   `(diff-context ((t (:foreground ,bright-black))))
   `(magit-section-heading ((t (:foreground ,bright-yellow :weight bold))))
   `(magit-section-highlight ((t (:background ,background))))
   `(magit-branch-local ((t (:foreground ,bright-cyan))))
   `(magit-branch-remote ((t (:foreground ,bright-green))))
   `(magit-hash ((t (:foreground ,bright-black))))
   `(magit-diff-added ((t (:foreground ,bright-green))))
   `(magit-diff-added-highlight ((t (:background ,green :foreground ,black))))
   `(magit-diff-removed ((t (:foreground ,bright-red))))
   `(magit-diff-removed-highlight ((t (:background ,red :foreground ,bright-white))))
   `(magit-diff-context-highlight ((t (:background ,background :foreground ,foreground))))
   `(magit-diff-hunk-heading ((t (:background ,background :foreground ,bright-purple))))
   `(magit-diff-hunk-heading-highlight ((t (:background ,bright-black :foreground ,bright-white))))
   `(magit-diff-file-heading ((t (:foreground ,bright-white :weight bold))))
   `(magit-diff-file-heading-highlight ((t (:background ,background :foreground ,bright-cyan
                                        :weight bold))))
   `(git-gutter:added ((t (:foreground ,bright-green :weight bold))))
   `(git-gutter:deleted ((t (:foreground ,bright-red :weight bold))))
   `(git-gutter:modified ((t (:foreground ,bright-yellow :weight bold))))

   ;; Org and outline
   `(outline-1 ((t (:foreground ,bright-cyan :weight bold))))
   `(outline-2 ((t (:foreground ,bright-green :weight bold))))
   `(outline-3 ((t (:foreground ,bright-blue :weight bold))))
   `(outline-4 ((t (:foreground ,bright-yellow :weight bold))))
   `(outline-5 ((t (:foreground ,bright-purple :weight bold))))
   `(outline-6 ((t (:foreground ,cyan :weight bold))))
   `(outline-7 ((t (:foreground ,green :weight bold))))
   `(outline-8 ((t (:foreground ,yellow :weight bold))))
   `(org-document-title ((t (:foreground ,bright-white :weight bold :height 1.3))))
   `(org-document-info ((t (:foreground ,bright-cyan))))
   `(org-document-info-keyword ((t (:foreground ,bright-black))))
   `(org-level-1 ((t (:inherit outline-1 :height 1.2))))
   `(org-level-2 ((t (:inherit outline-2 :height 1.1))))
   `(org-level-3 ((t (:inherit outline-3))))
   `(org-level-4 ((t (:inherit outline-4))))
   `(org-level-5 ((t (:inherit outline-5))))
   `(org-level-6 ((t (:inherit outline-6))))
   `(org-level-7 ((t (:inherit outline-7))))
   `(org-level-8 ((t (:inherit outline-8))))
   `(org-block ((t (:foreground ,white))))
   `(org-block-begin-line ((t (:foreground ,bright-black :slant italic))))
   `(org-block-end-line ((t (:inherit org-block-begin-line))))
   `(org-code ((t (:foreground ,bright-yellow))))
   `(org-verbatim ((t (:foreground ,bright-green))))
   `(org-quote ((t (:foreground ,bright-white :slant italic))))
   `(org-table ((t (:foreground ,bright-cyan))))
   `(org-date ((t (:foreground ,bright-blue :underline t))))
   `(org-link ((t (:inherit link))))
   `(org-tag ((t (:foreground ,bright-purple :weight bold))))
   `(org-todo ((t (:foreground ,bright-red :weight bold))))
   `(org-done ((t (:foreground ,bright-green :weight bold))))
   `(org-headline-done ((t (:foreground ,bright-black))))
   `(org-checkbox ((t (:foreground ,bright-cyan :weight bold))))
   `(org-special-keyword ((t (:foreground ,bright-black))))

   ;; Markdown
   `(markdown-header-face-1 ((t (:inherit outline-1 :height 1.2))))
   `(markdown-header-face-2 ((t (:inherit outline-2 :height 1.1))))
   `(markdown-header-face-3 ((t (:inherit outline-3))))
   `(markdown-header-face-4 ((t (:inherit outline-4))))
   `(markdown-header-face-5 ((t (:inherit outline-5))))
   `(markdown-header-face-6 ((t (:inherit outline-6))))
   `(markdown-code-face ((t (:foreground ,bright-yellow))))
   `(markdown-inline-code-face ((t (:foreground ,bright-yellow))))
   `(markdown-link-face ((t (:foreground ,bright-cyan))))
   `(markdown-url-face ((t (:foreground ,bright-blue :underline t))))
   `(markdown-blockquote-face ((t (:foreground ,bright-black :slant italic))))

   ;; Dired, calendar, and miscellaneous built-ins
   `(dired-directory ((t (:foreground ,bright-blue :weight bold))))
   `(dired-symlink ((t (:foreground ,bright-cyan))))
   `(dired-mark ((t (:foreground ,bright-yellow :weight bold))))
   `(dired-marked ((t (:foreground ,bright-purple :weight bold))))
   `(dired-flagged ((t (:foreground ,bright-red :weight bold))))
   `(dired-header ((t (:foreground ,bright-cyan :weight bold))))
   `(calendar-today ((t (:background ,bright-white :foreground ,black :weight bold))))
   `(holiday ((t (:foreground ,bright-red))))
   `(diary ((t (:foreground ,bright-yellow))))
   `(help-key-binding ((t (:background ,bright-black :foreground ,bright-white
                         :box (:line-width -1 :color ,bright-black)))))
   `(custom-variable-tag ((t (:foreground ,bright-cyan :weight bold))))
   `(custom-group-tag ((t (:foreground ,bright-blue :weight bold :height 1.1))))
   `(custom-button ((t (:background ,bright-white :foreground ,black
                       :box (:line-width 1 :style released-button)))))
   `(custom-button-mouse ((t (:background ,bright-cyan :foreground ,black))))
   `(custom-button-pressed ((t (:background ,bright-blue :foreground ,bright-white
                               :box (:line-width 1 :style pressed-button)))))
   `(which-key-key-face ((t (:foreground ,bright-cyan :weight bold))))
   `(which-key-command-description-face ((t (:foreground ,foreground))))
   `(which-key-group-description-face ((t (:foreground ,bright-purple))))
   `(which-key-note-face ((t (:foreground ,bright-yellow))))
   `(transient-heading ((t (:foreground ,bright-yellow :weight bold))))
   `(transient-key ((t (:foreground ,bright-cyan :weight bold))))
   `(transient-argument ((t (:foreground ,bright-green))))
   `(transient-inactive-value ((t (:foreground ,bright-black))))

   ;; Shells and ANSI colors
   `(comint-highlight-prompt ((t (:foreground ,bright-cyan :weight bold))))
   `(comint-highlight-input ((t (:foreground ,bright-white :weight bold))))
   `(eshell-prompt ((t (:foreground ,bright-cyan :weight bold))))
   `(ansi-color-black ((t (:foreground ,black :background ,black))))
   `(ansi-color-red ((t (:foreground ,red :background ,red))))
   `(ansi-color-green ((t (:foreground ,green :background ,green))))
   `(ansi-color-yellow ((t (:foreground ,yellow :background ,yellow))))
   `(ansi-color-blue ((t (:foreground ,blue :background ,blue))))
   `(ansi-color-magenta ((t (:foreground ,purple :background ,purple))))
   `(ansi-color-cyan ((t (:foreground ,cyan :background ,cyan))))
   `(ansi-color-white ((t (:foreground ,white :background ,white))))
   `(ansi-color-bright-black ((t (:foreground ,bright-black :background ,bright-black))))
   `(ansi-color-bright-red ((t (:foreground ,bright-red :background ,bright-red))))
   `(ansi-color-bright-green ((t (:foreground ,bright-green :background ,bright-green))))
   `(ansi-color-bright-yellow ((t (:foreground ,bright-yellow :background ,bright-yellow))))
   `(ansi-color-bright-blue ((t (:foreground ,bright-blue :background ,bright-blue))))
   `(ansi-color-bright-magenta ((t (:foreground ,bright-purple :background ,bright-purple))))
   `(ansi-color-bright-cyan ((t (:foreground ,bright-cyan :background ,bright-cyan))))
   `(ansi-color-bright-white ((t (:foreground ,bright-white :background ,bright-white))))
   `(term-color-black ((t (:foreground ,black :background ,black))))
   `(term-color-red ((t (:foreground ,red :background ,red))))
   `(term-color-green ((t (:foreground ,green :background ,green))))
   `(term-color-yellow ((t (:foreground ,yellow :background ,yellow))))
   `(term-color-blue ((t (:foreground ,blue :background ,blue))))
   `(term-color-magenta ((t (:foreground ,purple :background ,purple))))
   `(term-color-cyan ((t (:foreground ,cyan :background ,cyan))))
   `(term-color-white ((t (:foreground ,white :background ,white)))))

  (custom-theme-set-variables
   'campbell
   `(ansi-color-names-vector
     [,black ,red ,green ,yellow ,blue ,purple ,cyan ,white])))

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

(provide-theme 'campbell)

;;; campbell-theme.el ends here