emacs.d/elpa/immaterial-theme-20190412.1115/immaterial-theme.el
2019-11-22 22:23:12 +01:00

245 lines
12 KiB
EmacsLisp
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;;; immaterial-theme.el --- A flexible theme based on material design principles
;; Copyright (C) 2019 Peter Gardfjäll
;; Author: Peter Gardfjäll
;; Keywords: themes
;; Package-Version: 20190412.1115
;; URL: https://github.com/petergardfjall/emacs-immaterial-theme
;; Version: 0.1.3
;; Package-Requires: ((emacs "25"))
;; Permission is hereby granted, free of charge, to any person obtaining a copy
;; of this software and associated documentation files (the "Software"), to deal
;; in the Software without restriction, including without limitation the rights
;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
;; copies of the Software, and to permit persons to whom the Software is
;; furnished to do so, subject to the following conditions:
;;
;; The above copyright notice and this permission notice shall be included in
;; all copies or substantial portions of the Software.
;;
;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
;; SOFTWARE.
;;; Commentary:
;; To use the theme, put the following in your Emacs configuration file:
;;
;; (load-theme 'immaterial t)
;;
;; Requirements: Emacs 25.
;;
;;; Code:
(deftheme immaterial
"A customizable theme based on Material design principles.")
(defvar immaterial-color-override-alist
'(())
"Values provided here will override values in immaterial-color-alist.
The material color tool https://material.io/tools/color/ is recommended
for constructing primary and secondary color schemes.")
;; Tip: enable rainbow-mode to preview the colors.
(defconst immaterial-color-alist
'(("background-primary" . "#102027")
("background-secondary" . "#37474f")
("background-tertiary" . "#62727b")
("foreground-primary" . "#eeeeee")
("foreground-secondary" . "#dbdbdb")
("foreground-tertiary" . "#c8c8c8")
("primary" . "#4db6ac")
("primary-light" . "#82e9de")
("primary-dark" . "#00867d")
("secondary" . "#aed581")
("secondary-light" . "#e1ffb1")
("secondary-dark" . "#7da453")
("error" . "#ff5555")
("warning" . "#e86310")
("discrete" . "#777777")
("cursor" . "#e86310"))
"The default color palette to use for the theme.
Values can be overridden via immaterial-color-override-alist).
The palette was created using the https://material.io/tools/color/ tool.")
(defun immaterial-color (color-name)
"Retrieves the hex color value registered for a ´COLOR-NAME´.
The overrides in immaterial-color-override-alist take precedence
over the default ones defined in immaterial-color-alist."
(let ((colmap (append immaterial-color-override-alist immaterial-color-alist)))
(cdr (assoc color-name colmap))))
(let ((class '((class color) (min-colors 89)))
(fg1 (immaterial-color "foreground-primary"))
(fg2 (immaterial-color "foreground-secondary"))
(fg3 (immaterial-color "foreground-tertiary"))
(bg1 (immaterial-color "background-primary"))
(bg2 (immaterial-color "background-secondary"))
(bg3 (immaterial-color "background-tertiary"))
(keyword (immaterial-color "primary"))
(builtin (immaterial-color "primary-light"))
(const (immaterial-color "primary-dark"))
(type (immaterial-color "secondary"))
(var (immaterial-color "secondary-light"))
(func (immaterial-color "secondary-dark"))
(str (immaterial-color "secondary-dark"))
(comment (immaterial-color "discrete"))
(linum-fg (immaterial-color "discrete"))
(negation (immaterial-color "warning"))
(warning (immaterial-color "warning"))
(error (immaterial-color "error"))
(cursor (immaterial-color "cursor")))
(custom-theme-set-faces
'immaterial
`(default ((,class (:background ,bg1 :foreground ,fg1))))
;;
;; Syntax higlighting/font-lock minor mode. (syntax rules are provided by
;; the particular major-mode).
;;
;; for the names of built-in functions.
`(font-lock-builtin-face ((,class (:foreground ,builtin))))
;; for comments
`(font-lock-comment-face ((,class (:foreground ,comment))))
;; for comment delimiters, like /* and */ in C.
`(font-lock-comment-delimiter-face ((,class (:foreground ,comment))))
;; for easily-overlooked negation characters.
`(font-lock-negation-char-face ((,class (:foreground ,negation))))
;; for the names of constants, like NULL in C.
`(font-lock-constant-face ((,class (:foreground ,const))))
;; for documentation strings in the code.
`(font-lock-doc-face ((,class (:foreground ,comment))))
;; for the name of a function being defined or declared.
`(font-lock-function-name-face ((,class (:foreground ,func ))))
;; for a keyword with special syntactic significance, like if.
`(font-lock-keyword-face ((,class (:bold t :foreground ,keyword))))
;; for string literals.
`(font-lock-string-face ((,class (:foreground ,str))))
;; for the names of user-defined data types.
`(font-lock-type-face ((,class (:foreground ,type))))
;; for the name of a variable being defined or declared.
`(font-lock-variable-name-face ((,class (:foreground ,var))))
;; for a construct that is peculiar, or that greatly changes the meaning of
;; other text, like ;;;###autoload in Emacs Lisp and #error in C.
`(font-lock-warning-face ((,class (:foreground ,warning :background ,bg2))))
;; region selection
`(region ((,class (:foreground ,fg1 :background ,bg2))))
`(highlight ((,class (:background ,bg2))))
;; hl-line-mode background
`(hl-line ((,class (:background ,bg2))))
;; linum-mode column
`(linum ((t (:foreground ,linum-fg :background ,bg1 :height 1.0 :weight normal))))
;; display-line-numbers-mode (emacs26+)
`(line-number ((t (:foreground ,linum-fg :background ,bg1 :height 1.0 :weight normal))))
`(line-number-current-line ((t (:foreground ,fg1 :background ,bg1 :height 1.0 :weight normal))))
`(fringe ((,class (:background ,bg1))))
`(cursor ((,class (:background ,cursor))))
`(show-paren-match-face ((,class (:background ,fg1 :foreground ,bg1))))
`(show-paren-mismatch-face ((,class (:background ,error))))
`(isearch ((,class (:bold t :foreground ,fg1 :background ,bg2))))
;;
;; mode-line
;;
;; mode-line of the active buffer (e.g. in case of split window)
`(mode-line ((,class (:foreground ,fg1 :background ,bg2 :box (:color ,bg1)))))
;; mode-line of the inactive buffer (e.g. in case of split window)
`(mode-line-inactive ((,class (:foreground ,fg1 :background ,bg1 :box (:color ,bg1)))))
`(mode-line-buffer-id ((,class (:inherit bold :foreground ,fg1))))
;;
;; powerline
;;
`(powerline-active1 ((,class (:background ,bg3 :foreground ,fg1))))
`(powerline-inactive1 ((,class (:background ,bg2 :foreground ,fg1))))
`(vertical-border ((,class (:foreground ,fg3))))
`(minibuffer-prompt ((,class (:bold t :foreground ,keyword))))
`(default-italic ((,class (:italic t))))
`(link ((,class (:foreground ,const :underline t))))
`(gnus-header-content ((,class (:foreground ,keyword))))
`(gnus-header-from ((,class (:foreground ,var))))
`(gnus-header-name ((,class (:foreground ,type))))
`(gnus-header-subject ((,class (:foreground ,func :bold t))))
`(warning ((,class (:foreground ,warning))))
`(ac-completion-face ((,class (:underline t :foreground ,keyword))))
`(info-quoted-name ((,class (:foreground ,builtin))))
`(info-string ((,class (:foreground ,str))))
`(icompletep-determined ((,class :foreground ,builtin)))
`(undo-tree-visualizer-current-face ((,class :foreground ,builtin)))
`(undo-tree-visualizer-default-face ((,class :foreground ,fg2)))
`(undo-tree-visualizer-unmodified-face ((,class :foreground ,var)))
`(undo-tree-visualizer-register-face ((,class :foreground ,type)))
`(slime-repl-inputed-output-face ((,class (:foreground ,type))))
`(trailing-whitespace ((,class :foreground nil :background ,warning)))
`(lazy-highlight ((,class (:foreground ,fg2 :background ,bg3))))
;;
;; ansi-term/term
;;
`(term ((,class (:foreground nil :background nil :inherit default))))
`(term-color-black ((,class (:foreground ,fg1 :background ,fg1))))
`(term-color-red ((,class (:foreground ,(immaterial-color "error") :background ,(immaterial-color "red")))))
`(term-color-blue ((,class (:foreground ,(immaterial-color "primary-light") :background ,(immaterial-color "primary-light")))))
`(term-color-yellow ((,class (:foreground ,(immaterial-color "primary") :background ,(immaterial-color "primary")))))
`(term-color-magenta ((,class (:foreground ,(immaterial-color "warning") :background ,(immaterial-color "warning")))))
`(term-color-cyan ((,class (:foreground ,(immaterial-color "secondary-dark") :background ,(immaterial-color "secondary-dark")))))
`(term-color-green ((,class (:foreground ,(immaterial-color "secondary") :background ,(immaterial-color "secondary")))))
`(term-color-white ((,class (:foreground ,bg1 :background ,bg1))))
;;
;; company -- "complete any" completion engine
;;
;; Face used for the common part of completions in the echo area
`(company-echo-common ((,class (:foreground ,bg1 :background ,fg1))))
;; display (single remaining) suggestion while typing
`(company-preview ((,class (:background ,bg2 :foreground ,fg1))))
`(company-preview-common ((,class (:background ,bg2 :foreground ,fg1))))
`(company-preview-search ((,class (:foreground ,bg2 :background ,fg1))))
;; scrollbar style in company tooltip
`(company-scrollbar-bg ((,class (:background ,bg3))))
`(company-scrollbar-fg ((,class (:foreground ,bg1))))
;; general style of tooltip popup
`(company-tooltip ((,class (:foreground ,bg2 :background ,fg2 :bold t))))
;; annotation appearance (could be the return-type of a function)
`(company-tooltip-annotation ((,class (:weight normal :foreground ,bg2 :background ,fg2))))
;; annotation appearance for the selected item in the completion list
`(company-tooltip-annotation-selection ((,class (:weight normal :inherit company-tooltip-selection))))
`(company-tooltip-search ((,class (:weight normal :inherit company-tooltip-selection))))
;; the highlight style to use when typing and showing common search prefix
`(company-tooltip-common ((,class (:weight extra-bold :foreground ,bg1))))
`(company-tooltip-common-selection ((,class (:foreground ,str))))
;; style for item mouse is hovering over
`(company-tooltip-mouse ((,class (:inherit company-tooltip-selection))))
`(company-tooltip-selection ((,class (:background ,bg3 :foreground ,fg3))))
`(company-tooltip-selection ((,class (:weight bold :foreground ,fg3 :background ,bg3))))
;;
;; sh-mode
;;
`(sh-heredoc ((,class (:foreground nil :inherit font-lock-string-face :weight normal))))
`(sh-quoted-exec ((,class (:foreground nil :inherit font-lock-function-name-face))))
;;
;; neotree
;;
`(neo-dir-link-face ((,class (:foreground ,keyword :inherit bold))))
`(neo-expand-btn-face ((,class (:foreground ,fg1))))
`(neo-file-link-face ((,class (:foreground ,fg1))))
`(neo-root-dir-face ((,class (:foreground ,func :inherit bold))))
;;
;; markdown-mode
;;
`(markdown-code-face ((,class (:foreground ,(immaterial-color "primary-light")))))
))
;;;###autoload
(when load-file-name
(add-to-list 'custom-theme-load-path
(file-name-as-directory (file-name-directory load-file-name))))
(provide-theme 'immaterial)
;;; immaterial-theme.el ends here