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