My personal dotfiles
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long. 32KB

Garbage Collection

Temporarily set garbage collect threshold high to improve start time

  (setq gc-cons-threshold most-positive-fixnum)
  (add-hook 'after-init-hook (lambda () (setq gc-cons-threshold 800000)))

Package Control

Setup package control

  (setq package--init-file-ensured t) ; So (package-initialize) doesn't show up
  (require 'package)
  (setq package-archives '(("gnu" . "")
                           ("marmalade" . "")
                           ("melpa" . "")))
  (setq package-enable-at-startup nil)

Have use-package auto download

  (unless (package-installed-p 'use-package)
    (package-install 'use-package))
  (require 'use-package)
  (setq use-package-always-ensure t)


Runs a different function on startup depending on display mode.

  (setq custom-theme-directory "~/.emacs.d/themes")

  (defun wolfe/term-setup ()
    (load-theme 'base16-default-dark t)
    (setq nlinum-format "%d ")
    ;;(global-hl-line-mode 1)
    ;;(add-to-list 'default-frame-alist '(background-color . "color-16"))
     '(linum ((t (:background "color-18"))))
     '(region ((t :background "color-19")))
     '(mode-line ((t (:background "color-19" :foreground "brightblue" :box nil))))
       ((t (:background "color-18" :foreground "color-244")))))

     ;;'(iedit-occurrence ((t (:background "color-93"))))
     ;;'(column-marker-1 ((t (:background "color-88"))))
     ;;'(hl-line ((t (:weight bold))))))

   (defun wolfe/gui-setup ()
     (use-package base16-theme
       (load-theme 'base16-default-dark t)
       (defvar my/base16-colors base16-default-dark-colors)
       (setq evil-emacs-state-cursor   `(,(plist-get my/base16-colors :base0D) box)
             evil-insert-state-cursor  `(,(plist-get my/base16-colors :base0D) bar)
             evil-motion-state-cursor  `(,(plist-get my/base16-colors :base0E) box)
             evil-normal-state-cursor  `(,(plist-get my/base16-colors :base07) box)
             evil-replace-state-cursor `(,(plist-get my/base16-colors :base08) bar)
             evil-visual-state-cursor  `(,(plist-get my/base16-colors :base09) box))
       (set-face-attribute 'fringe nil :background nil))

      '(region ((t (:background "gray19"))))
      '(org-done ((t (:box (:line-width 1) :weight bold))))
      '(org-level-1 ((t (:inherit outline-1 :height 1.3))))
      '(org-todo ((t (:box (:line-width 1) :weight bold))))))

  ;; Not a function but it needs to be after the 2 setup functions
  (if (display-graphic-p)

General Settings

Basic settings I can't really live without.

  (setq inhibit-splash-screen t
        inhibit-startup-message t
        inhibit-startup-echo-area-message "wolfe"
        initial-major-mode 'org-mode)
  (tool-bar-mode -1) ; No toolbar
  (scroll-bar-mode -1) ; Hide scrollbars
  (menu-bar-mode -1) ; No menubar
  (show-paren-mode t) ; Highlights matching parens
  (setq initial-scratch-message "") ; No scratch text
  (fset 'yes-or-no-p 'y-or-n-p) ; y/n instead of yes/no
  (setq-default indent-tabs-mode nil)
  (column-number-mode t)
  (delete-selection-mode 1) ; Replace selection on insert
  (setq vc-follow-symlinks t) ; Always follow symlinks
  (when (member "Inconsolata" (font-family-list)) ; Set default font
    (add-to-list 'default-frame-alist '(font . "Inconsolata-16" ))
    (set-face-attribute 'default t :font "Inconsolata-16"))
  (setq custom-file "~/.emacs.d/custom.el") ; Set custom file
  (load custom-file 'noerror) ; Load custom file
  (setq tags-revert-without-query t) ; Don't ask to reload TAGS file
  (setq scroll-margin 10
        scroll-step 1
        scroll-conservatively 10000
        scroll-preserve-screen-position 1)
  (setq-default truncate-lines t)
  (load-file "~/.emacs.d/lisp/column-marker.el")
  (add-hook 'prog-mode-hook (lambda () (interactive) (column-marker-1 81)))
  (setq explicit-shell-file-name
        (if (file-readable-p "/usr/bin/zsh") "/usr/bin/zsh" "/bin/bash"))
  (setq source-directory "~/Projects/emacs/")

Mode Line

    (if (display-graphic-p)
        (use-package powerline
          (defadvice powerline-major-mode (around delight-powerline-major-mode activate)
            (let ((inhibit-mode-name-delight nil))

          (setq powerline-arrow-shape 'curve
                powerline-display-buffer-size nil
                powerline-display-mule-info nil)
          (remove-hook 'focus-out-hook 'powerline-unset-selected-window))

      (setq-default mode-line-format
        " "
        ;; is this buffer read-only?
        '(:eval (when buffer-read-only
                  (propertize "RO"
                              'face 'font-lock-type-face
                              'help-echo "Buffer is read-only")))

        ;; was this buffer modified since the last save?
        '(:eval (when (buffer-modified-p)
                  (propertize "M"
                              'face 'font-lock-warning-face
                              'help-echo "Buffer has been modified")))

        " "
        ;; the buffer name; the file name as a tool tip
        '(:eval (propertize "%b " 'face 'font-lock-keyword-face
                            'help-echo (buffer-file-name)))

        ;; the current major mode for the buffer.

        '(:eval (propertize (format-mode-line mode-name) 'face '(:family "Arial")
                            'help-echo buffer-file-coding-system))
        '(:eval (propertize (format-mode-line minor-mode-alist)
                            'face '(:family "Arial")))
        "]             "

        ;; line and column
        "(" ;; '%02' to set to 2 chars at least; prevents flickering
        (propertize "%02l" 'face 'font-lock-type-face) ","
        (propertize "%02c" 'face 'font-lock-type-face)
        ") "

        ;; relative position, size of file
        (propertize "%p" 'face 'font-lock-constant-face) ;; % above top
        (propertize "%I" 'face 'font-lock-constant-face) ;; size
        "] "

        ;; add the time, with the date and the emacs uptime in the tooltip
        '(:eval (propertize (format-time-string "%H:%M")
                            (concat (format-time-string "%c; ")
                                    (emacs-uptime "Uptime:%hh"))))


Face Under Point

Returns the font lock face that's under the cursor.

  (defun what-face (pos)
    (interactive "d")
    (let ((face (or (get-char-property (point) 'read-face-name)
                    (get-char-property (point) 'face))))
      (if face (message "Face: %s" face) (message "No face at %d" pos))))

Compile Project

Compiles the project without a prompt.

  (defun wolfe/compile-no-prompt ()
    (let ((compilation-read-command nil))
      (compile (eval compile-command))))

Compile Dotfiles

Compiles all el files in the ~/.emacs.d directory.

  (defun wolfe/compile-dot-emacs ()
    "Byte-compile dotfiles."
    (byte-recompile-directory user-emacs-directory 0))

  (defun wolfe/clear-all-elc ()
    (shell-command "find ~/.emacs.d/ -name \"*.elc\" -type f -delete"))

  (defun wolfe/remove-elc-on-save ()
    "If you're saving an emacs-lisp file, likely the .elc is no longer valid."
    (add-hook 'after-save-hook
              (lambda ()
                (if (file-exists-p (concat buffer-file-name "c"))
                    (delete-file (concat buffer-file-name "c"))))
              nil t))
  (add-hook 'emacs-lisp-mode-hook 'wolfe/remove-elc-on-save)

Find Tags

Looks up tag under point.

  (defun wolfe/find-tag ()
    "Jump to the tag at point without prompting"
    (find-tag (find-tag-default)))

  (defun wolfe/create-tags ()
    "Create the tags table"
    (save-window-excursion (shell-command "etags -R -o ETAGS *")))

  (defadvice xref-find-definitions (around refresh-etags activate)
    "Rerun etags and reload tags if tag not found and redo find-tag.
     If buffer is modified, ask about save before running etags."
    (condition-case err
      (error (and (buffer-modified-p) (not (ding))
             (save-window-excursion (shell-command "etags -R *"))

Terminal Suspend

Fixes C-z in terminal.

  (defun wolfe/controlz ()
    (when (eq (display-graphic-p) nil)


Utility functions for finding Dropbox directories/files.

  (defun wolfe/org-open (name)
    "Opens the file in the dropbox path"
    (when (eq system-type 'gnu/linux)
      (evil-buffer-new nil (concat "~/Dropbox/org/" name ".org")))
    (when (eq system-type 'windows-nt)
      (evil-buffer-new nil (concat "C:\\Users\\Josh\\Dropbox\\org\\"
                                   name ".org"))))

  (defun wolfe/org-dropbox-path ()
    "Returns the dropbox path"
     ((eq system-type 'gnu/linux)
     ((eq system-type 'windows-nt)
     (else "")))

  (defun wolfe/dropbox-start ()
    (if (eq nil (file-exists-p "/virtual/wolfejos/dropbox/.dropbox-dist"))
        (call-process-shell-command "(python ~/.emacs.d/ start -i&)")
      (call-process-shell-command "(python ~/.emacs.d/ start&)")))

  (defun wolfe/dropbox-stop ()
    (call-process-shell-command "python ~/.emacs.d/ stop&"))


For reloading init.el file without restarting.

  (defun wolfe/load-init ()
    "Reloads init file"
    (load-file "~/.emacs.d/init.el"))


Better narrowing.

  (defun narrow-or-widen-dwim (p)
    "Widen if buffer is narrowed, narrow-dwim otherwise.
  Dwim means: region, org-src-block, org-subtree, or
  defun, whichever applies first. Narrowing to
  org-src-block actually calls `org-edit-src-code'.

  With prefix P, don't widen, just narrow even if buffer
  is already narrowed."
    (interactive "P")
    (declare (interactive-only))
    (cond ((and (buffer-narrowed-p) (not p)) (widen))
           (narrow-to-region (region-beginning)
          ((derived-mode-p 'org-mode)
           ;; `org-edit-src-code' is not a real narrowing
           ;; command. Remove this first conditional if
           ;; you don't want it.
           (cond ((ignore-errors (org-edit-src-code) t)
                 ((ignore-errors (org-narrow-to-block) t))
                 (t (org-narrow-to-subtree))))
          ((derived-mode-p 'latex-mode)
          (t (narrow-to-defun))))

  (defun wolfe/man ()
    (if (executable-find "man")
        (man (word-at-point))

Projects Folder

This function returns the path to my projects folder depending on OS

  (defun wolfe/project-path ()
     ((eq system-type 'gnu/linux)
     ((eq system-type 'windows-nt)
     (else nil)))

Open C# Project File

This function prompts for a file. It then opens that file and looks for a src/ directory above it. The dir can be any number of levels higher. In that folder it looks for a C# .sln file and starts the an omnisharp server for that project.

  (defun wolfe/csharp-project ()
    (setq path (read-file-name "File: " (wolfe/project-path)))
    (setq split-path (split-string path "/"))
    (if (member "src" split-path)
        (catch 'loop
          (dolist (item (reverse split-path))
            (if (string-equal item "src")
                (throw 'loop nil)
              (delete item split-path)))
          (message "src/ directory not found")))

    (if (or (equal '("c:") split-path) (equal '() split-path))
        (message "Could not find src directory for specified project")
        (omnisharp-start-omnisharp-server (mapconcat 'identity split-path "/"))
        (find-file path))))

Hot Expand

Is used in one of my hydras wolfe/hydra-org-expand. For inserting org-templates.

  (defun hot-expand (str)
    "Expand org template."
    (insert str)

Org Mode

  (require 'ox-latex)
  (add-to-list 'org-latex-packages-alist '("" "minted"))
  (setq org-latex-listings 'minted)
  (setq org-latex-pdf-process
        '("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
          "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
          "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"))

  (require 'org-agenda)
  (use-package ox-reveal
    :ensure nil
    (use-package htmlize
      :ensure nil))

  ;; Formats the agenda into nice columns
  (setq org-agenda-prefix-format
        '((agenda . " %i %-12t% s %-12(car (last (org-get-outline-path)))")
          (timeline . "  % s")
          (todo . " %i %-12:c")
          (tags . " %i %-12:c")
          (search . " %i %-12:c")))

  ;; Sets location of org files
  (setq org-agenda-files '("~/Dropbox/org/"))
  (setq browse-url-browser-function 'browse-url-chromium)
  (add-hook 'org-mode-hook
            '(lambda ()
               (setq org-file-apps
                     (append '(("\\.pdf\\'" . "zathura \"%s\"")) org-file-apps ))))

  (global-set-key "\C-cl" 'org-store-link)
  (global-set-key "\C-ca" 'org-agenda)
  (global-set-key (kbd "C-M-y") 'yank)
  (define-key org-agenda-mode-map "j" 'org-agenda-next-item)
  (define-key org-agenda-mode-map "k" 'org-agenda-previous-item)

  ;; ispell ignores SRC blocks
  (add-to-list 'ispell-skip-region-alist '("#\\+BEGIN_SRC" . "#\\+END_SRC"))
  (add-to-list 'ispell-skip-region-alist '("#\\+BEGIN_LATEX" . "#\\+END_LATEX"))

  (when (display-graphic-p)
    (setq org-hide-emphasis-markers t))

  (setq org-pretty-entities t
        org-src-fontify-natively t
        org-src-tab-acts-natively t
        org-src-window-setup 'current-window
        org-fontify-whole-heading-line t
        org-fontify-done-headline t
        org-fontify-quote-and-verse-blocks t
        org-log-done 'time
        org-agenda-use-time-grid nil
        org-agenda-skip-deadline-if-done t
        org-agenda-skip-scheduled-if-done t
        org-ellipsis "⤵")

  ;; Better looking org headers
  (use-package org-bullets
    (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1))))


Customizable popup menus.

  (use-package hydra)

  (setq wolfe/hydra-projectile
        (defhydra hydra-projectile (:color blue :columns 3)
          ("f" counsel-projectile-find-file        "Find File")
          ("o" projectile-multi-occur              "Multi Occur")
          ("z" projectile-add-known-project        "Add Known Project")

          ("r" projectile-recentf                  "Recent Files")
          ("b" counsel-projectile-switch-to-buffer "Switch to Buffer")
          ("x" projectile-remove-known-project     "Remove Known Project")

          ("d" counsel-projectile-find-dir         "Find Directory")
          ("c" projectile-invalidate-cache         "Clear Cache")
          ("X" projectile-cleanup-known-projects   "Cleanup Known Projects")

          ("s" counsel-projectile-switch-project   "Switch Project")
          ("k" projectile-kill-buffers             "Kill Buffers")
          ("q" nil "Cancel" :color blue)

  (setq wolfe/hydra-jira
        (defhydra hydra-jira (:color blue :columns 4)
          ("p" org-jira-get-projects             "Get Projects")
          ("b" org-jira-browse-issue             "Browse Issue")
          ("g" org-jira-get-issues               "Get Issues")
          ("u" org-jira-update-issue             "Update Issue")

          ("p" org-jira-progress-issue           "Update Issue Progress")
          ("a" org-jira-assign-issue             "Assign Issue")
          ("r" org-jira-refresh-issue            "Refresh Issue")
          ("R" org-jira-refresh-issues-in-buffer "Refresh Issues in Buffer")

          ("c" org-jira-create-issue             "Create Issue")
          ("y" org-jira-copy-current-issue-key   "Copy Current Issue Key")
          ("s" org-jira-create-subtask           "Create Subtask")
          ("G" org-jira-get-subtasks             "Get Subtasks")

          ("U" org-jira-update-comment           "Update Comment")
          ("t" org-jira-todo-to-jira             "Todo to Jira")
          ("O"  (funcall wolfe/hydra-org-expand)  "Org Hydra")))

  (setq wolfe/hydra-csharp
        (defhydra hydra-csharp (:color blue)
          ("d" omnisharp-go-to-definition              "Goto definition")
          ("D" omnisharp-go-to-definition-other-window "Pop-open definition")
          ("u" omnisharp-find-usages                   "Find usages")
          ("r" omnisharp-rename                        "Rename symbol")
          ("R" omnisharp-reload-solution               "Reload solution")
          ("i" omnisharp-code-format-region            "Indent region")
          ("I" omnisharp-code-format-entire-file       "Indent entire file")

  (setq wolfe/hydra-org-expand
        (defhydra hydra-org-template (:color blue :hint nil)
          _c_enter  _q_uote    _L_aTeX:
          _l_atex   _e_xample  _i_ndex:
          _a_scii   _v_erse    _I_NCLUDE:
          _s_rc     ^ ^        _H_TML:
          _h_tml    ^ ^        _A_SCII:
          ("s" (hot-expand "<s"))
          ("e" (hot-expand "<e"))
          ("q" (hot-expand "<q"))
          ("v" (hot-expand "<v"))
          ("c" (hot-expand "<c"))
          ("l" (hot-expand "<l"))
          ("h" (hot-expand "<h"))
          ("a" (hot-expand "<a"))
          ("L" (hot-expand "<L"))
          ("i" (hot-expand "<i"))
          ("I" (hot-expand "<I"))
          ("H" (hot-expand "<H"))
          ("A" (hot-expand "<A"))))

  (setq wolfe/hydra-org
        (defhydra hydra-org (:color blue)
          "Org Mode"
          ("t" (funcall wolfe/hydra-org-expand) "Expand template")))

  (setq wolfe/hydra-default
        (defhydra hydra-default (:color blue)
          ("o" (funcall wolfe/hydra-org) "Org Mode")
          ("#" (funcall wolfe/hydra-csharp) "C# Mode")))

  (defun wolfe/hydra-selector ()
     ((derived-mode-p 'csharp-mode) wolfe/hydra-csharp)
     ((bound-and-true-p org-jira-mode) wolfe/hydra-jira)
     ((derived-mode-p 'org-mode) wolfe/hydra-org)
     (:else wolfe/hydra-default)))

Evil & General

  (use-package general)
  (use-package evil
    (setq evil-want-C-u-scroll t) ; Unbind <C-u> for evil mode's use
    (setq evil-want-C-i-jump nil)
    (evil-mode t)
    (setq evil-split-window-below t)
    (setq evil-vsplit-window-right t)
    (setq-default evil-symbol-word-search t)
    (setq evil-lookup-func #'wolfe/man)
    (evil-ex-define-cmd "re[load]" 'wolfe/load-init) ; Custom reload command
    (define-key evil-ex-map "e " 'counsel-find-file) ; Trigger file completion :e
    (global-unset-key (kbd "M-SPC")) ; Unbind secondary leader

    (general-create-definer wolfe/bind-leader
                            :keymaps 'global
                            :states '(normal insert visual emacs)
                            :prefix "SPC"
                            :non-normal-prefix "M-SPC")

    (:states 'motion
             "k" 'evil-previous-visual-line
             "j" 'evil-next-visual-line)

    (:states 'operator
             "k" 'evil-previous-line
             "j" 'evil-next-line)

    (:states 'visual
             "<" (lambda ()
                     (evil-shift-left (region-beginning) (region-end))
             ">" (lambda ()
                     (evil-shift-right (region-beginning) (region-end))

    (:states 'normal
             "C-z"  'wolfe/controlz)

     "w"  'save-buffer
     "S"  'eval-buffer
     "s"  'eval-defun
     "b"  'mode-line-other-buffer
     "k"  'kill-buffer
     "m"  'ivy-switch-buffer
     "t"  'wolfe/find-tag
     "e"  'iedit-mode
     "c"  'wolfe/compile-no-prompt
     "n"  'narrow-or-widen-dwim
     "a"  'org-agenda
     "g"  'magit-status
     "''" 'org-edit-src-exit
     "#" 'wolfe/csharp-project
     "p" (lambda() (interactive) (funcall wolfe/hydra-projectile))
     ";" (lambda() (interactive) (save-excursion (end-of-line) (insert-char ?\;)))
     "id" (lambda() (interactive) (indent-region (point-min) (point-max)))
     "o"   (lambda() (interactive) (wolfe/org-open "everything"))
     "SPC" (lambda() (interactive) (funcall (wolfe/hydra-selector)))
     "init" (lambda() (interactive) (evil-buffer-new nil "~/.emacs.d/"))

  ;; Tpope's surround
  (use-package evil-surround
    (global-evil-surround-mode 1))

  (use-package evil-magit)

  (use-package evil-matchit
    (global-evil-matchit-mode 1))

Ivy, Counsel and Swiper

  (use-package ivy
    :bind (("M-x" . counsel-M-x)
           ("C-x C-f" . counsel-find-file)
           :map ivy-minibuffer-map
           ("TAB" . ivy-next-line)
           ("RET" . ivy-alt-done))
    (use-package smex)
    (use-package counsel)
    (setq ivy-re-builders-alist
          '((t . ivy--regex-ignore-order)))
    (setq ivy-wrap t)
    (ivy-mode 1)
    (setq ivy-use-virtual-buffers t))

(use-package swiper
  :bind (("C-s" . swiper)))


Project management

  (use-package projectile
    (use-package counsel-projectile
    (setq projectile-enable-caching t)
    (setq projectile-indexing-method 'alien)
    (setq projectile-globally-ignored-file-suffixes '(".dll" ".exe"))


Magic git interface from within emacs

  (use-package magit
    (global-set-key "\C-x\g" 'magit-status))


Vim-like relative line numbering

  (use-package nlinum-relative
    (setq nlinum-relative-redisplay-delay 0.25)
    (setq nlinum-relative-current-symbol "")
    (add-hook 'prog-mode-hook 'nlinum-relative-mode))


Edit all instances of a string

  (use-package iedit
    (setq iedit-toggle-key-default nil))


On the fly syntax checking

  (use-package flycheck
    (with-eval-after-load 'flycheck
      (setq-default flycheck-disabled-checkers '(emacs-lisp-checkdoc))))


Postman inside of emacs.

  (use-package restclient)


  (use-package delight
    (delight '((emacs-lisp-mode       "ξ" :major)
               (lisp-interaction-mode "λ" :major)
               (python-mode           "π" :major)
               (c-mode                "cc" :major)
               (org-mode              "Ø" :major)
               (company-mode          " C" company)
               (ivy-mode              " ι" ivy)
               (projectile-mode       " ρ" projectile)
               (eldoc-mode            " ε" eldoc)
               (flycheck-mode         " ƒ" flycheck)
               (undo-tree-mode        ""   undo-tree)
               (auto-revert-mode      ""   autorevert))))


  (use-package web-mode
    (add-to-list 'auto-mode-alist '("\\.html\\'" . web-mode))
    (add-to-list 'auto-mode-alist '("\\.php\\'" . web-mode))
    (add-to-list 'auto-mode-alist '("\\.js\\'" . web-mode))

    (setq web-mode-enable-auto-closing t)
    (setq web-mode-enable-auto-opening t)
    (setq web-mode-enable-auto-indentation t))

  (use-package json-mode)


  (use-package latex-preview-pane
    :ensure f)


Autocomplete engine

  (use-package company
    (setq company-idle-delay 0.5) ; Delay to complete
    (setq company-minimum-prefix-length 1)
    (setq company-selection-wrap-around t) ; Loops around suggestions

    (if (display-graphic-p)
        (define-key company-active-map [tab] 'company-select-next)
      (define-key company-active-map (kbd "C-i") 'company-select-next))

    ;; C / C++
    (setq company-clang-insert-arguments nil)
    (add-hook 'c++-mode-hook 'irony-mode)
    (add-hook 'c-mode-hook 'irony-mode)

    (use-package company-irony
      (eval-after-load 'company
        '(add-to-list 'company-backends 'company-irony)))

    ;; C#
    (use-package omnisharp
      (setq omnisharp-server-executable-path "C:/emacs/omnisharp/Omnisharp.exe")
      (add-hook 'csharp-mode-hook 'omnisharp-mode)
      (add-to-list 'company-backends 'company-omnisharp))

    ;; Javascript
    (use-package company-tern
      (add-to-list 'company-backends 'company-tern)
      (add-hook 'web-mode-hook 'tern-mode))

    ;; Restclient
    (use-package company-restclient
      (add-to-list 'company-backends 'company-restclient))

      (require 'color)
      (let ((bg (face-attribute 'default :background)))
         `(company-tooltip ((t (:inherit default :background ,(color-lighten-name bg 2)))))
         `(company-scrollbar-bg ((t (:background ,(color-lighten-name bg 10)))))
         `(company-scrollbar-fg ((t (:background ,(color-lighten-name bg 5)))))
         `(company-tooltip-selection ((t (:inherit font-lock-function-name-face))))
         `(company-tooltip-common ((t (:inherit font-lock-constant-face))))))))


  (when (require 'mu4e nil 'noerror)
    (setq mu4e-msg2pdf "/usr/bin/msg2pdf")
     ;; set mu4e as default mail client
     mail-user-agent 'mu4e-user-agent
     ;; root mail directory - can't be switched
     ;; with context, can only be set once
     mu4e-maildir "~/.mail"
     mu4e-attachments-dir "~/Downloads/Attachments"
     ;; update command
     mu4e-get-mail-command "mbsync -q -a"
     ;; update database every seven minutes
     mu4e-update-interval (* 60 7)
     ;; use smtpmail (bundled with emacs) for sending
     message-send-mail-function 'smtpmail-send-it
     ;; optionally log smtp output to a buffer
     smtpmail-debug-info t
     ;; close sent message buffers
     message-kill-buffer-on-exit t
     ;; customize list columns
     mu4e-headers-fields '((:flags . 4)
                           (:from . 20)
                           (:human-date . 10)
     ;; for mbsync
     mu4e-change-filenames-when-moving t
     ;; pick first context automatically on launch
     mu4e-context-policy               'pick-first
     ;; use current context for new mail
     mu4e-compose-context-policy       nil
     mu4e-confirm-quit                 nil)

    (global-set-key (kbd "<f12>") 'mu4e)
    (global-set-key (kbd "<C-f12>") 'mu4e-update-mail-and-index)

    (setq mu4e-contexts
              :name "gmail"
              :match-func (lambda(msg)
                            (when msg
                              (mu4e-message-contact-field-matches msg :to "")))
              :vars '(
                      ;; local directories, relative to mail root
                      (mu4e-sent-folder . "/gmail/[Gmail]/.Sent Mail")
                      (mu4e-drafts-folder . "/gmail/[Gmail]/.Drafts")
                      (mu4e-trash-folder . "/gmail/[Gmail]/.Trash")
                      (mu4e-refile-folder . "/gmail/[Gmail]/.All Mail")
                      ;; account details
                      (user-mail-address . "")
                      (user-full-name . "Josh Wolfe")
                      (mu4e-user-mail-address-list . ( "" ))
                      ;; gmail saves every outgoing message automatically
                      (mu4e-sent-messages-behavior . delete)
                      (mu4e-maildir-shortcuts . (("/gmail/INBOX" . ?j)
                                                 ("/gmail/[Gmail]/.All Mail" . ?a)
                                                 ("/gmail/[Gmail]/.Trash" . ?t)
                                                 ("/gmail/[Gmail]/.Drafts" . ?d)))
                      ;; outbound mail server
                      (smtpmail-smtp-server . "")
                      ;; outbound mail port
                      (smtpmail-smtp-service . 465)
                      ;; use ssl
                      (smtpmail-stream-type . ssl)
                      ;; the All Mail folder has a copy of every other folder's contents,
                      ;; and duplicates search results, which is confusing
                      (mue4e-headers-skip-duplicates . t)))))

    (use-package evil-mu4e))


  (setq gdb-many-windows t ;; use gdb-many-windows by default
        gdb-show-main t
        ;; Non-nil means display source file containing the main routine at startup
  (use-package help-fns+)

  (use-package org-jira
    (setq jiralib-url ""))


Stores all backups and temp files in ~/.bak.emacs/

  (setq backup-by-copying t) ; Stop shinanigans with links
  (setq backup-directory-alist '((".*" . "~/.bak.emacs/backup/")))
  ;; Creates directory if it doesn't already exist
  (if (eq nil (file-exists-p "~/.bak.emacs/"))
      (make-directory "~/.bak.emacs/"))
  ;; Creates auto directory if it doesn't already exist
  (if (eq nil (file-exists-p "~/.bak.emacs/auto"))
      (make-directory "~/.bak.emacs/auto"))
  ;; backup in one place. flat, no tree structure
  (setq auto-save-file-name-transforms '((".*" "~/.bak.emacs/auto/" t)))