emacs-doom-themesで簡単オレオレthemeの作り方✨ 


この記事は[Emacs Advent Calendar 2019](https://qiita.com/advent-calendar/2019/emacs)の6日目の記事です

こんにちは🤗
この記事ではemacsのカラーテーマをサクッと作るための方法について説明します

# モチベーション
突然ですけどemacsのテーマって作るの大変じゃないですか？
emacsにはmajor-mode、minor-modeがたくさんありますよね。
たくさんのmodeに対応していくうちにああ俺何やってんだろ…という気持ちになってきてなんの成果も得られないのは嫌ですよね！

# emacs-doom-themes
そんなあなたには簡単にオレオレテーマを作ることができる、
hlissner氏の[emacs-doom-themes](https://github.com/hlissner/emacs-doom-themes)がオススメです。

emacs-doom-themesではベースの色を設定するだけで、
120以上のモード[^1]に反映することができます。すごいですね。

このパッケージは現在[31のテーマ](https://github.com/hlissner/emacs-doom-themes#theme-list)が用意されてるので作らず好きなの選んでもいいかもですね

また説明は割愛しますが、
seagle0128氏の[doom-modeline](https://seagle0128.github.io/doom-modeline/)と併用するとemacsが途端にモダンなエディタへと早変わりします✨

## インストール方法

下記を参照しましょう！
https://github.com/hlissner/emacs-doom-themes#manually

## だいたい設定すればいい項目

だいたい`init.el`に設定すればよい項目を下記に記載します
今回はAtomのカラーテーマ[electron-highlighter-syntax](https://github.com/mikemcbride/electron-highlighter-syntax)を参考に作りたいと思います。


``` emacs-lisp:init.el

;; 1. doom-themesをrequireする
(require 'doom-themes)

;; 2. def-doom-themeでオレオレthemeを定義する
(def-doom-theme my-electron-highlighter-syntax
  "My electron highlighter syntax theme."

  ;; 3. background, foreground, base0-8のthemeを定義
  ;; (名前      '("#RGB"   "256" "16" )) の並びになっています。
  ;; 256と16はソース読んでないのと試してないので設定する必要がわからないですが、
  ;; ターミナルから利用する場合などに利用されてるんじゃないでしょうか🤗
  ((bg         '("#202735" nil   nil ))
   (bg-alt     '("#191B20" nil   nil ))
   (base0      '("#141619" nil   nil ))
   (base1      '("#23262C" nil   nil ))
   (base2      '("#343840" nil   nil ))
   (base3      '("#444A55" nil   nil ))
   (base4      '("#555B6A" nil   nil ))
   (base5      '("#666D7E" nil   nil ))
   (base6      '("#767F93" nil   nil ))
   (base7      '("#8791A8" nil   nil ))
   (base8      '("#97A3BC" nil   nil ))
   (fg         '("#a8b5d1" nil   nil ))
   (fg-alt     '("#506686" nil   nil ))

   ;; 4. color themeを定義
   (grey       base4)
   (red        '("#ff5874" nil   nil ))
   (orange     '("#ffbf7a" nil   nil ))
   (green      '("#6af699" nil   nil ))
   (teal       '("#4db5bd" nil   nil ))
   (yellow     '("#fffa9e" nil   nil ))
   (blue       '("#82aaff" nil   nil ))
   (dark-blue  '("#2257A0" nil   nil ))
   (magenta    '("#c678dd" nil   nil ))
   (violet     '("#c792ea" nil   nil ))
   (cyan       '("#4ff2f8" nil   nil ))
   (dark-cyan  '("#5699AF" nil   nil ))

   ;; 5. face categoriesを定義
   ;; 各モードで利用するカラーを設定してあげます
   ;; なんとなくまあ名前から察せるのかと
   (highlight      blue)
   (vertical-bar   (doom-darken base1 0.2))
   (selection      dark-blue)
   (builtin        magenta)
   (comments       base7)
   (doc-comments   (doom-lighten dark-cyan 0.25))
   (constants      violet)
   (functions      magenta)
   (keywords       blue)
   (methods        cyan)
   (operators      blue)
   (type           yellow)
   (strings        cyan)
   (variables      fg)
   (numbers        orange)
   (region         `(,(doom-blend (car bg) (car magenta) 0.8) ,@(doom-lighten (cdr base1) 0.35)))
   (error          red)
   (warning        yellow)
   (success        green)
   (vc-modified    orange)
   (vc-added       green)
   (vc-deleted     red)

   ;; 6. (任意)custom categoriesを定義
   ;; 他doomでdefualtで設定している部分を設定してあげたい場合はここで
   (modeline-fg     nil))

  ;; 7. (任意)個別で設定したいmodeのfaceを定義
   ;; 各modeで個別に設定したい場合はこちらで設定！
  ((css-proprietary-property :foreground orange)
   (css-property             :foreground green)
   (css-selector             :foreground blue))
  )
```

↓こんな感じになりました。なかなか良い感じですね！

![スクリーンショット 2019-12-06 22.04.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15684/ddd7c2dd-9be8-cd7f-f3eb-c952694e2a8f.png)


## まとめ
いかがでしたでしょうか！
簡単でしたが、そんなあなたには簡単にオレオレテーマを作ることができる、
[emacs-doom-themes](https://github.com/hlissner/emacs-doom-themes)を紹介しました。

それでは！


[^1]: agda2-mode all-the-icons all-the-icons-dired anzu auctex (latex-mode) avy bookmark+ calfw centaur-tabs circe company company-box compilation cperl custom diff-hl diff-mode dired dired+ dired-k dired-subtree diredfl doom-modeline ediff elfeed elixir-mode elscreen enh-ruby-mode erc eshell evil evil-googles evil-mc evil-snipe flx-ido flycheck flycheck-posframe flymake flyspell git-commit git-gutter git-gutter+ git-gutter-fringe gnus helm helpful vhi-lock hideshow highlight-indentation-mode highlight-numbers-mode highlight-quoted-mode hl-line hl-todo hlinum hydra ido iedit imenu-list indent-guide isearch ivy ivy-posframe jabber jdee-mode js2-mode ledger-mode linum linum-relative lsp lui magit man-mode markdown-mode message mic-paren multiple cursors nav-flash neotree nlinum nlinum-hl nlinum-relative notmuch objed org-agenda org-habit org-mode outline parenface parinfer persp-mode perspective pkgbuild-mode popup power rainbow-delimiters re-builder rpm-spec-mode rst-mode sh-mode show-paren smartparens smerge-tool solaire-mode spaceline stripe-buffer swiper tabbar telephone-line term tldr treemacs twittering-mode typescript-mode undo-tree vimish-fold volatile-highlights vterm web-mode wgrep which-func which-key whitespace widget window-divider woman workgroups2 yasnippet makefile-*-mode