 (make-face 'mode-line-god-mode-off)
 (make-face 'mode-line-god-mode-on)
 
-(set-face-attribute 'mode-line nil
-                    :foreground "gray60" :background "gray20"
-                    :inverse-video 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")
+(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

    (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)

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