My attempt to optimize my emacs load time <1 second
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.

462 lines
14 KiB

  1. ;;; custom-packages --- Provide all the use-package declarations
  2. ;;;
  3. ;;; Commentary:
  4. ;;;
  5. ;;;;; See https://github.com/jwiegley/use-package for help
  6. ;;;;; USE PACKAGE help
  7. ;;;;; (use-package package-here
  8. ;;;;; :commands (cmd cmd-all cmd-etc) ;; List commands used to ":defer" the package
  9. ;;;;; :bind-keymap
  10. ;;;;; ("M-q" . package-here-keymap) ;; Setup an entire keymap using Prefix "M-q"
  11. ;;;;; :bind
  12. ;;;;; (("M-s" . cmd) ;; Available Globally
  13. ;;;;; :map here-mode-map
  14. ;;;;; ("C-t" . cmd-all) ;; Available only in "here-mode"
  15. ;;;;; ("C-e" . cmd-etc)) ;; Available only in "here-mode"
  16. ;;;;; :init
  17. ;;;;; (setq stuff t) ;; declar vars etc...
  18. ;;;;; :config
  19. ;;;;; (here-mode 1) ;; eval stuff here after the init
  20. ;;;;;
  21. ;;;;; (use-package ruby-mode
  22. ;;;;; :mode "\\.rb\\'"
  23. ;;;;; :interpreter "ruby"
  24. ;;;;;
  25. ;;;;; ;; OR when the package name isn't the same as the =mode=
  26. ;;;;; (use-package python
  27. ;;;;; :mode ("\\.py\\'" . python-mode)
  28. ;;;;; :interpreter ("python" . python-mode))
  29. ;;;;;
  30. ;;;;; USE ":defer" when you aren't using either :commands, :bind, :bind*, :bind-keymap, :bind-keymap*, :mode, :interpreter, or :hook
  31. ;;;;; (use-package deferred-package
  32. ;;;;; :defer t)
  33. ;;;
  34. ;;; Code:
  35. ;;;
  36. ;; https://github.com/jwiegley/use-package/blob/master/bind-key.el
  37. (use-package bind-key
  38. :ensure t
  39. :bind
  40. ("C-<tab>" . leo/tidy)
  41. ("C-;" . leo/comment-or-uncomment-region-or-line)
  42. ("C-c e" . leo/find-user-init-file)
  43. ("M-q" . leo/kill-this-buffer-unless-scratch)
  44. ("C-c d" . leo/duplicate-thing)
  45. ("M-n" . leo/jump-to-next-symbol)
  46. ("M-p" . leo/jump-to-prev-symbol)
  47. ("M-u" . upcase-dwim)
  48. ("M-c" . capitalize-dwim)
  49. ("M-l" . downcase-dwim)
  50. )
  51. ;; https://github.com/myrjola/diminish.el
  52. (use-package diminish
  53. :ensure t
  54. :demand t)
  55. ;; https://github.com/winterTTr/ace-jump-mode
  56. (use-package ace-jump-mode
  57. :bind
  58. (("C-c SPC" . just-one-space)
  59. ("M-SPC" . ace-jump-mode)))
  60. ;; https://github.com/abo-abo/ace-window
  61. (use-package ace-window
  62. :ensure t
  63. :bind
  64. ([remap other-window] . ace-window)
  65. :init
  66. (setq aw-keys '(?a ?s ?h ?t ?g ?y ?n ?e ?o ?i)))
  67. ;; https://github.com/hlissner/emacs-doom-themes
  68. (use-package doom-themes
  69. :ensure t
  70. :config
  71. (load-theme 'doom-one t))
  72. ;; https://github.com/belak/base16-emacs
  73. (use-package base16-theme
  74. :disabled
  75. :ensure t
  76. :config
  77. (load-theme 'base16-onedark t))
  78. ;; https://github.com/Malabarba/beacon
  79. (use-package beacon
  80. :diminish
  81. :commands beacon-mode
  82. :demand t
  83. :init
  84. (setq beacon-size 80))
  85. ;; https://github.com/coldnew/linum-relative
  86. (use-package linum-relative
  87. :ensure t
  88. :config
  89. (linum-relative-mode))
  90. ;; https://github.com/Fanael/rainbow-delimiters
  91. (use-package rainbow-delimiters
  92. :ensure t
  93. :hook (prog-mode . rainbow-delimiters-mode))
  94. ;; M-x all-the-icons-install-fonts
  95. (use-package all-the-icons
  96. :ensure t)
  97. ;; https://github.com/tarsius/minions
  98. (use-package minions
  99. :ensure t
  100. :config
  101. (minions-mode 1))
  102. (use-package doom-modeline
  103. :ensure t
  104. :after (all-the-icons minions)
  105. :hook (after-init . doom-modeline-mode)
  106. :init
  107. (setq doom-modeline-height 40)
  108. (setq doom-modeline-bar-width 6)
  109. (setq doom-modeline-checker-simple-format nil)
  110. (setq doom-modeline-minor-modes (featurep 'minions))
  111. )
  112. (use-package dashboard
  113. :ensure t
  114. :preface
  115. (defvar show-week-agenda-p)
  116. :init
  117. (setq dashboard-items '((recents . 6)
  118. (bookmarks . 5)
  119. ;; (projects . 5)
  120. (agenda . 5)))
  121. (setq dashboard-center-content t)
  122. (setq dashboard-banner-logo-title "Let's begin...")
  123. (setq dashboard-startup-banner 1)
  124. (setq dashboard-show-shortcuts t)
  125. (setq show-week-agenda-p t)
  126. (setq dashboard-org-agenda-categories '("work" "tasks"))
  127. :config
  128. (dashboard-setup-startup-hook))
  129. (use-package helm
  130. :ensure t
  131. :demand t
  132. :bind
  133. ("M-x" . helm-M-x)
  134. ("C-c b" . helm-buffers-list)
  135. ("C-x C-f" . helm-find-files))
  136. ;; https://github.com/emacsorphanage/helm-swoop
  137. (use-package helm-swoop
  138. :ensure t
  139. :after (helm)
  140. :bind
  141. ("C-s" . helm-swoop)
  142. :config
  143. ;; If you prefer fuzzy matching
  144. (setq helm-swoop-use-fuzzy-match t))
  145. ;; https://github.com/syohex/emacs-helm-ag
  146. (use-package helm-ag
  147. :ensure t
  148. :after (helm)
  149. :bind
  150. ("C-c k" . helm-ag))
  151. ;; https://github.com/magnars/expand-region.el
  152. (use-package expand-region
  153. :ensure t
  154. :bind
  155. ("C-@" . er/expand-region)
  156. ("C-#" . er/contract-region))
  157. ;; https://github.com/magnars/multiple-cursors.el
  158. (use-package multiple-cursors
  159. :ensure t
  160. :bind
  161. ("C-}" . mc/mark-next-like-this)
  162. ("C-)" . mc/unmark-next-like-this)
  163. ("C-{" . mc/mark-previous-like-this)
  164. ("C-(" . mc/unmark-previous-like-this))
  165. ;; https://github.com/joodland/bm
  166. (use-package bm
  167. :ensure t
  168. :demand t
  169. :bind (("C-x b b" . bm-toggle)
  170. ("C-x b n" . bm-next)
  171. ("C-x b p" . bm-previous))
  172. :commands (bm-repository-load
  173. bm-repository-save
  174. bm-buffer-save
  175. bm-buffer-save-all
  176. bm-buffer-restore)
  177. :preface
  178. (setq left-fringe-width 6)
  179. (setq right-fringe-width 0)
  180. (defface bm-face '((t nil)) "Specify face used to highlight the current line" :group 'bm)
  181. (defface bm-fringe-face '((t (:background "DarkOrange1" :foreground "DarkOrange1"))) "Specify face used to highlight the fringe" :group 'bm)
  182. (defface bm-fringe-persistent-face '((t (:background "DarkOrange1" :foreground "DarkOrange1"))) "Specify face used to highlight the fringe for persistant bookmarks" :group 'bm)
  183. (defface bm-persistent-face '((t nil)) "Specify face used to highlight the current line for persistant bookmarks" :group 'bm)
  184. (defface fringe '((t nil)) "Specify face used for the fringe" :group 'basic-faces :group 'frames)
  185. :init
  186. (setq bm-restore-repository-on-load t)
  187. :config
  188. (setq bm-cycle-all-buffers t)
  189. (setq bm-repository-file (concat user-emacs-directory "bookmark-repo"))
  190. (setq-default bm-buffer-persistence t)
  191. (setq bm-highlight-style 'bm-highlight-only-fringe)
  192. (add-hook 'after-init-hook 'bm-repository-load)
  193. (add-hook 'find-file-hooks 'bm-buffer-restore)
  194. (add-hook 'after-revert-hook #'bm-buffer-restore)
  195. (add-hook 'kill-buffer-hook #'bm-buffer-save)
  196. (add-hook 'after-save-hook #'bm-buffer-save)
  197. (add-hook 'vc-before-checkin-hook #'bm-buffer-save)
  198. (add-hook 'kill-emacs-hook #'(lambda nil
  199. (bm-buffer-save-all)
  200. (bm-repository-save))))
  201. ;; link
  202. (use-package elfeed
  203. :ensure t
  204. :commands (elfeed)
  205. :bind ("C-x C-l e" . elfeed)
  206. :init
  207. (setq elfeed-feeds
  208. '(
  209. ("http://telescoper.wordpress.com/feed/" daily)
  210. ("http://xkcd.com/rss.xml" daily)
  211. ("http://timharford.com/feed/" daily)
  212. ("http://understandinguncertainty.org/rss.xml" daily)
  213. ("http://pragmaticemacs.com/feed/" emacs)
  214. ("http://www.reddit.com/r/emacs/.rss" emacs)
  215. ("http://planet.emacsen.org/atom.xml" emacs)
  216. ("http://feeds.feedburner.com/XahsEmacsBlog" emacs)
  217. ("http://emacs.stackexchange.com/feeds" emacs)
  218. )))
  219. ;; https://github.com/rmuslimov/browse-at-remote
  220. (use-package browse-at-remote
  221. :bind ("C-c B" . browse-at-remote))
  222. ;; https://github.com/justbur/emacs-which-key
  223. (use-package which-key
  224. :ensure t
  225. :config
  226. (which-key-setup-minibuffer)
  227. (which-key-mode))
  228. ;; https://github.com/lewang/fic-mode
  229. (use-package fic-mode
  230. :ensure t
  231. :hook prog-mode
  232. :init
  233. (defface fic-face '((t :foreground "red" :weight bold)) "Specify face used for fic-mode highlighting" :group 'basic-faces)
  234. (defface fic-author-face '((t :foreground "red" :underline t)) "Specify face used for fic-mode highlighting" :group 'basic-faces)
  235. )
  236. ;; https://github.com/joaotavora/yasnippet
  237. (use-package yasnippet
  238. :ensure t
  239. :commands (yas-reload-all)
  240. :hook (prog-mode . yas-minor-mode)
  241. :init
  242. (setq yas-snippet-dirs (list (concat user-emacs-directory "snippets")))
  243. :config
  244. (yas-reload-all))
  245. ;; https://company-mode.github.io/
  246. (use-package company
  247. :ensure t
  248. :defer 5
  249. :commands (company-mode)
  250. :hook (prog-mode . company-mode))
  251. ;; https://github.com/pashky/restclient.el
  252. (use-package restclient
  253. :ensure t
  254. :mode ("\\.rest\\'" . restclient-mode))
  255. ;; https://github.com/iquiw/company-restclient
  256. (use-package company-restclient
  257. :ensure t
  258. :after (company restclient))
  259. ;; https://github.com/magit/magit
  260. (use-package magit
  261. :commands magit-status
  262. :ensure t
  263. :init
  264. (setq magit-completing-read-function 'helm-completing-read-default-handler)
  265. :bind
  266. ("C-x g" . magit-status)
  267. ("C-c g" . magit-status))
  268. ;; https://github.com/bbatsov/projectile
  269. (use-package projectile
  270. :ensure t
  271. :bind-keymap
  272. ("C-c p" . projectile-command-map)
  273. )
  274. ;; https://github.com/magit/git-modes
  275. (use-package gitignore-mode
  276. :ensure t)
  277. ;; https://github.com/magit/git-modes
  278. (use-package gitconfig-mode
  279. :ensure t)
  280. ;; http://web-mode.org/
  281. (use-package web-mode
  282. :ensure t
  283. :mode "\\.html?\\'")
  284. ;; https://github.com/joshwnj/json-mode
  285. (use-package json-mode
  286. :ensure t
  287. :mode "\\.json\\'")
  288. ;; https://github.com/antonj/scss-mode
  289. (use-package scss-mode
  290. :ensure t
  291. :mode ("\\.s?css\\'" . scss-mode))
  292. ;; https://elpa.gnu.org/packages/csv-mode.html
  293. (use-package csv-mode
  294. :disabled
  295. :ensure t
  296. :mode ("\\.csv\\'" . csv-mode))
  297. ;; https://github.com/kwrooijen/cargo.el
  298. (use-package cargo
  299. :hook (rust-mode . cargo-minor-mode))
  300. ;; https://github.com/andre-r/centered-cursor-mode.el
  301. (use-package centered-cursor-mode
  302. :disabled
  303. :commands centered-cursor-mode
  304. :hook prog-mode)
  305. ;; https://github.com/flycheck/flycheck
  306. (use-package flycheck
  307. :ensure t
  308. :init (global-flycheck-mode))
  309. ;; https://orgmode.org/elpa.html
  310. (use-package org
  311. :commands (org-cycle-agenda-files org-capture)
  312. :ensure org-plus-contrib
  313. :mode ("\\.org\\'" . org-mode)
  314. :bind (
  315. ("C-," . org-cycle-agenda-files)
  316. ("C-c C-d" . org-capture)
  317. :map org-mode-map
  318. ("M-RET" . org-insert-todo-heading)
  319. )
  320. :preface
  321. (defvar org-html-validation-link)
  322. (defvar org-html-text-markup-alist)
  323. :init
  324. (setq org-agenda-files '("~/Dropbox/Org/todo.org"
  325. "~/Dropbox/Org/archive.org"
  326. "~/Dropbox/Org/diary/eaglecrk.org"))
  327. (setq org-todo-keywords '((sequence "TODO(t)" "|" "DONE(d)")
  328. (sequence "BUG(b)" "INPROGRESS(i)" "|" "FIXED(f)")
  329. (sequence "TEST(T)" "NOTEST(N)" "|" "COMPLETE(C)")
  330. (sequence "|" "CANCELED(c)")
  331. (sequence "|" "NEEDCLARIFICATION(n)")
  332. (sequence "|" "PROVIDEUPDATE(p)")
  333. (sequence "|" "WAITING(w)"))
  334. org-refile-targets '((nil :maxlevel . 3)
  335. (org-agenda-files :maxlevel . 3))
  336. org-directory "~/Dropbox/Org"
  337. org-default-notes-file (concat org-directory "/todo.org")
  338. org-startup-folded t
  339. org-startup-indented t
  340. org-startup-align-all-tables t
  341. org-startup-with-inline-images t
  342. org-startup-with-latex-preview t
  343. org-src-tab-acts-natively t
  344. org-confirm-babel-evaluate nil
  345. org-log-done t
  346. org-log-done-with-time t
  347. org-log-into-drawer t
  348. org-hide-leading-stars t
  349. org-pretty-entities t
  350. org-use-property-inheritance t
  351. org-html-validation-link nil
  352. org-html-text-markup-alist '((bold . "<b>%s</b>")
  353. (code . "<code>%s</code>")
  354. (italic . "<i>%s</i>")
  355. (strike-through . "<del>%s</del>")
  356. (underline . "<span class=\"underline\">%s</span>")
  357. (verbatim . "<code class=\"verbatim\">%s</code>"))
  358. )
  359. :config
  360. (org-babel-do-load-languages 'org-babel-load-languages '((js . t)
  361. (shell . t)
  362. (emacs-lisp . t)))
  363. (add-to-list 'org-structure-template-alist
  364. (list "e" (concat "#+BEGIN_SRC emacs-lisp :results silent\n"
  365. "\n"
  366. "#+END_SRC")))
  367. (add-to-list 'org-structure-template-alist
  368. (list "j" (concat "#+BEGIN_SRC js :cmd \"/usr/local/bin/babel-node\" :results output code\n"
  369. "\n"
  370. "#+END_SRC")))
  371. (add-to-list 'org-structure-template-alist
  372. (list "r" (concat "#+BEGIN_SRC restclient :results raw\n"
  373. "\n"
  374. "#+END_SRC")))
  375. )
  376. ;; https://github.com/sabof/org-bullets
  377. (use-package org-bullets
  378. :ensure t
  379. :after (org)
  380. :hook (org-mode . org-bullets-mode)
  381. :config
  382. (set-face-attribute 'org-level-1 nil :height 1.3)
  383. (set-face-attribute 'org-level-2 nil :height 1.1)
  384. (set-face-attribute 'org-level-3 nil :height 1.05)
  385. (set-face-attribute 'org-level-4 nil :height 1.05)
  386. (set-face-attribute 'org-scheduled-today nil :height 1.0)
  387. (set-face-attribute 'org-agenda-date-today nil :height 1.1))
  388. ;; https://orgmode.org/worg/org-contrib/org-protocol.html
  389. (use-package org-protocol
  390. :ensure org-plus-contrib
  391. :after (org)
  392. :preface
  393. (defvar org-capture-templates)
  394. :init
  395. (setq org-capture-templates
  396. '(("t" "new task" entry (file+headline "~/Dropbox/Org/todo.org" "Tasks")
  397. "* TODO [#A] %?\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n%a\n")
  398. ("n" "new note" entry (file+headline org-default-notes-file "Notes")
  399. "* %?\n%i\n")
  400. ("l" "store link" entry (file+olp org-default-notes-file "Links" "Unfiled")
  401. "* %a\n%?\n")
  402. ("d" "store link w/drawer" entry (file+olp org-default-notes-file "Links" "Unfiled")
  403. "* %?\n%l\n:COPIED_TEXT:\n %i\n:END:\n")
  404. ("f" "dotfile" entry (file+headline "~/Dropbox/Org/dotfiles.org" "Other")
  405. "* %?\n:PROPERTIES:\n:CUSTOM_ID: %(org-id-get-create)\n:END:\n")
  406. ))
  407. )
  408. ;; https://github.com/seanohalpin/org-link-minor-mode
  409. (use-package org-link-minor-mode
  410. :ensure t
  411. :defer t
  412. :commands (org-link-minor-mode))
  413. (provide 'custom-packages)
  414. ;;; custom-packages.el ends here