[from now] 2012/05/29 14:34:06

diff --git c/.gitignore i/.gitignore
index 43cbc3e..e43b0f9 100644
--- c/.gitignore
+++ i/.gitignore
@@ -1,46 +1 @@
-*
-!.gitignore
-
-!d0tfiles/
-
-!emacs.d/
-emacs.d/*
-!emacs.d/README.md
-
-!emacs.d/init.el
-!emacs.d/customize.el
-
-!emacs.d/bin/
-!emacs.d/modules/
-!emacs.d/themes/
-!emacs.d/vendor/
-
-!emacs.d/tmp/
-emacs.d/tmp/*
-!emacs.d/tmp/.gitkeep
-
-!emacs.d/var/
-emacs.d/var/*
-!emacs.d/var/.gitkeep
-
-
-!zsh/
-zsh/*
-!zsh/README.md
-!zsh/zshrc
-!zsh/zshenv
-
-!zsh/bin/
-!zsh/bundle/
-!zsh/functions/
-!zsh/lib/
-!zsh/completions/
-!zsh/zshrc.d/
-
-
-!vim/
-vim/*
-!vim/README.md
-!vim/vimrc
-!vim/gvimrc
-
+.DS_Store
diff --git c/emacs.d/init.el i/emacs.d/init.el
index 5ae2aa3..0702e15 100644
--- c/emacs.d/init.el
+++ i/emacs.d/init.el
@@ -2,13 +2,38 @@
 ;;; init.el
 (setq user-full-name "Kaz Yoshihara"
       user-mail-address "m at kroneko dot com")
+
+(defun user-first-name ()
+  (car (split-string user-full-name)))
+
 ;; (setq debug-on-error t)
 (setq debug-on-error nil)
-
 (when (< emacs-major-version 23)
   (setq user-emacs-directory "~/.emacs.d"))

 (setq emacsd user-emacs-directory
+      emacsd-bin-dir (file-name-as-directory (concat emacsd "bin/"))
+
+      emacsd-etc-dir (file-name-as-directory (concat emacsd "etc/"))
+      emacsd-snippets-dir (file-name-as-directory (concat emacsd-etc-dir "snippets/"))
+
+      emacsd-modules-dir (file-name-as-directory (concat emacsd "modules/"))
+      emacsd-vendor (file-name-as-directory) (concat emacsd "vendor/")
+
+      emacsd-tmp-dir (file-name-as-directory (concat emacsd "tmp/"))
+      emacsd-backups-dir (file-name-as-directory (concat emacsd-tmp-dir "backups/"))
+      emacsd-autosaves-dir (file-name-as-directory (concat emacsd-tmp-dir "autosaves/"))
+
+      emacsd-private-dir (file-name-as-directory (concat emacsd "private/"))
+      custom-file (concat emacsd "custom.el"))
+(progn
+  (make-directory emacsd-etc-dir t)
+  (make-directory emacsd-tmp-dir t)
+  (make-directory emacsd-backups-dir t)
+  (make-directory emacsd-autosaves-dir t))
+
+
+(setq emacsd user-emacs-directory
       emacsd-modules (expand-file-name "modules/" user-emacs-directory)
       emacsd-scripts (expand-file-name "scripts/" user-emacs-directory)
       emacsd-private (expand-file-name "private/" user-emacs-directory)
@@ -17,13 +42,13 @@
       emacsd-vendor (expand-file-name "vendor/" user-emacs-directory)
       emacsd-vendor (expand-file-name "vendor/" user-emacs-directory))

-(setq custom-file (concat emacsd "custom.el"))

 (require 'package)
 (add-to-list 'package-archives
              '("melpa" . "http://melpa.milkbox.net/packages/") t)
 (add-to-list 'package-archives
              '("marmalade" . "http://marmalade-repo.org/packages/") t)
+
 (package-initialize)
 (setq url-http-attempt-keepalives nil)
 (unless package-archive-contents
diff --git c/snippets/clojure-mode/defn i/snippets/clojure-mode/defn
new file mode 100644
index 0000000..8a584ea
--- /dev/null
+++ i/snippets/clojure-mode/defn
@@ -0,0 +1,6 @@
+#name: defn
+# --
+(defn ${1:name} ${2:
+  "${3:doc-string}"
+  }[${4:arg-list}]
+  $0)
diff --git c/snippets/clojure-mode/ns i/snippets/clojure-mode/ns
new file mode 100644
index 0000000..9502d23
--- /dev/null
+++ i/snippets/clojure-mode/ns
@@ -0,0 +1,4 @@
+#name: ns
+# --
+(ns ${1:name}
+  (:use [${2:use}]))$0
[from now] 2012/05/29 14:35:08

diff --git c/emacs.d/bin/aozora-proc i/emacs.d/bin/aozora-proc
new file mode 160000
index 0000000..3ce0ba6
--- /dev/null
+++ i/emacs.d/bin/aozora-proc
@@ -0,0 +1 @@
+Subproject commit 3ce0ba631ed915a0ee7dc63a3d563b019a99d960
diff --git c/emacs.d/bin/primes.el i/emacs.d/bin/primes.el
new file mode 100644
index 0000000..52f39a1
--- /dev/null
+++ i/emacs.d/bin/primes.el
@@ -0,0 +1,74 @@
+;;; Primes
+;; from primes.el by
+;; Nelson H. F. Beebe beebe at math.utah.edu
+
+;; For details of this 2300-year algorithm due to Euclid,
+;; see, e.g.
+;; Ronald L. Graham, Donald E. Knuth and Oren Patashnik,
+;; `Concrete Mathematics' pp. 103--104
+;; (Addison-Wesley, Reading, MA, USA, 1989, ISBN 0-201-14236-8).
+;;
+;; The complexity analysis is surprisingly difficult;
+;; see Donald
+;; E. Knuth, ``Seminumerical algorithms, The Art of Computer
+;; Programming, Volume 2'', third edition (Addison-Wesley, Reading,
+;; MA, USA, 1997, ISBN 0-201-89684-2), pp. 356--373.
+
+(defun gcd (m n)
+  "Return the Greatest Common Divisor of integers M and N.
+ Returns nil if they are invalid."
+  (if (and (integerp m)
+           (integerp n))
+      (progn
+        (setq m (abs m))
+        (setq n (abs n)) ;; force positive for the algorithm below
+        (cond
+         ((and (= m 0) (= n 0)) 0) ;; gcd(0,0) ==> 0 by definition
+         ((and (= m 0) (> n 0)) n) ;; gcd(0,n) ==> n
+         ((and (> m 0) (= n 0)) m) ;; gcd(m,n) ==> m
+         ((and (> m n) (> n 0)) (gcd n m)) ;; try with reversed args
+         (t (gcd (% n m) m)))) ;; else reduce recursively
+    nil))
+
+(defun lcd (m, n)
+  "Returns the Least Common Multiple of integers M and N.
+Returns nil if they are invalid or the result is not presentable.
+e.g., the product M*N overflows"
+  (cond
+   ((and (integerp m) (integerp n))
+    (let ((mn) (the-gcd) (the-lcm))
+      (if (or (= m 0) (= n 0)) 0 ;; lcm(0,any) ==> 0
+        (setq m (abs m))
+        (setq n (abs n))
+        (setq the-gcd (gcd m n))
+        (setq mn (* (float m) (float n)))
+        (setq the-lcm (/ mn the-gcd))
+        (if (= (* the-gcd the-lcm) mn) (floor the-lcm)
+          nil)))) ;; out of range or invalid
+   (t nil)))
+
+(defun prime-factors (n)
+  "Return a list of prime factors of N.
+
+If N is prime, there are no factors,
+except the trivial one of N itself,so the return value is the list (N).
+Thus, if (length (prime-factors N)) is 1, N is prime.
+
+Otherwise, if N is not an integer greater than 1, the return value is
+nil, equivalent to an empty list."
+  (interactive)
+  (let ((result-list nil)
+        (original-n n))
+    (if (and (integerp n) (> n 1))
+        (let ((limit (/ n 2))
+              (divisor 2))
+          (while (<= divisor limit)
+            (if (= 0 (% n divisor)
+                   limit n
+                   result-list (append result-list (list divisor)))
+                (if (= divisor 2)
+                    (setq divisor 3)
+                  (setq divisor (+ divisor 3)))))
+          (if (null result-list)
+              (setq result-list (list original-n)))))
+    result-list))
diff --git c/emacs.d/modules/javascript.el i/emacs.d/modules/javascript.el
new file mode 100644
index 0000000..b7af34f
--- /dev/null
+++ i/emacs.d/modules/javascript.el
@@ -0,0 +1,7 @@
+;; javascript.el
+(setq js2-auto-indent-p t
+      js2-mirror-mode t
+      js2-highlight-level 3
+      js2-mode-escape-quotes nil
+      js2-allow-keywords-as-property-names t
+      js2-cleanup-whitespace t)
diff --git c/emacs.d/modules/kroneko.el i/emacs.d/modules/kroneko.el
new file mode 100644
index 0000000..bbf3005
--- /dev/null
+++ i/emacs.d/modules/kroneko.el
@@ -0,0 +1,474 @@
+(defconst color-theme-kroneko-colors
+  '((night . ((background . "")))
+    (day . ((background . "")))))
+
+(defconst color-theme-sanityinc-tomorrow-colors
+  '((night . ((background . "#1d1f21")
+              (current-line . "#282a2e")
+              (selection . "#373b41")
+              (foreground . "#c5c8c6")
+              (comment . "#969896")
+              (red . "#cc6666")
+              (orange . "#de935f")
+              (yellow . "#f0c674")
+              (green . "#b5bd68")
+              (aqua . "#8abeb7")
+              (blue . "#81a2be")
+              (purple . "#b294bb")))
+    (day . ((background . "#ffffff")
+            (current-line . "#efefef")
+            (selection . "#d6d6d6")
+            (foreground . "#4d4d4c")
+            (comment . "#8e908c")
+            (red . "#c82829")
+            (orange . "#f5871f")
+            (yellow . "#eab700")
+            (green . "#718c00")
+            (aqua . "#3e999f")
+            (blue . "#4271ae")
+            (purple . "#8959a8")))
+    (eighties . ((background . "#2d2d2d")
+                 (current-line . "#393939")
+                 (selection . "#515151")
+                 (foreground . "#cccccc")
+                 (comment . "#999999")
+                 (red . "#f2777a")
+                 (orange . "#f99157")
+                 (yellow . "#ffcc66")
+                 (green . "#99cc99")
+                 (aqua . "#66cccc")
+                 (blue . "#6699cc")
+                 (purple . "#cc99cc")))
+    (blue . ((background . "#002451")
+             (current-line . "#00346e")
+             (selection . "#003f8e")
+             (foreground . "#ffffff")
+             (comment . "#7285b7")
+             (red . "#ff9da4")
+             (orange . "#ffc58f")
+             (yellow . "#ffeead")
+             (green . "#d1f1a9")
+             (aqua . "#99ffff")
+             (blue . "#bbdaff")
+             (purple . "#ebbbff")))
+    (bright . ((background . "#000000")
+               (current-line . "#2a2a2a")
+               (selection . "#424242")
+               (foreground . "#eaeaea")
+               (comment . "#969896")
+               (red . "#d54e53")
+               (orange . "#e78c45")
+               (yellow . "#e7c547")
+               (green . "#b9ca4a")
+               (aqua . "#70c0b1")
+               (blue . "#7aa6da")
+               (purple . "#c397d8")))))
+
+
+(defmacro color-theme-kroneko--with-colors (mode &rest body)
+  "Execute BODY in a scope with variables bound to the various MODE."
+  `(let* ((colors (or (cdr (assoc ,mode color-theme-kroneko-colors))
+                      (error "No such theme mode.")))
+          (background (cdr (assoc 'background colors)))
+          (current-line (cdr (assoc 'current-line colors)))
+          (selection (cdr (assoc 'selection colors)))
+          (foreground (cdr (assoc 'foreground colors)))
+          (comment (cdr (assoc 'comment colors)))
+          (red (cdr (assoc 'red colors)))
+          (green (cdr (assoc 'green colors)))
+          (blue (cdr (assoc 'blue colors)))
+          (orange (cdr (assoc 'orange colors)))
+          (yellow (cdr (assoc 'yellow colors)))
+          (aqua (cdr (assoc 'aqua colors)))
+          (class '((class color) (min-colors 89))))
+     ,@body))
+
+(defmacro color-theme-kroneko--face-specs ()
+  "Return a backquote which defines a list of face specs.
+
+It expects to be evaluated in a scope in which the various color
+names to which it refers are bound."
+  (quote
+   `(;; Standard font lock faces
+     (default ((,class (:foreground ,foreground :background ,background))))
+     (bold ((,class (:weight bold))))
+     (bold-italic ((,class (:slant italic :weight bold))))
+     (underline ((,class (:underline t))))
+     (italic ((,class (:slant italic))))
+     (font-lock-builtin-face ((,class (:foreground ,purple))))
+     (font-lock-comment-delimiter-face ((,class (:foreground ,comment :slant italic))))
+     (font-lock-comment-face ((,class (:foreground ,comment :slant italic))))
+     (font-lock-constant-face ((,class (:foreground ,orange))))
+     (font-lock-doc-face ((,class (:foreground ,purple))))
+     (font-lock-doc-string-face ((,class (:foreground ,yellow))))
+     (font-lock-function-name-face ((,class (:foreground ,blue))))
+     (font-lock-keyword-face ((,class (:foreground ,green))))
+     (font-lock-negation-char-face ((,class (:foreground ,green))))
+     (font-lock-preprocessor-face ((,class (:foreground ,purple))))
+     (font-lock-regexp-grouping-backslash ((,class (:foreground ,yellow))))
+     (font-lock-regexp-grouping-construct ((,class (:foreground ,purple))))
+     (font-lock-string-face ((,class (:foreground ,aqua))))
+     (font-lock-type-face ((,class (:foreground ,orange))))
+     (font-lock-variable-name-face ((,class (:foreground ,yellow))))
+     (font-lock-warning-face ((,class (:weight bold :foreground ,red))))
+     (shadow ((,class (:foreground ,comment))))
+     (success ((,class (:foreground ,green))))
+     (error ((,class (:foreground ,red))))
+     (warning ((,class (:foreground ,orange))))
+
+     ;; Flymake
+     (flymake-warnline ((,class (:underline ,orange :background ,background))))
+     (flymake-errline ((,class (:underline ,red :background ,background))))
+
+     ;; Clojure errors
+     (clojure-test-failure-face ((,class (:background nil :inherit flymake-warnline))))
+     (clojure-test-error-face ((,class (:background nil :inherit flymake-errline))))
+     (clojure-test-success-face
+      ((,class (:background nil :foreground nil :underline ,green))))
+
+     ;; For Brian Carper's extended clojure syntax table
+     (clojure-keyword ((,class (:foreground ,yellow))))
+     (clojure-parens ((,class (:foreground ,foreground))))
+     (clojure-braces ((,class (:foreground ,green))))
+     (clojure-brackets ((,class (:foreground ,yellow))))
+     (clojure-double-quote ((,class (:foreground ,aqua :background nil))))
+     (clojure-special ((,class (:foreground ,blue))))
+     (clojure-java-call ((,class (:foreground ,purple))))
+
+     ;; Rainbow-delimiters
+     (rainbow-delimiters-depth-1-face ((,class (:foreground ,foreground))))
+     (rainbow-delimiters-depth-2-face ((,class (:foreground ,aqua))))
+     (rainbow-delimiters-depth-3-face ((,class (:foreground ,yellow))))
+     (rainbow-delimiters-depth-4-face ((,class (:foreground ,green))))
+     (rainbow-delimiters-depth-5-face ((,class (:foreground ,blue))))
+     (rainbow-delimiters-depth-6-face ((,class (:foreground ,foreground))))
+     (rainbow-delimiters-depth-7-face ((,class (:foreground ,aqua))))
+     (rainbow-delimiters-depth-8-face ((,class (:foreground ,yellow))))
+     (rainbow-delimiters-depth-9-face ((,class (:foreground ,green))))
+     (rainbow-delimiters-unmatched-face ((,class (:foreground ,red))))
+
+     ;; MMM-mode
+     (mmm-code-submode-face ((,class (:background ,current-line))))
+     (mmm-comment-submode-face ((,class (:inherit font-lock-comment-face))))
+     (mmm-output-submode-face ((,class (:background ,current-line))))
+
+     ;; Search
+     (match ((,class (:foreground ,blue :background ,background :inverse-video t))))
+     (isearch ((,class (:foreground ,yellow :background ,background :inverse-video t))))
+     (isearch-lazy-highlight-face
+      ((,class (:foreground ,aqua :background ,background :inverse-video t))))
+     (isearch-fail
+      ((,class (:background ,background :inherit font-lock-warning-face :inverse-video t))))
+
+     ;; IDO
+     (ido-subdir ((,class (:foreground ,purple))))
+     (ido-first-match ((,class (:foreground ,orange))))
+     (ido-only-match ((,class (:foreground ,green))))
+     (ido-indicator ((,class (:foreground ,red :background ,background))))
+     (ido-virtual ((,class (:foreground ,comment))))
+
+     ;; Emacs interface
+     (cursor ((,class (:background ,red))))
+     (fringe ((,class (:background ,current-line))))
+     (linum ((,class (:background ,current-line))))
+     (border ((,class (:background ,current-line))))
+     (border-glyph ((,class (nil))))
+     (highlight ((,class (:inverse-video nil :background ,current-line))))
+     (gui-element ((,class (:background ,current-line :foreground ,foreground))))
+     (mode-line ((,class (:foreground nil :background ,current-line
+                                      :box (:line-width 1 :color ,foreground)))))
+     (mode-line-buffer-id ((,class (:foreground ,purple :background nil))))
+     (mode-line-inactive ((,class (:inherit mode-line
+                                       :foreground ,comment
+                                       :background ,current-line :weight normal
+                                       :box (:line-width 1 :color ,foreground)))))
+     (mode-line-emphasis ((,class (:foreground ,foreground :slant italic))))
+     (mode-line-highlight ((,class (:foreground ,purple :box nil :weight bold))))
+     (minibuffer-prompt ((,class (:foreground ,blue))))
+     (region ((,class (:background ,selection))))
+     (secondary-selection ((,class (:background ,current-line))))
+
+     (header-line
+      ((,class (:background nil :foreground ,foreground :weight bold :inherit nil))))
+     (trailing-whitespace ((,class (:background ,red :underline nil))))
+
+     ;; Parenthesis matching (built-in)
+     (show-paren-match ((,class (:background nil :foreground nil :inverse-video t))))
+     (show-paren-mismatch ((,class (:background ,purple :foreground ,background))))
+
+     ;; Parenthesis matching (mic-paren)
+     (paren-face-match ((,class (:foreground nil :background nil :inherit show-paren-match))))
+     (paren-face-mismatch
+      ((,class (:foreground nil :background nil :inherit show-paren-mismatch))))
+     (paren-face-no-match
+      ((,class (:foreground nil :background nil :inherit show-paren-mismatch))))
+
+     ;; Parenthesis dimming (parenface)
+     (paren-face ((,class (:foreground ,comment :background nil))))
+
+     (sh-heredoc ((,class (:foreground nil :inherit font-lock-string-face :weight normal))))
+     (sh-quoted-exec ((,class (:foreground nil :inherit font-lock-preprocessor-face))))
+     (slime-highlight-edits-face ((,class (:weight bold))))
+     (slime-repl-input-face ((,class (:weight normal :underline nil))))
+     (slime-repl-prompt-face ((,class (:underline nil :weight bold :foreground ,purple))))
+     (slime-repl-result-face ((,class (:foreground ,green))))
+     (slime-repl-output-face ((,class (:foreground ,blue :background ,background))))
+
+     (csv-separator-face ((,class (:foreground ,orange))))
+
+     (diff-added ((,class (:foreground ,green))))
+     (diff-changed ((,class (:foreground ,purple))))
+     (diff-removed ((,class (:foreground ,orange))))
+     (diff-header ((,class (:foreground ,aqua :background nil))))
+     (diff-file-header ((,class (:foreground ,blue :background nil))))
+     (diff-hunk-header ((,class (:foreground ,purple))))
+
+     ;; undo-tree
+     (undo-tree-visualizer-default-face ((,class (:foreground ,foreground))))
+     (undo-tree-visualizer-current-face ((,class (:foreground ,green :weight bold))))
+     (undo-tree-visualizer-active-branch-face ((,class (:foreground ,red))))
+     (undo-tree-visualizer-register-face ((,class (:foreground ,yellow))))
+
+     ;; dired+
+     (diredp-dir-heading ((,class (:foreground nil :background nil :inherit heading))))
+     (diredp-dir-priv ((,class (:foreground ,aqua :background nil))))
+     (diredp-exec-priv ((,class (:foreground ,blue :background nil))))
+     (diredp-file-name ((,class (:foreground ,yellow))))
+     (diredp-file-suffix ((,class (:foreground ,green))))
+     (diredp-flag-mark-line ((,class (:background nil :inherit highlight))))
+     (diredp-ignored-file-name ((,class (:foreground ,comment))))
+     (diredp-link-priv ((,class (:background nil :foreground ,purple))))
+     (diredp-no-priv ((,class (:background nil))))
+     (diredp-number ((,class (:foreground ,yellow))))
+     (diredp-other-priv ((,class (:background nil :foreground ,purple))))
+     (diredp-rare-priv ((,class (:foreground ,red :background nil))))
+     (diredp-read-priv ((,class (:foreground ,green :background nil))))
+     (diredp-symlink ((,class (:foreground ,purple))))
+     (diredp-write-priv ((,class (:foreground ,yellow :background nil))))
+
+     ;; Magit (a patch is pending in magit to make these standard upstream)
+     (magit-branch ((,class (:foreground ,green))))
+     (magit-item-highlight ((,class (:inherit highlight :background nil))))
+     (magit-log-graph ((,class (:foreground ,comment))))
+     (magit-log-sha1 ((,class (:foreground ,yellow))))
+     (magit-log-head-label-bisect-bad ((,class (:foreground ,red))))
+     (magit-log-head-label-bisect-good ((,class (:foreground ,green))))
+     (magit-log-head-label-default ((,class (:foreground ,yellow :box nil :weight bold))))
+     (magit-log-head-label-local ((,class (:foreground ,purple :box nil :weight bold))))
+     (magit-log-head-label-remote ((,class (:foreground ,purple :box nil :weight bold))))
+     (magit-log-head-label-tags ((,class (:foreground ,aqua :box nil :weight bold))))
+     (magit-section-title ((,class (:foreground ,blue :weight bold))))
+
+     (link ((,class (:foreground nil :underline t))))
+     (widget-button ((,class (:underline t))))
+     (widget-field
+      ((,class (:background ,current-line :box (:line-width 1 :color ,foreground)))))
+
+     ;; Compilation (most faces politely inherit from 'success, 'error, 'warning etc.)
+     (compilation-column-number ((,class (:foreground ,yellow))))
+     (compilation-line-number ((,class (:foreground ,yellow))))
+     (compilation-message-face ((,class (:foreground ,blue))))
+
+     ;; Grep
+     (grep-context-face ((,class (:foreground ,comment))))
+     (grep-error-face ((,class (:foreground ,red :weight bold :underline t))))
+     (grep-hit-face ((,class (:foreground ,blue))))
+     (grep-match-face ((,class (:foreground nil :background nil :inherit match))))
+
+     (org-date ((,class (:foreground ,blue :underline t))))
+     (org-agenda-structure ((,class (:foreground ,purple))))
+     (org-agenda-date ((,class (:foreground ,blue :underline nil))))
+     (org-agenda-dimmed-todo-face ((,class (:foreground ,comment))))
+     (org-block ((,class (:foreground ,orange))))
+     (org-code ((,class (:foreground ,yellow))))
+     (org-column ((,class (:background ,current-line))))
+     (org-document-info ((,class (:foreground ,aqua))))
+     (org-document-info-keyword ((,class (:foreground ,green))))
+     (org-document-title ((,class (:weight bold :foreground ,orange :height 1.44))))
+     (org-done ((,class (:foreground ,green))))
+     (org-formula ((,class (:foreground ,red))))
+     (org-link ((,class (:foreground ,blue :underline t))))
+     (org-scheduled ((,class (:foreground ,green))))
+     (org-scheduled-previously ((,class (:foreground ,orange))))
+     (org-scheduled-today ((,class (:foreground ,green))))
+     (org-special-keyword ((,class (:foreground ,orange))))
+     (org-table ((,class (:foreground ,purple))))
+     (org-todo ((,class (:foreground ,red))))
+     (org-upcoming-deadline ((,class (:foreground ,orange))))
+     (org-warning ((,class (:weight bold :foreground ,red))))
+
+     (markdown-header-face ((,class (:inherit header-line))))
+     (markdown-url-face ((,class (:inherit link))))
+     (markdown-link-face ((,class (:foreground ,blue :underline t))))
+
+     (hl-sexp-face ((,class (:background ,current-line))))
+     (highlight-80+ ((,class (:background ,current-line))))
+
+     ;; Python-specific overrides
+     (py-builtins-face ((,class (:foreground ,orange :weight normal))))
+
+     ;; js2-mode
+     (js2-warning-face ((,class (:underline ,orange))))
+     (js2-error-face ((,class (:underline ,red))))
+     (js2-external-variable-face ((,class (:foreground ,purple))))
+     (js2-function-param-face ((,class (:foreground ,blue))))
+     (js2-instance-member-face ((,class (:foreground ,blue))))
+     (js2-private-function-call-face ((,class (:foreground ,red))))
+
+     ;; js3-mode
+     (js3-warning-face ((,class (:underline ,orange))))
+     (js3-error-face ((,class (:underline ,red))))
+     (js3-external-variable-face ((,class (:foreground ,purple))))
+     (js3-function-param-face ((,class (:foreground ,blue))))
+     (js3-jsdoc-tag-face ((,class (:foreground ,orange))))
+     (js3-jsdoc-type-face ((,class (:foreground ,aqua))))
+     (js3-jsdoc-value-face ((,class (:foreground ,yellow))))
+     (js3-jsdoc-html-tag-name-face ((,class (:foreground ,blue))))
+     (js3-jsdoc-html-tag-delimiter-face ((,class (:foreground ,green))))
+     (js3-instance-member-face ((,class (:foreground ,blue))))
+     (js3-private-function-call-face ((,class (:foreground ,red))))
+
+     ;; nxml
+     (nxml-name-face ((,class (:foreground unspecified :inherit font-lock-constant-face))))
+     (nxml-attribute-local-name-face
+      ((,class (:foreground unspecified :inherit font-lock-variable-name-face))))
+     (nxml-ref-face ((,class (:foreground unspecified :inherit font-lock-preprocessor-face))))
+     (nxml-delimiter-face
+      ((,class (:foreground unspecified :inherit font-lock-keyword-face))))
+     (nxml-delimited-data-face
+      ((,class (:foreground unspecified :inherit font-lock-string-face))))
+     (rng-error-face ((,class (:underline ,red))))
+
+     ;; RHTML
+     (erb-delim-face ((,class (:background ,current-line))))
+     (erb-exec-face ((,class (:background ,current-line :weight bold))))
+     (erb-exec-delim-face ((,class (:background ,current-line))))
+     (erb-out-face ((,class (:background ,current-line :weight bold))))
+     (erb-out-delim-face ((,class (:background ,current-line))))
+     (erb-comment-face ((,class (:background ,current-line :weight bold :slant italic))))
+     (erb-comment-delim-face ((,class (:background ,current-line))))
+
+     ;; Message-mode
+     (message-header-other
+      ((,class (:inherit header-line :foreground nil :background nil :weight normal))))
+     (message-header-subject
+      ((,class (:inherit message-header-other :weight bold :foreground ,yellow))))
+     (message-header-to
+      ((,class (:inherit message-header-other :weight bold :foreground ,orange))))
+     (message-header-cc ((,class (:inherit message-header-to :foreground nil))))
+     (message-header-name
+      ((,class (:inherit header-line :foreground ,green :background nil))))
+     (message-header-newsgroups ((,class (:foreground ,aqua :background nil :slant normal))))
+     (message-separator ((,class (:foreground ,purple))))
+
+     ;; Gnus
+     (gnus-cite-1 ((,class (:inherit outline-1 :foreground nil))))
+     (gnus-cite-2 ((,class (:inherit outline-2 :foreground nil))))
+     (gnus-cite-3 ((,class (:inherit outline-3 :foreground nil))))
+     (gnus-cite-4 ((,class (:inherit outline-4 :foreground nil))))
+     (gnus-cite-5 ((,class (:inherit outline-5 :foreground nil))))
+     (gnus-cite-6 ((,class (:inherit outline-6 :foreground nil))))
+     (gnus-cite-7 ((,class (:inherit outline-7 :foreground nil))))
+     (gnus-cite-8 ((,class (:inherit outline-8 :foreground nil))))
+     ;; there are several more -cite- faces...
+     (gnus-header-content
+      ((,class (:inherit header-line :foreground nil :background nil :weight normal))))
+     (gnus-header-subject
+      ((,class (:inherit gnus-header-content :weight bold :foreground ,yellow))))
+     (gnus-header-from
+      ((,class (:inherit gnus-header-content :weight bold :foreground ,orange))))
+     (gnus-header-name ((,class (:inherit header-line :foreground ,green :background nil))))
+     (gnus-button ((,class (:inherit link :foreground nil))))
+     (gnus-signature ((,class (:inherit font-lock-comment-face))))
+
+     (gnus-summary-normal-unread ((,class (:foreground ,blue :weight normal))))
+     (gnus-summary-normal-read ((,class (:foreground ,foreground :weight normal))))
+     (gnus-summary-normal-ancient ((,class (:foreground ,aqua :weight normal))))
+     (gnus-summary-normal-ticked ((,class (:foreground ,orange :weight normal))))
+     (gnus-summary-low-unread ((,class (:foreground ,comment :weight normal))))
+     (gnus-summary-low-read ((,class (:foreground ,comment :weight normal))))
+     (gnus-summary-low-ancient ((,class (:foreground ,comment :weight normal))))
+     (gnus-summary-high-unread ((,class (:foreground ,yellow :weight normal))))
+     (gnus-summary-high-read ((,class (:foreground ,green :weight normal))))
+     (gnus-summary-high-ancient ((,class (:foreground ,green :weight normal))))
+     (gnus-summary-high-ticked ((,class (:foreground ,orange :weight normal))))
+     (gnus-summary-cancelled ((,class (:foreground ,red :background nil :weight normal))))
+
+     (gnus-group-mail-low ((,class (:foreground ,comment))))
+     (gnus-group-mail-low-empty ((,class (:foreground ,comment))))
+     (gnus-group-mail-1 ((,class (:foreground nil :weight normal :inherit outline-1))))
+     (gnus-group-mail-2 ((,class (:foreground nil :weight normal :inherit outline-2))))
+     (gnus-group-mail-3 ((,class (:foreground nil :weight normal :inherit outline-3))))
+     (gnus-group-mail-4 ((,class (:foreground nil :weight normal :inherit outline-4))))
+     (gnus-group-mail-5 ((,class (:foreground nil :weight normal :inherit outline-5))))
+     (gnus-group-mail-6 ((,class (:foreground nil :weight normal :inherit outline-6))))
+     (gnus-group-mail-1-empty ((,class (:inherit gnus-group-mail-1 :foreground ,comment))))
+     (gnus-group-mail-2-empty ((,class (:inherit gnus-group-mail-2 :foreground ,comment))))
+     (gnus-group-mail-3-empty ((,class (:inherit gnus-group-mail-3 :foreground ,comment))))
+     (gnus-group-mail-4-empty ((,class (:inherit gnus-group-mail-4 :foreground ,comment))))
+     (gnus-group-mail-5-empty ((,class (:inherit gnus-group-mail-5 :foreground ,comment))))
+     (gnus-group-mail-6-empty ((,class (:inherit gnus-group-mail-6 :foreground ,comment))))
+
+     (erc-direct-msg-face ((,class (:foreground ,orange))))
+     (erc-error-face ((,class (:foreground ,red))))
+     (erc-header-face ((,class (:foreground ,foreground :background ,selection))))
+     (erc-input-face ((,class (:foreground ,green))))
+     (erc-keyword-face ((,class (:foreground ,yellow))))
+     (erc-current-nick-face ((,class (:foreground ,green))))
+     (erc-my-nick-face ((,class (:foreground ,green))))
+     (erc-nick-default-face ((,class (:weight normal :foreground ,purple))))
+     (erc-nick-msg-face ((,class (:weight normal :foreground ,yellow))))
+     (erc-notice-face ((,class (:foreground ,comment))))
+     (erc-pal-face ((,class (:foreground ,orange))))
+     (erc-prompt-face ((,class (:foreground ,blue))))
+     (erc-timestamp-face ((,class (:foreground ,aqua))))
+
+     (custom-variable-tag ((,class (:foreground ,blue))))
+     (custom-group-tag ((,class (:foreground ,blue))))
+     (custom-state ((,class (:foreground ,green)))))))
+
+
+(defmacro color-theme-kroneko--frame-parameter-specs ()
+  "Return a backquote which defines a list of frame parameter specs.
+
+These are required by color-theme's `color-theme-install', but
+not by the new `deftheme' mechanism. It expects to be evaluated
+in a scope in which the various color names to which it refers
+are bound."
+  (quote
+   `(((background-color . ,background)
+      (background-mode . light)
+      (border-color . ,foreground)
+      (cursor-color . ,purple)
+      (foreground-color . ,foreground)
+      (mouse-color . ,aqua)))))
+
+(defun color-theme-kroneko--theme-name (mode)
+  (intern (format "kroneko-%s" (symbol-name mode))))
+
+(defmacro color-theme-kroneko--define-theme (mode)
+  "Define a theme for the kroneko variant `MODE'."
+  (let ((name (color-theme-kroneko--theme-name mode))
+        (doc (format "" mode)))
+    `(progn
+       (deftheme ,name ,doc)
+       (color-theme-kroneko--with-colors
+        ',mode
+        (apply 'custom-theme-set-faces ',name
+               (color-theme-kroneko--face-specs))
+        (custom-theme-set-variables
+         ',name
+         `(ansi-color-names-vector
+           (vector ,foreground
+                   ,red
+                   ,green
+                   ,yellow
+                   ,blue
+                   ,purple
+                   ,aqua
+                   ,background))
+         '(ansi-color-faces-vector
+           [default bold shadow italic underline bold bold-italic bold])))
+       (provide-theme ',name))))
+
+
diff --git c/emacs.d/modules/macros.el i/emacs.d/modules/macros.el
new file mode 100644
index 0000000..7355359
--- /dev/null
+++ i/emacs.d/modules/macros.el
@@ -0,0 +1,7 @@
+;; macros.el
+
+(defmacro deflocal (name value &optional comment)
+  "Define a buffer-local variable NAME with VALUE."
+  `(progn
+     (defvar ,name ,value ,comment)
+     (make-variable-buffer-local ',name)))
diff --git c/emacs.d/vendor/.gitkeep i/emacs.d/vendor/.gitkeep
new file mode 100644
index 0000000..e69de29