all repos — nixfiles @ 02bdf698cbcad8213937730031a686a611dc43a6

System and user configuration, managed by nix and home-manager

Emacs: Switch from req-package to use-package
Alan Pearce alan@alanpearce.co.uk
Sat, 28 Nov 2015 23:31:06 +0100
commit

02bdf698cbcad8213937730031a686a611dc43a6

parent

0da5f6bf47647bf30613192e780c3934b95d4bb5

1 files changed, 189 insertions(+), 203 deletions(-)

jump to
M tag-emacs/emacs.d/init.orgtag-emacs/emacs.d/init.org
@@ -29,7 +29,7 @@ #+end_src 
 * Packaging
 
-** Req-package
+** Use-package
 
 #+BEGIN_SRC emacs-lisp
   (let ((trustfile
@@ -52,11 +52,12 @@ ("melpa" . "https://melpa.org/packages/")                              ("melpa-stable" . "https://stable.melpa.org/packages/"))
           package-user-dir (concat "~/.emacs.d/packages/" emacs-version "/elpa"))
     (package-initialize)
-    (unless (package-installed-p 'req-package)
+    (unless (package-installed-p 'use-package)
       (package-refresh-contents)
-      (package-install 'req-package))
-    (require 'req-package))
-  (setq use-package-verbose t)
+      (package-install 'use-package))
+    (require 'use-package))
+  (setq use-package-verbose t
+        use-package-ensure-always-ensure t)
 #+END_SRC
 
 * Customize
@@ -87,7 +88,7 @@ ** The Silver Searcher
 
 #+BEGIN_SRC emacs-lisp
-  (req-package ag
+  (use-package ag
     :defer 30
     :config (setq ag-project-root-function #'projectile-project-root))
 #+END_SRC
@@ -99,7 +100,7 @@ ones.  I added a couple of functions to allow me to open new projects based upon some folder conventions I use.
 
 #+BEGIN_SRC emacs-lisp
-(req-package projectile
+(use-package projectile
   :bind (("C-c C-f" . projectile-find-file)
          ("s-x s-f" . projectile-find-file)
          ("C-x g" . projectile-vc)
@@ -147,13 +148,12 @@ filtering the candidates to those within the project.  For it to work, it needs hooking into projectile and a key bound to switch between projects.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package perspective
+  (use-package perspective
     :bind (("s-p" . persp-switch))
     :init (progn
             (persp-mode)))
 
-  (req-package persp-projectile
-    :require (projectile perspective))
+  (use-package persp-projectile)
 #+END_SRC
 
 ** vc
@@ -162,7 +162,7 @@ This is nice for some things that magit doesn’t do, and for those rare occasions that I’m working with something other than git.
 
 #+BEGIN_SRC emacs-lisp
-(req-package vc
+(use-package vc
   :defer t
   :bind (("C-x v C" . vc-resolve-conflicts))
   :config (progn
@@ -175,7 +175,7 @@ It’s nice to be able to see at a glance which lines of a file have changed.  This package colours the fringe
 
 #+BEGIN_SRC emacs-lisp
-  (req-package diff-hl
+  (use-package diff-hl
     :defer 2
     :init (progn
             (global-diff-hl-mode 1)
@@ -188,7 +188,7 @@ Magit is my favourite way to use git.  I use selective staging all the time.  Make sure to set it up with a nice =completing-read-function=
 
 #+BEGIN_SRC emacs-lisp
-  (req-package magit
+  (use-package magit
     :defer 5
     :commands (magit-status)
     :config (progn (setq magit-last-seen-setup-instructions "1.4.0"
@@ -209,7 +209,7 @@ in the past.  I often find it useful when I remember writing something a particular way, but it changed later.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package git-timemachine)
+  (use-package git-timemachine)
 #+END_SRC
 
 * Styles
@@ -243,7 +243,7 @@ When I’m using dash in emacs lisp, it’s nice to have proper font
 locking for it.
 #+BEGIN_SRC emacs-lisp
-  (req-package dash
+  (use-package dash
     :commands (dash-enable-font-lock)
     :init (progn
             (add-hook 'emacs-lisp-mode-hook #'dash-enable-font-lock)))
@@ -254,7 +254,7 @@ I quite like solarized.  I don’t think it’s perfect, but it supports a
 lot of modes.
 #+BEGIN_SRC emacs-lisp
-  (req-package solarized-theme
+  (use-package solarized-theme
     :config (progn
               (load-theme 'solarized-light t)))
 #+END_SRC
@@ -262,7 +262,7 @@ Colourise colour names in certain types of buffer.  I don’t use this
 in modes for webdev because [[web-mode]] includes that functionality.
 #+BEGIN_SRC emacs-lisp
-(req-package rainbow-mode
+(use-package rainbow-mode
   :commands (rainbow-turn-on
              rainbow-turn-off)
   :config (progn
@@ -271,7 +271,7 @@ #+END_SRC 
 Highlighting quasi-quoted expressions in lisps is quite useful.
 #+BEGIN_SRC emacs-lisp
-(req-package highlight-stages
+(use-package highlight-stages
   :defer t
   :diminish highlight-stages-mode
   :init (progn
@@ -324,7 +324,7 @@ By default, Emacs displays page breaks as ^L.  Lines look much nicer.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package page-break-lines
+  (use-package page-break-lines
     :defer 5
     :config (global-page-break-lines-mode))
 #+END_SRC
@@ -359,7 +359,7 @@ ** autorevert
 
 #+BEGIN_SRC emacs-lisp
-(req-package autorevert
+(use-package autorevert
   :init (progn
           (global-auto-revert-mode 1)
           (setq auto-revert-verbose nil)))
@@ -443,7 +443,7 @@ I don’t like it when editors change an entire file’s layout when I open it.  Whitespace butler fixes whitespace only for lines that I’m editing.
 
 #+BEGIN_SRC emacs-lisp
-(req-package ws-butler
+(use-package ws-butler
   :if window-system
   :config (ws-butler-global-mode 1))
 (if (daemonp)
@@ -456,7 +456,7 @@ DWIM whitespace removal. So I don’t need =M-SPC=, =M-\= and =C-x o= for similar things any more.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package shrink-whitespace
+  (use-package shrink-whitespace
     :bind ("M-SPC" . shrink-whitespace))
 #+END_SRC
 
@@ -465,7 +465,7 @@ I only use this occasionally, but it’s nice for files outside of projects.
 
 #+BEGIN_SRC emacs-lisp
-(req-package recentf
+(use-package recentf
   :init (progn (setq recentf-auto-cleanup 'never
                      recentf-save-file (expand-file-name "recentf" user-emacs-directory))
                (recentf-mode 1)))
@@ -476,7 +476,7 @@ An awesome way to open files on OS X.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package spotlight
+  (use-package spotlight
     :defer 10
     :if (eq system-type 'darwin)
     :config (setq spotlight-tmp-file "/tmp/.emacs-spotlight-tmp-file"))
@@ -488,7 +488,7 @@ It.. saves the position I visited a file at last.  Might try turning it off to see if I notice it.
 
 #+BEGIN_SRC emacs-lisp
-(req-package saveplace
+(use-package saveplace
   :config (progn (setq-default save-place nil)
                  (setq save-place-file (expand-file-name ".saveplace" user-emacs-directory))))
 #+END_SRC
@@ -499,7 +499,7 @@ Tramp is awesome.  It makes SSH feel Unix-y.  The proxy setup is so that I can sudo on remote machines
 
 #+BEGIN_SRC emacs-lisp
-  (req-package tramp
+  (use-package tramp
     :defer 7
     :config (progn
               (setq tramp-default-method (if (eq system-type 'windows-nt) "plinkx" "ssh")
@@ -516,8 +516,7 @@ (add-to-list 'tramp-default-proxies-alist `(,(regexp-quote (system-name)) nil nil))               (add-to-list 'tramp-default-proxies-alist '("localhost" nil nil))
               (add-to-list 'tramp-default-proxies-alist '("router" nil nil))))
 
-  (req-package tramp-sh
-    :require tramp
+  (use-package tramp-sh
     :defer t
     :config (progn
               (add-to-list 'tramp-remote-path "/usr/local/sbin")
@@ -529,7 +528,7 @@ I like a horizonal diff setup, with everything in one frame.
 
 #+BEGIN_SRC emacs-lisp
-(req-package ediff
+(use-package ediff
   :defer t
   :config (progn
             (setq ediff-split-window-function 'split-window-horizontally
@@ -557,7 +556,7 @@ Don’t make me think, just indent it!  Unless it’s a whitespace-sensitive language, of course.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package auto-indent-mode
+  (use-package auto-indent-mode
     :config (progn
               (setq auto-indent-key-for-end-of-line-then-newline "<C-return>"
                     auto-indent-key-for-end-of-line-insert-char-then-newline "<C-S-return>"
@@ -584,15 +583,18 @@ Not related to [[smart-tab][=smart-tab=]], this mode indents with tabs and aligns with spaces.  Perfect!
 
 #+BEGIN_SRC emacs-lisp
-  (req-package smart-tabs-mode
+  (use-package smart-tabs-mode
     :defer 1
     :config (progn
-              (smart-tabs-mode/no-tabs-mode-advice align)
-              (smart-tabs-mode/no-tabs-mode-advice align-regexp)
-              (smart-tabs-mode/no-tabs-mode-advice indent-relative)
-              (smart-tabs-mode/no-tabs-mode-advice comment-dwim)
-              (smart-tabs-mode/no-tabs-mode-advice comment-box)
-              (smart-tabs-mode/no-tabs-mode-advice comment-indent)
+              (with-eval-after-load 'align
+                (smart-tabs-mode/no-tabs-mode-advice align)
+                (smart-tabs-mode/no-tabs-mode-advice align-regexp))
+              (eval-after-load "indent.el"
+                '(smart-tabs-mode/no-tabs-mode-advice indent-relative))
+              (eval-after-load "newcomment.el"
+                '(progn (smart-tabs-mode/no-tabs-mode-advice comment-dwim)
+                        (smart-tabs-mode/no-tabs-mode-advice comment-box)
+                        (smart-tabs-mode/no-tabs-mode-advice comment-indent)))
 
               (unless
                   (ad-find-advice 'indent-according-to-mode 'around 'smart-tabs)
@@ -617,7 +619,7 @@ Sometimes people use different indentation settings. [[https://github.com/jscheid/dtrt-indent][dtrt-indent]] guesses the correct settings for me.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package dtrt-indent
+  (use-package dtrt-indent
     :init (dtrt-indent-mode 1)
     :config (progn
               (defadvice dtrt-indent-try-set-offset (after toggle-smart-tabs activate)
@@ -630,7 +632,7 @@ ** password-store 
 This is a frontend to the GPG-powered =pass= program.
 #+BEGIN_SRC emacs-lisp
-  (req-package password-store
+  (use-package password-store
     :defer 15
     :config (progn
               (setq password-store-password-length 16)))
@@ -642,7 +644,7 @@ Ibuffer is quite nice for listing all buffers.  I don’t use it very often though, as it doesn’t really work with perspectives.
 
 #+BEGIN_SRC emacs-lisp
-(req-package ibuffer
+(use-package ibuffer
   :bind (("C-x C-b" . ibuffer))
   :config (progn
             (setq ibuffer-saved-filter-groups
@@ -677,7 +679,7 @@ ** Relative Buffer names
 
 #+BEGIN_SRC emacs-lisp
-  (req-package relative-buffers
+  (use-package relative-buffers
     :init (progn
             (global-relative-buffers-mode)))
 #+END_SRC
@@ -697,7 +699,7 @@ I don’t often have many windows open at once, but when I do, =ace-window= is really nice to jump around them in the same way that
 =ace-jump= or =avy= work.
 #+BEGIN_SRC emacs-lisp
-(req-package ace-window
+(use-package ace-window
   :bind (("s-s" . ace-window))
   :config (progn
             (setq aw-dispatch-always t
@@ -751,7 +753,7 @@ Undo, for window-based commands.
 
 #+BEGIN_SRC emacs-lisp
-(req-package winner
+(use-package winner
   :init (progn
           (winner-mode 1)
           (setq winner-boring-buffers '("*Completions*" "*Help*" "*Apropos*" "*Buffer List*" "*info*" "*Compile-Log*"))))
@@ -762,7 +764,7 @@ Directional window movement
 
 #+BEGIN_SRC emacs-lisp
-(req-package windmove
+(use-package windmove
   :bind (("S-<left>"  . windmove-left)
          ("S-<right>" . windmove-right)
          ("S-<up>"    . windmove-up)
@@ -788,7 +790,7 @@ tries to do the right thing depending on the location of the point and the line’s current indentation.
 
 #+BEGIN_SRC emacs-lisp
-(req-package smart-tab
+(use-package smart-tab
   :commands (global-smart-tab-mode)
   :init (global-smart-tab-mode)
   :diminish smart-tab-mode
@@ -804,7 +806,7 @@ auto-complete-mode.  I’ve not tried auto-complete-mode as company seems to work perfectly well for me.
 
 #+BEGIN_SRC emacs-lisp
-(req-package company
+(use-package company
   :commands (company-mode)
   :diminish "Cmpl"
   :bind (("C-<tab>" . company-complete))
@@ -826,7 +828,7 @@ ** Calendar 
 Weeks start on Monday for me and I prefer ISO-style dates.
 #+BEGIN_SRC emacs-lisp
-  (req-package calendar
+  (use-package calendar
     :defer 1
     :config (progn
               (setq calendar-week-start-day 1)
@@ -865,14 +867,14 @@ ** Time of Day
 
 #+BEGIN_SRC emacs-lisp
-  (req-package osx-location
+  (use-package osx-location
     :if (eq system-type 'darwin)
     :config (progn
               (add-hook 'osx-location-changed-hook
                         (lambda ()
                           (setq calendar-latitude osx-location-latitude
                                 calendar-longitude osx-location-longitude)
-                          (when (featurep 'solar)
+                          (when (boundp 'calendar-location-name)
                             calendar-location-name (format "%s, %s" osx-location-latitude osx-location-longitude))))
               (osx-location-watch)))
 #+END_SRC
@@ -885,7 +887,7 @@ have two dired windows open, assume that I’m going to be copying/moving files between them.
 
 #+BEGIN_SRC emacs-lisp
-(req-package dired
+(use-package dired
   :defer 3
   :config (progn
             (bind-key "<return>" #'dired-find-file dired-mode-map)
@@ -903,8 +905,7 @@ I work with a lot of git projects.  Dired-k adds colours based upon
 the file’s git status.
 #+BEGIN_SRC emacs-lisp
-  (req-package dired-k
-    :require dired
+  (use-package dired-k
     :defer 5
     :init (progn
             (add-hook 'dired-initial-position-hook #'dired-k))
@@ -917,7 +918,11 @@ Don’t show uninteresting files in dired listings.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package dired-x
+  (defun turn-on-dired-omit-mode ()
+    (interactive)
+    (dired-omit-mode 1))
+
+  (use-package dired-x
     :commands (dired-omit-mode
                dired-expunge)
     :config (progn
@@ -925,16 +930,12 @@ (setq dired-omit-files "#\\|\\.$"                     dired-omit-verbose nil
                     dired-find-subdir t))
     :init (progn
-              (defun turn-on-dired-omit-mode ()
-                (interactive)
-                (dired-omit-mode 1))
               (add-hook 'dired-mode-hook #'turn-on-dired-omit-mode)))
 #+END_SRC
 
 #+BEGIN_SRC emacs-lisp
-  (req-package dired+
+  (use-package dired+
     :defer 5
-    :require dired
     :config (progn
               (diredp-toggle-find-file-reuse-dir 1)
               (unbind-key "C-h C-m" dired-mode-map)
@@ -944,10 +945,11 @@ Expand subfolders like a tree inside the parent
 
 #+BEGIN_SRC emacs-lisp
-  (req-package dired-subtree
-    :defer t
-    :require dired
-    :config (progn
+  (with-eval-after-load 'dired
+    (use-package dired-subtree
+      :functions (dired-subtree--get-ov
+                  dired-subtree-maybe-up)
+      :init (progn
               (setq dired-subtree-use-backgrounds nil)
               (defun dired-subtree-maybe-up ()
                 "Jump up one subtree or directory"
@@ -957,9 +959,8 @@ (if ov                       (progn (goto-char (overlay-start ov))
                              (dired-previous-line 1))
                     (dired-up-directory))))
-              (bind-key "^" #'dired-subtree-maybe-up dired-mode-map))
-    :init (progn
-            (bind-key "i" #'dired-subtree-toggle dired-mode-map)))
+              (bind-key "^" #'dired-subtree-maybe-up dired-mode-map)
+              (bind-key "i" #'dired-subtree-toggle dired-mode-map))))
 #+END_SRC
 
 * Documentation
@@ -970,30 +971,32 @@ Emacs’ documentation is great to read from inside Emacs. Helm-dash helps to make documentation for other languages easier to access
 
 #+BEGIN_SRC emacs-lisp
-(req-package helm-dash
-  :defer 20
-  :init (progn
-          (defmacro ap/create-helm-dash-hook (mode docsets)
-            (let* ((mode-s (symbol-name mode))
-                   (fun (intern (concat "helm-dash-hook-" mode-s)))
-                   (hook (intern (concat mode-s "-mode-hook"))))
-              `(progn
-                 (defun ,fun ()
-                   (when (require 'helm-dash nil :noerror)
-                     (-each (-difference ',docsets
-                                         (helm-dash-installed-docsets))
-                       #'helm-dash-install-docset)
-                     (setq-local helm-dash-docsets ',docsets)))
-                 (add-hook (quote ,hook) (function ,fun)))))
-          (ap/create-helm-dash-hook nginx ("Nginx"))
-          (ap/create-helm-dash-hook ansible ("Ansible"))
-          (ap/create-helm-dash-hook php ("PHP" "Symfony"))
-          (ap/create-helm-dash-hook twig ("Twig"))
-          (ap/create-helm-dash-hook js2 ("JavaScript" "NodeJS" "jQuery" "Express"))
-          (ap/create-helm-dash-hook markdown ("Markdown"))
-          (ap/create-helm-dash-hook saltstack ("SaltStack"))
-          (ap/create-helm-dash-hook clojure ("Clojure"))
-          (ap/create-helm-dash-hook sql ("PostgreSQL" "MySQL"))))
+  (defmacro ap/create-helm-dash-hook (mode docsets)
+    (let* ((mode-s (symbol-name mode))
+           (fun (intern (concat "helm-dash-hook-" mode-s)))
+           (hook (intern (concat mode-s "-mode-hook"))))
+      `(progn
+         (defun ,fun ()
+           (when (require 'helm-dash nil :noerror)
+             (-each (-difference ',docsets
+                                 (helm-dash-installed-docsets))
+               #'helm-dash-install-docset)
+             (setq-local helm-dash-docsets ',docsets)))
+         (add-hook (quote ,hook) (function ,fun)))))
+
+  (use-package helm-dash
+    :defer 20
+    :defines helm-dash-docsets
+    :config (progn
+            (ap/create-helm-dash-hook nginx ("Nginx"))
+            (ap/create-helm-dash-hook ansible ("Ansible"))
+            (ap/create-helm-dash-hook php ("PHP" "Symfony"))
+            (ap/create-helm-dash-hook twig ("Twig"))
+            (ap/create-helm-dash-hook js2 ("JavaScript" "NodeJS" "jQuery" "Express"))
+            (ap/create-helm-dash-hook markdown ("Markdown"))
+            (ap/create-helm-dash-hook saltstack ("SaltStack"))
+            (ap/create-helm-dash-hook clojure ("Clojure"))
+            (ap/create-helm-dash-hook sql ("PostgreSQL" "MySQL"))))
 #+END_SRC
 
 ** which-func
@@ -1001,7 +1004,7 @@ Use the modeline to show which function definition the point is in.
 
 #+BEGIN_SRC emacs-lisp
-(req-package which-func
+(use-package which-func
   :init (which-function-mode)
   :config (setq which-func-modes t))
 #+END_SRC
@@ -1011,7 +1014,7 @@ A nicer way to browse keybindings for major modes.
 
 #+BEGIN_SRC emacs-lisp
-(req-package discover-my-major
+(use-package discover-my-major
   :bind ("C-h C-m" . discover-my-major))
 #+END_SRC
 
@@ -1021,7 +1024,7 @@ Makes some context menus for dired and other things, similarly to the way magit’s popups work.
 
 #+BEGIN_SRC emacs-lisp
-(req-package discover
+(use-package discover
   :config (global-discover-mode))
 #+END_SRC
 
@@ -1031,7 +1034,7 @@ Documentation in the echo-area (where the minibuffer is displayed) is rather useful.
 
 #+BEGIN_SRC emacs-lisp
-(req-package eldoc
+(use-package eldoc
   :commands (eldoc-mode)
   :diminish eldoc-mode
   :config (progn
@@ -1109,7 +1112,7 @@ (while (search-forward "   " nil t)
         (replace-match ""))))
 
-  (req-package rect
+  (use-package rect
     :init (defun copy-rectangle (start end)
             "Copy the region-rectangle."
             (interactive "r")
@@ -1168,7 +1171,7 @@ Ivy is the new kid on the completion block.  I wonder if it can replace helm and ido.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package swiper
+  (use-package swiper
     :bind (("C-s" . swiper)
            ("C-r" . swiper)
            ("C-c C-r" . ivy-resume)
@@ -1190,7 +1193,7 @@ ** counsel
 
 #+BEGIN_SRC emacs-lisp
-  (req-package counsel
+  (use-package counsel
     :bind (("M-x" . counsel-M-x)
            ("<apps>" . counsel-M-x)
            ("<menu>" . counsel-M-x)
@@ -1224,8 +1227,7 @@ function uses it internally, so I’m keeping it around, even though I don’t use it directly.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package smex
-    :require ido
+  (use-package smex
     :config (progn
               (setq smex-key-advice-ignore-menu-bar t
                     smex-auto-update nil)
@@ -1343,7 +1345,7 @@ Diminishing major modes does not happen in the same manner as minor modes.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package cyphejor
+  (use-package cyphejor
     :init (progn
             (setq cyphejor-rules `(("emacs"       "ε")
                                    ("diff"        "Δ")
@@ -1377,17 +1379,17 @@ Some modes that I don’t really customise much, mostly for
 configuration files.
 #+BEGIN_SRC emacs-lisp
-  (req-package xrdb-mode
+  (use-package xrdb-mode
     :mode (("\\.Xdefaults\\'" . xrdb-mode)
            ("\\.Xresources\\'" . xrdb-mode)))
 
-  (req-package haskell-mode
+  (use-package haskell-mode
     :mode (("\\.hs\\'" . haskell-mode)))
 
-  (req-package dockerfile-mode
+  (use-package dockerfile-mode
     :mode (("Dockerfile\\'" . dockerfile-mode)))
 
-  (req-package nix-mode
+  (use-package nix-mode
     :mode (("\\.nix\\'" . nix-mode))
     :config (progn
               (add-hook 'nix-mode-hook (lambda ()
@@ -1397,33 +1399,33 @@ (define-derived-mode xmonad-mode haskell-mode "XM")   (add-to-list 'auto-mode-alist '("xmobarrc\\'" . xmonad-mode))
   (add-to-list 'auto-mode-alist '("xmonad.hs\\'" . xmonad-mode))
 
-  (req-package nginx-mode
+  (use-package nginx-mode
     :defer t
     :mode (("/nginx/servers/" . nginx-mode)
            ("/nginx/.*\\.d/" . nginx-mode))
     :config (progn
               (setq nginx-indent-tabs-mode t)))
 
-  (req-package lua-mode
+  (use-package lua-mode
     :defer t)
 
-  (req-package ruby-mode
+  (use-package ruby-mode
     :mode (("\\.rb\\'" . ruby-mode)
            ("\\.cap\\'" . ruby-mode)))
 
-  (req-package go-mode
+  (use-package go-mode
     :mode (("\\.go\\'" . go-mode)))
 
-  (req-package jinja2-mode
+  (use-package jinja2-mode
     :mode (("\\.j2\\'" . jinja2-mode)
            ("\\.jinja\\'" . jinja2-mode)))
 
-  (req-package scss-mode
+  (use-package scss-mode
     :defer t
     :config (progn
               (setq scss-compile-at-save nil)))
 
-  (req-package yaml-mode
+  (use-package yaml-mode
     :mode (("/group_vars/.*" . yaml-mode)
            ("/host_vars/.*" . yaml-mode)))
 
@@ -1440,7 +1442,7 @@ I use [[http://ledger-cli.org/][=ledger=]] to manage my finances.  It has an Emacs mode, which works really nicely.
 
 #+BEGIN_SRC emacs-lisp
-(req-package ledger-mode
+(use-package ledger-mode
   :mode ("\\.ledger\\'" . ledger-mode)
   :config (progn
             (defun setup-ledger-mode ()
@@ -1458,7 +1460,7 @@ ** Markdown
 
 #+BEGIN_SRC emacs-lisp
-(req-package markdown-mode
+(use-package markdown-mode
   :defer t
   :config (progn
             (add-hook 'markdown-mode-hook #'turn-on-auto-fill)))
@@ -1471,7 +1473,7 @@ *** TODO Check whether all this configuration is necessary or helpful.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package org
+  (use-package org
     :bind (("C-c C-a" . org-agenda-list)
            ("C-c a" . org-agenda)
            ("C-c l" . org-store-link))
@@ -1535,8 +1537,7 @@ to have my =ledger= setup in an org file with some graph processing with R or something.
 
 #+BEGIN_SRC emacs-lisp
-(req-package org-babel
-  :require org
+(use-package org-babel
   :defer t
   :config (org-babel-do-load-languages
            'org-babel-load-languages
@@ -1549,8 +1550,7 @@ I can use this to keep a journal.  I should use it.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package org-journal
-    :require org
+  (use-package org-journal
     :bind ("s-j" . org-journal-new-entry)
     :defer 20
     :config (progn
@@ -1565,8 +1565,7 @@ **** org-mobile 
 ***** TODO Setup org-mobile
 #+BEGIN_SRC emacs-lisp
-  (req-package org-mobile
-    :require org
+  (use-package org-mobile
     :defer 30
     :config (progn
               (setq org-mobile-directory "~/Mobile/Org"
@@ -1618,7 +1617,7 @@ On-the-fly error checking in programming modes?  Yes please.
 
 #+BEGIN_SRC emacs-lisp
-(req-package flycheck
+(use-package flycheck
   :diminish " ✓"
   :init (global-flycheck-mode))
 #+END_SRC
@@ -1628,30 +1627,23 @@ Go has a few packages to inter-operate with other emacs packages.
 
 #+BEGIN_SRC emacs-lisp
-(when (file-exists-p "src/code.google.com/p/go.tools/cmd/oracle/oracle.el")
-  (req-package oracle
-    :load-path ,(expand-file-name "src/code.google.com/p/go.tools/cmd/oracle/oracle.el" (getenv "GOPATH"))
+  (use-package company-go
+    :config (progn
+              (setq company-go-show-annotation t))
     :init (progn
-            (add-hook 'go-mode-hook #'go-oracle-mode))))
-
-(req-package company-go
-  :require go-mode
-  :config (progn
-            (setq company-go-show-annotation t)
             (defun ap/company-go-setup ()
               (set (make-local-variable 'company-backends)
                    '(company-go)))
             (add-hook 'go-mode-hook #'ap/company-go-setup)))
 
-(req-package go-eldoc
-  :require go-mode
-  :config (progn
+  (use-package go-eldoc
+    :init (progn
             (add-hook 'go-mode-hook #'go-eldoc-setup)))
 
-(req-package go-projectile
-  :require (go-mode go-eldoc projectile)
-  :config (progn
-            (setq go-projectile-switch-gopath 'maybe)))
+  (use-package go-projectile
+    :defer t
+    :config (progn
+              (setq go-projectile-switch-gopath 'maybe)))
 
 
 #+END_SRC
@@ -1661,7 +1653,7 @@ A nice completion backend for programming modes.
 
 #+BEGIN_SRC emacs-lisp
-(req-package ggtags
+(use-package ggtags
   :commands turn-on-ggtags-mode
   :config (progn
             (bind-key "q" #'ggtags-navigation-mode-abort ggtags-navigation-mode-map))
@@ -1697,7 +1689,7 @@ Lisp syntax allows for really easy refactoring.  Redshank gives some operations that aren’t part of paredit, like extracting variables into
 let bindings.
 #+BEGIN_SRC emacs-lisp
-(req-package redshank
+(use-package redshank
   :diminish " Λ"
   :defer t
   :init (progn
@@ -1717,7 +1709,7 @@ Go-to function for elisp. Except it works through the entire Emacs ecosystem.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package elisp-slime-nav
+  (use-package elisp-slime-nav
     :commands elisp-slime-nav-mode
     :diminish elisp-slime-nav-mode
     :init (progn
@@ -1727,7 +1719,7 @@ Interactive elisp
 
 #+BEGIN_SRC emacs-lisp
-(req-package ielm
+(use-package ielm
   :defer t
   :config (progn
             (add-hook 'ielm-mode-hook (lambda ()
@@ -1771,7 +1763,7 @@ A REPL thing for Scheme.  Hopefully I’ll get to use it more in the future.
 
 #+BEGIN_SRC emacs-lisp
-(req-package geiser
+(use-package geiser
   :commands (geiser-mode
              geiser
              run-geiser
@@ -1783,7 +1775,7 @@ A REPL thing (and more) for Lisp.
 
 #+BEGIN_SRC emacs-lisp
-(req-package slime
+(use-package slime
   :commands (slime)
   :config (progn
             (let ((ql-slime-helper (expand-file-name "~/quicklisp/slime-helper.el")))
@@ -1796,21 +1788,20 @@ *** Clojure
 
 #+BEGIN_SRC emacs-lisp
-(req-package clojure-mode
-  :defer t
-  :init (progn
-          (add-hook 'cider-repl-mode-hook (lambda () (highlight-changes-mode -1)))
-          (add-hook 'clojure-mode-hook #'ap/lisp-setup)))
+  (use-package clojure-mode
+    :defer t
+    :init (progn
+            (add-hook 'cider-repl-mode-hook (lambda () (highlight-changes-mode -1)))
+            (add-hook 'clojure-mode-hook #'ap/lisp-setup)))
 
-(req-package clj-refactor
-  :defer t
-  :require clojure-mode
-  :config (progn
-            (cljr-add-keybindings-with-prefix "C-c C-m"))
-  :init (progn
-          (defun turn-on-clj-refactor-mode ()
-            (clj-refactor-mode 1))
-          (add-hook 'clojure-mode-hook #'turn-on-clj-refactor-mode)))
+  (use-package clj-refactor
+    :defer t
+    :config (progn
+              (cljr-add-keybindings-with-prefix "C-c C-m"))
+    :init (progn
+            (defun turn-on-clj-refactor-mode ()
+              (clj-refactor-mode 1))
+            (add-hook 'clojure-mode-hook #'turn-on-clj-refactor-mode)))
 #+END_SRC
 
 **** cider
@@ -1818,8 +1809,7 @@ A REPL thing for Clojure
 
 #+BEGIN_SRC emacs-lisp
-(req-package cider
-  :require clojure-mode
+(use-package cider
   :defer t
   :config (progn
             (setq nrepl-hide-special-buffers t)
@@ -1831,7 +1821,7 @@ ** Auto-compile 
 Auto-compile emacs lisp when saving.
 #+BEGIN_SRC emacs-lisp
-(req-package auto-compile
+(use-package auto-compile
   :defer t
   :init (add-hook 'emacs-lisp-mode-hook #'auto-compile-on-save-mode))
 #+END_SRC
@@ -1842,7 +1832,7 @@ Although I don’t use C or C++, setting up the mode is helpful because quite a few other modes are derived from it.
 
 #+BEGIN_SRC emacs-lisp
-(req-package cc-mode
+(use-package cc-mode
   :defer 5
   :init (progn
           (add-hook 'c-mode-common-hook #'electric-indent-mode))
@@ -1859,7 +1849,7 @@ It’s nice to be able to quickly evaluate some code.  Although I don’t
 really seem to use it.
 #+BEGIN_SRC emacs-lisp
-(req-package quickrun
+(use-package quickrun
   :bind (("C-c C-e" . quickrun)))
 #+END_SRC
 
@@ -1873,7 +1863,7 @@ think there’s anything as good as paredit/redshank for refactoring in it though
 
 #+BEGIN_SRC emacs-lisp
-  (req-package js2-mode
+  (use-package js2-mode
     :mode ("\\.js\\'" . js2-mode)
     :functions js2-next-error
     :config (progn
@@ -1894,7 +1884,7 @@ *** coffee-mode
 
 #+BEGIN_SRC emacs-lisp
-  (req-package coffee-mode
+  (use-package coffee-mode
     :mode ("\\.coffee\\'" . coffee-mode))
 #+END_SRC
 
@@ -1904,7 +1894,7 @@ Tern understands javascript.  It adds really clever documented completions, besides other IDE-like things.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package tern
+  (use-package tern
     :commands ap/enable-tern
     :defer 5
     :config (progn
@@ -1913,15 +1903,14 @@ (defun ap/enable-tern ()                 (tern-mode 1))
               (add-hook 'js2-mode-hook #'ap/enable-tern)))
 
-  (req-package company-tern
-    :defer 5
-    :require (tern company))
+  (with-eval-after-load 'tern
+    (use-package company-tern))
 #+END_SRC
 
 *** json-mode
 
 #+BEGIN_SRC emacs-lisp
-  (req-package json-mode
+  (use-package json-mode
     :mode (("\\.json\\'" . json-mode)
            ("\\.sailsrc\\'" . json-mode)))
 #+END_SRC
@@ -1933,7 +1922,7 @@ calls.  Feels a bit like using =org-babel=.  I wonder if there’s an integration between the two yet.
 
 #+BEGIN_SRC emacs-lisp
-(req-package restclient
+(use-package restclient
   :mode ("\\.api\\'" . restclient-mode)
   :config (progn
             (defun imenu-restclient-sections ()
@@ -1947,7 +1936,7 @@ *** sgml-mode 
 This is for HTML, since old versions of HTML were derived from SGML.
 #+BEGIN_SRC emacs-lisp
-(req-package sgml-mode
+(use-package sgml-mode
   :defer t
   :config (setq sgml-basic-offset 4))
 #+END_SRC
@@ -1957,7 +1946,7 @@ Emmet is really nice to write HTML quickly.  Especially with
 frameworks that require multiple nested elements to do anything useful.
 #+BEGIN_SRC emacs-lisp
-(req-package emmet-mode
+(use-package emmet-mode
   :commands (emmet-mode)
   :diminish (emmet-mode . " >")
   :init (progn
@@ -1972,7 +1961,7 @@ is really nice, because it handles the HTML part the same way in all of them as well.
 
 #+BEGIN_SRC emacs-lisp
-(req-package web-mode
+(use-package web-mode
   :mode (("/views/.*\\.php\\'" . web-mode)
          ("/layouts/.*\\.html\\'" . web-mode)
          ("/templates/.*\\.php\\'" . web-mode)
@@ -1999,7 +1988,7 @@ With =web-mode= being so good, I don’t really use this much.  It’s good for embedded SQL though.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package mmm-auto
+  (use-package mmm-auto
     :ensure mmm-mode
     :config (progn
               (mmm-add-classes
@@ -2035,7 +2024,7 @@ **** TODO Setup for javascript + SQL * Spelling
 
 #+BEGIN_SRC emacs-lisp
-(req-package ispell
+(use-package ispell
   :bind (("<f8>" . ispell-word))
   :config (progn
             (setq ispell-program-name "aspell"
@@ -2052,7 +2041,7 @@ #+BEGIN_SRC emacs-lisp (add-hook 'after-save-hook
           #'executable-make-buffer-file-executable-if-script-p)
 
-(req-package sh-script
+(use-package sh-script
   :mode (("\\.zsh\\'" . shell-script-mode))
   :config (setq sh-shell-file "/usr/bin/env zsh"))
 #+END_SRC
@@ -2067,15 +2056,15 @@ I should try to get into the habit of using this more.  It’s really nice, when I remember to use it.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package eshell
+  (use-package eshell
     :bind ("C-c s" . eshell)
     :config (progn
               (setq eshell-directory-name "~/.emacs.d/eshell")
               (add-hook 'eshell-load-hook (lambda ()
                                             (bind-key "C-c C-l" #'helm-eshell-history eshell-mode-map)))))
 
-  (req-package em-smart
-    :require eshell
+  (use-package em-smart
+    :commands eshell-smart-initialize
     :init (progn
             (add-hook 'eshell-load-hook #'eshell-smart-initialize))
     :config (progn
@@ -2095,23 +2084,23 @@ #+END_SRC
 
 #+BEGIN_SRC emacs-lisp
-  (req-package esh-buf-stack
-    :require eshell
-    :config (progn
-              (setup-eshell-buf-stack)
+  (with-eval-after-load 'eshell
+    (use-package esh-buf-stack
+      :init (progn
               (add-hook 'eshell-load-hook (lambda ()
-                                            (bind-key "M-q" #'eshell-push-command eshell-mode-map)))))
+                                            (setup-eshell-buf-stack)
+                                            (bind-key "M-q" #'eshell-push-command eshell-mode-map))))))
 #+END_SRC
 
 *** Shells
 
 #+BEGIN_SRC emacs-lisp
-  (req-package shell
+  (use-package shell
     :defer t
     :config (define-key shell-mode-map
               (kbd "C-d") 'comint-delchar-or-eof-or-kill-buffer))
 
-  (req-package comint
+  (use-package comint
     :defer t
     :config (bind-key "C-c C-l" #'helm-comint-input-ring comint-mode-map))
 
@@ -2139,7 +2128,7 @@ =Align= is a useful command to line things up, once given some rules. The most important one for me is JSON property alignment.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package align
+  (use-package align
     :defer 10
     :config (progn
               (add-to-list 'align-rules-list
@@ -2192,7 +2181,7 @@ Sub-word movement is really nice for camel- and Pascal-case
 
 #+BEGIN_SRC emacs-lisp
-(req-package subword
+(use-package subword
   :init (global-subword-mode t))
 #+END_SRC
 
@@ -2200,7 +2189,7 @@ I find that =zap-up-to-char= normally makes more sense to me than =zap-to-char=.
 
 #+BEGIN_SRC emacs-lisp
-(req-package misc
+(use-package misc
   :bind (("M-z" . zap-up-to-char)
          ("M-Z" . zap-to-char)))
 #+END_SRC
@@ -2209,7 +2198,7 @@ Expanding the region by semantic units was something I quite liked from Sublime Text.  As always, there’s a mode for that.
 
 #+BEGIN_SRC emacs-lisp
-(req-package expand-region
+(use-package expand-region
   :bind ("C-M-SPC" . er/expand-region))
 #+END_SRC
 
@@ -2219,7 +2208,7 @@ I like using typographic symbols, but I don’t always remember (how) to type them.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package typo
+  (use-package typo
     :config (progn
               (typo-global-mode 1))
     :init (progn
@@ -2232,7 +2221,7 @@ Avy is a really nice way to move around files, like ace-jump-mode, but somehow I prefer it.
 
 #+BEGIN_SRC emacs-lisp
-(req-package avy
+(use-package avy
   :bind* (("M-g g" . avy-goto-line)
           ("M-g M-g" . avy-goto-line)
           ("C-|" . avy-goto-line)
@@ -2248,7 +2237,7 @@ This is like popping the mark, only it filters to only change areas and doesn’t go back to the same place more than once.
 
 #+BEGIN_SRC emacs-lisp
-(req-package goto-chg
+(use-package goto-chg
   :bind ("C-x SPC" . goto-last-change))
 #+END_SRC
 
@@ -2259,7 +2248,7 @@ cursors was one of my favourite features, so I was really happy when I saw that multiple-cursors was released for Emacs.
 
 #+BEGIN_SRC emacs-lisp
-(req-package multiple-cursors
+(use-package multiple-cursors
   :defer 1
   :config (progn
             (bind-key "C-." #'mc/mark-next-like-this)
@@ -2275,7 +2264,7 @@ Balanced parentheses in lisps are nice, but all the refactoring and movement commands are much more interesting.
 
 #+BEGIN_SRC emacs-lisp
-(req-package paredit
+(use-package paredit
   :diminish "()"
   :commands (paredit-mode)
   :init (progn
@@ -2296,7 +2285,8 @@ I didn’t find smartparens’ implementation of paredit style to be as nice as the real version
 
 #+BEGIN_SRC emacs-lisp
-  (req-package smartparens-config
+  (eval-when-compile (require 'smartparens))
+  (use-package smartparens-config
     :ensure smartparens
     :config (progn
               (sp-use-smartparens-bindings)
@@ -2327,7 +2317,7 @@ Transposing lines, made easier.
 
 #+BEGIN_SRC emacs-lisp
-(req-package move-text
+(use-package move-text
   :config (move-text-default-bindings))
 #+END_SRC
 
@@ -2337,7 +2327,7 @@ Emacs’ default handling of undo is a bit confusing.  Undo-tree makes it much clearer.  It’s especially helpful for protoyping and refactoring.
 
 #+BEGIN_SRC emacs-lisp
-(req-package undo-tree
+(use-package undo-tree
   :config (progn
             (global-undo-tree-mode)
             ;; Keep region when undoing in region
@@ -2361,7 +2351,7 @@ so this package is pretty useful because it highlights everything in the buffer for me.
 
 #+BEGIN_SRC emacs-lisp
-(req-package visual-regexp
+(use-package visual-regexp
   :bind (("C-c r" . vr/replace)
          ("C-c q" . vr/query-replace)
          ("C-c m" . vc/mc-mark)))
@@ -2381,7 +2371,7 @@ to the =after-save-hook= ensuring to always tangle and byte-compile the =org=-document after changes.
 
 #+BEGIN_SRC emacs-lisp
-  (req-package async
+  (use-package async
     :commands (async-start)
     :defer 2)
 
@@ -2412,10 +2402,6 @@ # Local Variables: # eval: (when (fboundp #'tangle-init) (add-hook 'after-save-hook #'tangle-init))
 # End:
 * End
-
-#+BEGIN_SRC emacs-lisp
-(req-package-finish)
-#+END_SRC
 
 Start a server if possible.  A daemon is already a server.
 #+BEGIN_SRC emacs-lisp