[emacs] cut init time in half (~0.450s now) using use-package tweaks
authorAmin Bandali <bandali@gnu.org>
Mon, 12 Nov 2018 01:47:09 +0000 (20:47 -0500)
committerAmin Bandali <bandali@gnu.org>
Mon, 12 Nov 2018 01:47:09 +0000 (20:47 -0500)
lazy-load more things, either with a time delay or after another
package has loaded

init.org

index 99e9631..79a97e4 100644 (file)
--- a/init.org
+++ b/init.org
@@ -367,6 +367,7 @@ See [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.htm
 
 #+begin_src emacs-lisp
 (use-package server
 
 #+begin_src emacs-lisp
 (use-package server
+  :defer 1
   :config (or (server-running-p) (server-mode)))
 #+end_src
 
   :config (or (server-running-p) (server-mode)))
 #+end_src
 
@@ -700,6 +701,7 @@ In short, my favourite way of life.
 
 #+begin_src emacs-lisp
 (use-package org
 
 #+begin_src emacs-lisp
 (use-package org
+  :defer 3
   :config
   (setq org-src-tab-acts-natively t
         org-src-preserve-indentation nil
   :config
   (setq org-src-tab-acts-natively t
         org-src-preserve-indentation nil
@@ -714,6 +716,7 @@ In short, my favourite way of life.
   (org-latex-packages-alist '(("" "listings") ("" "color"))))
 
 (use-package ox-latex
   (org-latex-packages-alist '(("" "listings") ("" "color"))))
 
 (use-package ox-latex
+  :after ox
   :config
   (setq org-latex-listings 'listings
         ;; org-latex-prefer-user-labels t
   :config
   (setq org-latex-listings 'listings
         ;; org-latex-prefer-user-labels t
@@ -729,9 +732,11 @@ In short, my favourite way of life.
                  ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
                t))
 
                  ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
                t))
 
-(use-package ox-beamer)
+(use-package ox-beamer
+  :after ox)
 
 (use-package orgalist
 
 (use-package orgalist
+  :after message
   :hook (message-mode . orgalist-mode))
 #+end_src
 
   :hook (message-mode . orgalist-mode))
 #+end_src
 
@@ -793,7 +798,7 @@ Not just how I do git, but /the/ way to do git.
 
 #+begin_src emacs-lisp
 (use-package magit
 
 #+begin_src emacs-lisp
 (use-package magit
-  :defer t
+  :defer 2
   :bind
   (("s-g" . magit-status)
    :prefix-map amin--magit-prefix-map
   :bind
   (("s-g" . magit-status)
    :prefix-map amin--magit-prefix-map
@@ -878,6 +883,7 @@ There's no way I could top that, so I won't attempt to.
 
 #+begin_src emacs-lisp
 (use-package eshell
 
 #+begin_src emacs-lisp
 (use-package eshell
+  :defer t
   :commands eshell
   :config
   (eval-when-compile (defvar eshell-prompt-regexp))
   :commands eshell
   :config
   (eval-when-compile (defvar eshell-prompt-regexp))
@@ -905,6 +911,7 @@ There's no way I could top that, so I won't attempt to.
 
 #+begin_src emacs-lisp
 (use-package ibuffer
 
 #+begin_src emacs-lisp
 (use-package ibuffer
+  :defer t
   :bind
   (("C-x C-b" . ibuffer-other-window)
    ("C-c b B" . ibuffer-other-window)
   :bind
   (("C-x C-b" . ibuffer-other-window)
    ("C-c b B" . ibuffer-other-window)
@@ -968,6 +975,7 @@ There's no way I could top that, so I won't attempt to.
 
 #+begin_src emacs-lisp
 (use-package outline
 
 #+begin_src emacs-lisp
 (use-package outline
+  :defer t
   :hook (prog-mode . outline-minor-mode)
   :bind
   (:map
   :hook (prog-mode . outline-minor-mode)
   :bind
   (:map
@@ -1036,7 +1044,7 @@ TODO: break this giant source block down into individual org sections.
   (add-hook 'prog-mode-hook #'indicate-buffer-boundaries-left))
 
 (use-package recentf
   (add-hook 'prog-mode-hook #'indicate-buffer-boundaries-left))
 
 (use-package recentf
-  :demand t
+  :defer 0.5
   :config
   (add-to-list 'recentf-exclude "^/\\(?:ssh\\|su\\|sudo\\)?:")
   (setq recentf-max-saved-items 40))
   :config
   (add-to-list 'recentf-exclude "^/\\(?:ssh\\|su\\|sudo\\)?:")
   (setq recentf-max-saved-items 40))
@@ -1077,7 +1085,7 @@ TODO: break this giant source block down into individual org sections.
 
 #+begin_src emacs-lisp
 (use-package company
 
 #+begin_src emacs-lisp
 (use-package company
-  :defer 5
+  :defer 2
   :bind
   (:map company-active-map
         ([tab]    . company-complete-common-or-cycle)
   :bind
   (:map company-active-map
         ([tab]    . company-complete-common-or-cycle)
@@ -1096,6 +1104,7 @@ TODO: break this giant source block down into individual org sections.
 * Syntax and spell checking
 #+begin_src emacs-lisp
 (use-package flycheck
 * Syntax and spell checking
 #+begin_src emacs-lisp
 (use-package flycheck
+  :defer 3
   :hook (prog-mode . flycheck-mode)
   :bind
   (:map flycheck-mode-map
   :hook (prog-mode . flycheck-mode)
   :bind
   (:map flycheck-mode-map
@@ -1110,6 +1119,7 @@ TODO: break this giant source block down into individual org sections.
 
 ;; http://endlessparentheses.com/ispell-and-apostrophes.html
 (use-package ispell
 
 ;; http://endlessparentheses.com/ispell-and-apostrophes.html
 (use-package ispell
+  :defer 3
   :config
   ;; ’ can be part of a word
   (setq ispell-local-dictionary-alist
   :config
   ;; ’ can be part of a word
   (setq ispell-local-dictionary-alist
@@ -1139,6 +1149,7 @@ TODO: break this giant source block down into individual org sections.
 
 #+begin_src emacs-lisp
 (use-package alloy-mode
 
 #+begin_src emacs-lisp
 (use-package alloy-mode
+  :defer t
   :config (setq alloy-basic-offset 2))
 #+end_src
 
   :config (setq alloy-basic-offset 2))
 #+end_src
 
@@ -1146,6 +1157,7 @@ TODO: break this giant source block down into individual org sections.
 
 #+begin_src emacs-lisp
 (use-package proof-site  ; Proof General
 
 #+begin_src emacs-lisp
 (use-package proof-site  ; Proof General
+  :defer t
   :load-path "lib/proof-site/generic/")
 #+end_src
 
   :load-path "lib/proof-site/generic/")
 #+end_src
 
@@ -1173,6 +1185,7 @@ TODO: break this giant source block down into individual org sections.
 
 #+begin_src emacs-lisp
 (use-package haskell-mode
 
 #+begin_src emacs-lisp
 (use-package haskell-mode
+  :defer t
   :config
   (setq haskell-indentation-layout-offset 4
         haskell-indentation-left-offset 4
   :config
   (setq haskell-indentation-layout-offset 4
         haskell-indentation-left-offset 4
@@ -1196,6 +1209,7 @@ executable from [[https://github.com/mpickering/apply-refact][apply-refact]].
 
 #+begin_src emacs-lisp
 (use-package hlint-refactor
 
 #+begin_src emacs-lisp
 (use-package hlint-refactor
+  :after haskell-mode
   :bind (:map hlint-refactor-mode-map
               ("C-c l b" . hlint-refactor-refactor-buffer)
               ("C-c l r" . hlint-refactor-refactor-at-point))
   :bind (:map hlint-refactor-mode-map
               ("C-c l b" . hlint-refactor-refactor-buffer)
               ("C-c l r" . hlint-refactor-refactor-at-point))
@@ -1205,7 +1219,8 @@ executable from [[https://github.com/mpickering/apply-refact][apply-refact]].
 *** [[https://github.com/flycheck/flycheck-haskell][flycheck-haskell]]
 
 #+begin_src emacs-lisp
 *** [[https://github.com/flycheck/flycheck-haskell][flycheck-haskell]]
 
 #+begin_src emacs-lisp
-(use-package flycheck-haskell)
+(use-package flycheck-haskell
+  :after haskell-mode)
 #+end_src
 
 *** [[https://github.com/ndmitchell/hlint/blob/20e116a043f2073c57b17b24ae6364b5e433ba7e/data/hs-lint.el][hs-lint.el]]
 #+end_src
 
 *** [[https://github.com/ndmitchell/hlint/blob/20e116a043f2073c57b17b24ae6364b5e433ba7e/data/hs-lint.el][hs-lint.el]]
@@ -1359,6 +1374,7 @@ instead.
 
 #+begin_src emacs-lisp
 (use-package sgml-mode
 
 #+begin_src emacs-lisp
 (use-package sgml-mode
+  :defer t
   :config
   (setq sgml-basic-offset 2))
 #+end_src
   :config
   (setq sgml-basic-offset 2))
 #+end_src
@@ -1367,6 +1383,7 @@ instead.
 
 #+begin_src emacs-lisp
 (use-package css-mode
 
 #+begin_src emacs-lisp
 (use-package css-mode
+  :defer t
   :config
   (setq css-indent-offset 2))
 #+end_src
   :config
   (setq css-indent-offset 2))
 #+end_src
@@ -1375,6 +1392,7 @@ instead.
 
 #+begin_src emacs-lisp
 (use-package web-mode
 
 #+begin_src emacs-lisp
 (use-package web-mode
+  :defer t
   :mode "\\.html\\'"
   :config
   (setq-every! 2
   :mode "\\.html\\'"
   :config
   (setq-every! 2
@@ -1387,6 +1405,7 @@ instead.
 
 #+begin_src emacs-lisp
 (use-package emmet-mode
 
 #+begin_src emacs-lisp
 (use-package emmet-mode
+  :after (:any web-mode css-mode sgml-mode)
   :bind* (("C-)" . emmet-next-edit-point)
           ("C-(" . emmet-prev-edit-point))
   :config
   :bind* (("C-)" . emmet-next-edit-point)
           ("C-(" . emmet-prev-edit-point))
   :config
@@ -1399,6 +1418,7 @@ instead.
 
 #+begin_src emacs-lisp
 (use-package nix-mode
 
 #+begin_src emacs-lisp
 (use-package nix-mode
+  :defer t
   :mode "\\.nix\\'")
 #+end_src
 
   :mode "\\.nix\\'")
 #+end_src
 
@@ -1517,6 +1537,7 @@ Emacs package that displays available keybindings in popup
 
 #+begin_src emacs-lisp
 (use-package crux
 
 #+begin_src emacs-lisp
 (use-package crux
+  :defer 1
   :bind (("C-c d"   . crux-duplicate-current-line-or-region)
          ("C-c M-d" . crux-duplicate-and-comment-current-line-or-region)
          ("C-c b K" . crux-kill-other-buffers)
   :bind (("C-c d"   . crux-duplicate-current-line-or-region)
          ("C-c M-d" . crux-duplicate-and-comment-current-line-or-region)
          ("C-c b K" . crux-kill-other-buffers)
@@ -1541,7 +1562,7 @@ Emacs package that displays available keybindings in popup
 
 #+begin_src emacs-lisp
 (use-package projectile
 
 #+begin_src emacs-lisp
 (use-package projectile
-  :defer 5
+  :defer 2
   :bind-keymap ("C-c p" . projectile-command-map)
   :config
   (projectile-mode)
   :bind-keymap ("C-c p" . projectile-command-map)
   :config
   (projectile-mode)
@@ -1562,6 +1583,7 @@ Emacs package that displays available keybindings in popup
 
 #+begin_src emacs-lisp
 (use-package helpful
 
 #+begin_src emacs-lisp
 (use-package helpful
+  :defer 1
   :bind
   (;; ("C-h F"   . helpful-function)
    ("C-h f"   . helpful-callable)
   :bind
   (;; ("C-h F"   . helpful-function)
    ("C-h f"   . helpful-callable)
@@ -1586,9 +1608,10 @@ Emacs package that displays available keybindings in popup
 
 #+begin_src emacs-lisp
 (use-package shell-pop
 
 #+begin_src emacs-lisp
 (use-package shell-pop
-  :custom
-  (shell-pop-universal-key "C-c e")
-  (shell-pop-shell-type '("eshell" "*eshell*" (lambda nil (eshell)))))
+  :defer 1
+  :init
+  (setq shell-pop-universal-key "C-c e"
+        shell-pop-shell-type '("eshell" "*eshell*" (lambda nil (eshell)))))
 #+end_src
 
 ** [[https://github.com/EricCrosson/unkillable-scratch][unkillable-scratch]]
 #+end_src
 
 ** [[https://github.com/EricCrosson/unkillable-scratch][unkillable-scratch]]
@@ -1597,6 +1620,7 @@ Make =*scratch*= and =*Messages*= unkillable.
 
 #+begin_src emacs-lisp
 (use-package unkillable-scratch
 
 #+begin_src emacs-lisp
 (use-package unkillable-scratch
+  :defer 3
   :config
   (unkillable-scratch 1)
   :custom
   :config
   (unkillable-scratch 1)
   :custom
@@ -1613,6 +1637,7 @@ Make =*scratch*= and =*Messages*= unkillable.
 
 #+begin_src emacs-lisp
 (use-package boxquote
 
 #+begin_src emacs-lisp
 (use-package boxquote
+  :defer 3
   :bind
   (:prefix-map amin--boxquote-prefix-map
    :prefix "C-c q"
   :bind
   (:prefix-map amin--boxquote-prefix-map
    :prefix "C-c q"
@@ -1644,7 +1669,7 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
 
 #+begin_src emacs-lisp
 (use-package highlight-indent-guides
 
 #+begin_src emacs-lisp
 (use-package highlight-indent-guides
-  :defer 2
+  :defer 3
   :hook ((prog-mode . highlight-indent-guides-mode)
          ;; (org-mode  . highlight-indent-guides-mode)
          )
   :hook ((prog-mode . highlight-indent-guides-mode)
          ;; (org-mode  . highlight-indent-guides-mode)
          )
@@ -1661,6 +1686,7 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
 
 #+begin_src emacs-lisp
 (use-package pdf-tools
 
 #+begin_src emacs-lisp
 (use-package pdf-tools
+  :defer t
   :magic ("%PDF" . pdf-view-mode)
   :config
   (setq pdf-view-resize-factor 1.05)
   :magic ("%PDF" . pdf-view-mode)
   :config
   (setq pdf-view-resize-factor 1.05)
@@ -1685,6 +1711,7 @@ Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
 
 #+begin_src emacs-lisp
 (use-package typo
 
 #+begin_src emacs-lisp
 (use-package typo
+  :defer 2
   :config
   (typo-global-mode 1)
   :hook (text-mode . typo-mode))
   :config
   (typo-global-mode 1)
   :hook (text-mode . typo-mode))