     (paredit-mode . " π")
     (god-mode . "")
     (god-local-mode . "")
+    (guru-mode . "")
+    (guru-global-mode . "")
     (whitespace-mode . "")
     (helm-mode . "")
     (global-company-mode . "")

    (setq flymake-mode-line mode-line)
    (force-mode-line-update)))

(setq-default mode-line-format '(; Place the God mode indicator
                                 (:eval (if god-local-mode (propertize "  GOD   " 'face 'mode-line-god-mode-on)
                                          (propertize " INSERT " 'face 'mode-line-god-mode-off)))
                                        ; Position, including warning for 80 columns
                                 (:propertize "%4l:" face mode-line-position-face)
                                 (:eval (propertize "%3c" 'face
                                                    (if (>= (current-column) 80)
                                                        'mode-line-80col-face
                                                      'mode-line-position-face)))
                                        ; emacsclient [default -- keep?]
                                 mode-line-client
                                 "  "
                                        ; read-only or modified status
                                 (:eval
                                  (cond (buffer-read-only
                                         (propertize " RO " 'face 'mode-line-read-only-face))
                                        ((buffer-modified-p)
                                         (propertize " ** " 'face 'mode-line-modified-face))
                                        (t "      ")))
                                 "    "
                                        ; directory and buffer/file name
                                 (:propertize (:eval (shorten-directory default-directory 30))
                                              face mode-line-folder-face)
                                 (:propertize "%b"
                                              face mode-line-filename-face)
                                        ; narrow [default -- keep?]
                                 " %n "
                                        ; mode indicators: vc, recursive edit, major mode, minor modes, process, global
                                 (vc-mode vc-mode)
                                 "  %["
                                 (:propertize mode-name
                                              face mode-line-mode-face)
                                 "%] "
                                 (:eval (propertize (format-mode-line minor-mode-alist)
                                                    'face 'mode-line-minor-mode-face))
                                 "  "
                                 (:propertize mode-line-process
                                              face mode-line-process-face)
                                 (global-mode-string global-mode-string)
                                 "    "
                                        ; nyan-mode uses nyan cat as an alternative to %p
                                 (:eval (when nyan-mode (list (nyan-create))))))

;; Helper function
(defun shorten-directory (dir max-length)
  "Show up to `max-length' characters of a directory name `dir'."
  (let ((path (reverse (split-string (abbreviate-file-name dir) "/")))
        (output ""))
    (when (and path (equal "" (car path)))
      (setq path (cdr path)))
    (while (and path (< (length output) (- max-length 4)))
      (setq output (concat (car path) "/" output))
      (setq path (cdr path)))
    (when path
      (setq output (concat ".../" output)))
    output))

;; Extra mode line faces
(make-face 'mode-line-read-only-face)

(make-face 'mode-line-god-mode-off)
(make-face 'mode-line-god-mode-on)

(defun personal/reset-mode-line ()
  "Reset my mode line to how I like it"
  (interactive)
  (setq-default mode-line-format '(; Place the God mode indicator
                                   (:eval (if god-local-mode (propertize "  GOD   " 'face 'mode-line-god-mode-on)
                                            (propertize " INSERT " 'face 'mode-line-god-mode-off)))
                                        ; Position, including warning for 80 columns
                                   (:propertize "%4l:" face mode-line-position-face)
                                   (:eval (propertize "%3c" 'face
                                                      (if (>= (current-column) 80)
                                                          'mode-line-80col-face
                                                        'mode-line-position-face)))
                                        ; emacsclient [default -- keep?]
                                   mode-line-client
                                   "  "
                                        ; read-only or modified status
                                   (:eval
                                    (cond (buffer-read-only
                                           (propertize " RO " 'face 'mode-line-read-only-face))
                                          ((buffer-modified-p)
                                           (propertize " ** " 'face 'mode-line-modified-face))
                                          (t "      ")))
                                   "    "
                                        ; directory and buffer/file name
                                   (:propertize (:eval (personal/shorten-directory default-directory 30))
                                                face mode-line-folder-face)
                                   (:propertize "%b" face mode-line-filename-face)
                                        ; narrow [default -- keep?]
                                   " %n "
                                        ; mode indicators: vc, recursive edit, major mode, minor modes, process, global
                                   (vc-mode vc-mode)
                                   "  %["
                                   (:propertize mode-name face mode-line-mode-face)
                                   "%] "
                                   (:eval (propertize (format-mode-line minor-mode-alist)
                                                      'face 'mode-line-minor-mode-face))
                                   "  "
                                   (:propertize mode-line-process face mode-line-process-face)
                                   (global-mode-string global-mode-string)
                                   "    "
                                        ; nyan-mode uses nyan cat as an alternative to %p
                                   (:eval (when nyan-mode (list (nyan-create))))))
  ;; Reconfigure our faces
  (set-face-attribute 'mode-line nil
                      :foreground "gray60" :background "gray20"
                      :inverse-video nil
                      :underline nil
                      :box '(:line-width 6 :color "gray20" :style nil))
  (set-face-attribute 'mode-line-inactive nil
                      :foreground "gray80" :background "gray30"
                      :inverse-video nil
                      :box '(:line-width 6 :color "gray30" :style nil))

  (set-face-attribute 'mode-line-god-mode-on nil
                      :inherit 'mode-line-face
                      :foreground (if (display-graphic-p) "#fabd2f" "#ffaf00")
                      :box '(:line-width 2 :color "transparent"))
  (set-face-attribute 'mode-line-god-mode-off nil
                      :inherit 'mode-line-face
                      :foreground (if (display-graphic-p) "#ffffc8" "color-230")
                      :background (if (display-graphic-p) "#9d0006" "color-88")
                      :box '(:line-width 2 :color "#c82829"))

  (set-face-attribute 'mode-line-read-only-face nil
                      :inherit 'mode-line-face
                      :foreground (if (display-graphic-p) "#83a598" "#87afaf")
                      :box '(:line-width 2 :color (if (display-graphic-p) "#83a598" "#87afaf")))
  (set-face-attribute 'mode-line-modified-face nil
                      :inherit 'mode-line-face
                      :foreground "#c82829"
                      :background "#ffffff"
                      :box '(:line-width 2 :color "#c82829"))
  (set-face-attribute 'mode-line-folder-face nil
                      :inherit 'mode-line-face
                      :foreground "gray60")
  (set-face-attribute 'mode-line-filename-face nil
                      :inherit 'mode-line-face
                      :foreground (if (display-graphic-p) "#fe8019" "#ff8700")
                      :weight 'bold)
  (set-face-attribute 'mode-line-position-face nil
                      :inherit 'mode-line-face
                      :family "Menlo" :height 100)
  (set-face-attribute 'mode-line-mode-face nil
                      :inherit 'mode-line-face
                      :foreground "gray80")
  (set-face-attribute 'mode-line-minor-mode-face nil
                      :inherit 'mode-line-mode-face
                      :foreground "gray40"
                      :height 110)
  (set-face-attribute 'mode-line-process-face nil
                      :inherit 'mode-line-face
                      :foreground "#718c00")
  (set-face-attribute 'mode-line-80col-face nil
                      :inherit 'mode-line-position-face
                      :foreground "black" :background "#eab700"))

(personal/reset-mode-line)

;; Helper function
(defun personal/shorten-directory (dir max-length)
  "Show up to `max-length' characters of a directory name `dir'."
  (let ((path (reverse (split-string (abbreviate-file-name dir) "/")))
        (output ""))
    (when (and path (equal "" (car path)))
      (setq path (cdr path)))
    (while (and path (< (length output) (- max-length 4)))
      (setq output (concat (car path) "/" output))
      (setq path (cdr path)))
    (when path
      (setq output (concat ".../" output)))
    output))

;;; modeline.el ends here
