emacs/my-theme-theme.el

86 lines
4.0 KiB
EmacsLisp

(deftheme my-theme)
(let* (;; Helper functions
(face (lambda (face &rest args)
(let ((build-face #'(lambda (termspec type args)
(append `(,termspec)
(if (plist-get args :fg) (if (nth type (plist-get args :fg))
`(:foreground ,(nth type (plist-get args :fg)))))
(if (plist-get args :bg) (if (nth type (plist-get args :bg))
`(:background ,(nth type (plist-get args :bg)))))))))
`(,face
,`(,(funcall build-face '((class color) (min-colors 257)) 0 args)
,(funcall build-face '((class color) (min-colors 256)) 1 args)
,(funcall build-face '((class color) (min-colors 16)) 2 args))))))
(color-join (lambda (list)
(format "#%02x%02x%02x"
(ash (nth 0 list) -8)
(ash (nth 1 list) -8)
(ash (nth 2 list) -8))))
(color-blend (lambda (c1 c2 alpha)
(let ((blend (lambda (a b alpha)
(round (+
(* a alpha)
(* b (- 1 alpha)))))))
`(,(funcall blend (nth 0 c1) (nth 0 c2) alpha)
,(funcall blend (nth 1 c1) (nth 1 c2) alpha)
,(funcall blend (nth 2 c1) (nth 2 c2) alpha)))))
(blend (lambda (c1 c2 alpha)
(funcall color-join
(funcall color-blend
(color-values c1)
(color-values c2)
alpha))))
(darken (lambda (color amount)
(funcall blend
"#000000"
color
amount)))
(brighten (lambda (color amount)
(funcall blend
"#ffffff"
color
amount)))
(darken-first (lambda (color amount)
(append
`(,(funcall darken (car color) amount))
(cdr color))))
(brighten-first (lambda (color amount)
(append
`(,(funcall brighten (car color) amount))
(cdr color))))
;; name full 256 16
(common-fg '("#b7c9ee" "white" "white"))
(common-bg '("#0d1017" "black" "black"))
(modeline '("#156570" nil nil))
(comment '("#384345" nil nil))
(doc '("#6a866f" nil nil))
(keyword '("#349672" nil nil))
(preprocessor '("#5ca9af" nil nil))
(function '("#5fc995" nil nil))
(variable '("#6ec5b1" nil nil))
(string '("#15e04a" nil nil))
(type '("#17b343" nil nil))
;; Extra colors #1fa345
)
(custom-theme-set-faces
'my-theme
(funcall face 'default :fg common-fg :bg common-bg)
(funcall face 'cursor :bg common-fg)
(funcall face 'line-number-current-line :fg common-fg)
(funcall face 'line-number :fg (funcall darken-first common-fg 0.25))
(funcall face 'mode-line-inactive :bg (funcall darken-first common-bg 0.35) :fg common-fg)
(funcall face 'mode-line :bg modeline :fg common-fg)
(funcall face 'hl-line :bg (funcall darken-first common-bg 0.15))
(funcall face 'font-lock-comment-face :fg comment)
(funcall face 'font-lock-doc-face :fg doc)
(funcall face 'font-lock-keyword-face :fg keyword)
(funcall face 'font-lock-preprocessor-face :fg preprocessor)
(funcall face 'font-lock-function-name-face :fg function)
(funcall face 'font-lock-variable-name-face :fg variable)
(funcall face 'font-lock-string-face :fg string)
(funcall face 'font-lock-type-face :fg type)
))
(provide-theme 'my-theme)