Major refactor & optimization of how modules load their packages
Now that we are loading package autoloads files (as part of the generated doom-package-autoload-file when running make autoloads), many :commands properties are redundant. In fact, many def-package! blocks are redundant. In some cases, we can do without a config.el file entirely, and can move into the autoloads file or rely entirely on package autoloads. Also, many settings have been moved in their module's autoloads files, which makes them available ASAP; their use no longer depends on module load order. This gained me a modest ~10% boost in startup speed.
This commit is contained in:
parent
6a140209b8
commit
09cb4f6716
93 changed files with 644 additions and 846 deletions
|
@ -3,7 +3,8 @@
|
|||
;; Handles whitespace (tabs/spaces) settings externally. This way projects can
|
||||
;; specify their own formatting rules.
|
||||
(def-package! editorconfig
|
||||
:hook (doom-init . editorconfig-mode)
|
||||
:defer 2
|
||||
:after-call doom-before-switch-buffer
|
||||
:config
|
||||
;; Register missing indent variables
|
||||
(setq editorconfig-indentation-alist
|
||||
|
@ -49,9 +50,7 @@ extension, try to guess one."
|
|||
;; editorconfig to ignore indentation there. I prefer dynamic indentation
|
||||
;; support built into Emacs.
|
||||
(dolist (mode '(emacs-lisp-mode lisp-mode))
|
||||
(map-delete editorconfig-indentation-alist mode)))
|
||||
|
||||
|
||||
(def-package! editorconfig-conf-mode
|
||||
:mode "\\.?editorconfig$")
|
||||
(map-delete editorconfig-indentation-alist mode))
|
||||
|
||||
;;
|
||||
(editorconfig-mode +1))
|
||||
|
|
|
@ -1,9 +1,29 @@
|
|||
;;; tools/ein/autoload.el -*- lexical-binding: t; -*-
|
||||
|
||||
;;;###autoload
|
||||
(def-setting! :ein-notebook-dir (dir)
|
||||
"Set the default directory from where to open Jupyter notebooks."
|
||||
`(setq ein:jupyter-default-notebook-directory ,dir))
|
||||
|
||||
|
||||
;;
|
||||
;; Library
|
||||
;;
|
||||
|
||||
(defun +ein--collect-ein-buffer-links ()
|
||||
(let ((end (window-end))
|
||||
points)
|
||||
(save-excursion
|
||||
(goto-char (window-start))
|
||||
(while (re-search-forward "~?/.+\\|\s\\[" end t)
|
||||
(push (+ (match-beginning 0) 1) points))
|
||||
(nreverse points))))
|
||||
|
||||
;;;###autoload
|
||||
(defun +ein/ace-link-ein ()
|
||||
"Ace jump to links in ein notebooklist."
|
||||
(interactive)
|
||||
(require 'avy)
|
||||
(let ((res (avy-with +ein/ace-link-ein
|
||||
(avy--process
|
||||
(+ein--collect-ein-buffer-links)
|
||||
|
@ -13,14 +33,4 @@
|
|||
(goto-char (1+ res))
|
||||
(widget-button-press (point)))))
|
||||
|
||||
;;;###autoload
|
||||
(defun +ein--collect-ein-buffer-links ()
|
||||
(interactive)
|
||||
(let ((end (window-end))
|
||||
points)
|
||||
(save-excursion
|
||||
(goto-char (window-start))
|
||||
(while (re-search-forward "~?/.+\\|\s\\[" end t)
|
||||
(push (+ (match-beginning 0) 1) points))
|
||||
(nreverse points))))
|
||||
|
||||
|
|
|
@ -3,47 +3,49 @@
|
|||
(defvar +ein-notebook-dir "~/"
|
||||
"Default directory from where Jupyter notebooks are to be opened.")
|
||||
|
||||
(def-setting! :ein-notebook-dir (dir)
|
||||
"Set the default directory from where to open Jupyter notebooks."
|
||||
`(setq +ein-notebook-dir ,dir))
|
||||
|
||||
;;
|
||||
;; Plugins
|
||||
;;
|
||||
|
||||
(def-package! ein
|
||||
:commands (ein:notebooklist-open ein:notebooklist-login ein:jupyter-server-start)
|
||||
:defer t
|
||||
:init
|
||||
(push (lambda (buf) (string-match-p "^\\*ein: .*" (buffer-name buf)))
|
||||
doom-real-buffer-functions)
|
||||
(set! :popup "\\*ein: .*" :ignore)
|
||||
(set! :popup "\\*ein:tb .*" '((side . bottom) (size . 0.3)) '((quit . t) (transient) (select)))
|
||||
(set! :popup "\\*ein:notebooklist *" '((side . left) (size . 50)) '((select)))
|
||||
;; Ace-link on notebook list buffers
|
||||
(add-hook! 'ein:notebooklist-mode-hook
|
||||
(map! :map ein:notebooklist-mode-map
|
||||
"o" #'+ein/ace-link-ein))
|
||||
;; Ein uses request to store http cookies. Store them in the cache dir.
|
||||
(setq request-storage-directory (concat doom-cache-dir "/request"))
|
||||
(set! :popup "\\*ein:tb .*"
|
||||
'((side . bottom) (size . 0.3))
|
||||
'((quit . t) (transient) (select)))
|
||||
(set! :popup "\\*ein:notebooklist *"
|
||||
'((side . left) (size . 50))
|
||||
'((select)))
|
||||
|
||||
;; Auto complete with company
|
||||
(when (featurep! :completion company)
|
||||
(setq ein:completion-backend 'ein:use-company-backend)
|
||||
(set! :company-backend
|
||||
'(ein:notebook-multilang-mode
|
||||
ein:notebook-python-mode
|
||||
ein:notebook-plain-mode)
|
||||
(set! :company-backend '(ein:notebook-multilang-mode
|
||||
ein:notebook-python-mode
|
||||
ein:notebook-plain-mode)
|
||||
'ein:company-backend))
|
||||
|
||||
:config
|
||||
;; Manually load the autoloads of EIN. This takes time...
|
||||
(load "ein-loaddefs.el" nil t t)
|
||||
(setq
|
||||
;; Slice images into rows so that we can navigate buffers with images more easily
|
||||
ein:slice-image t
|
||||
ein:jupyter-default-notebook-directory +ein-notebook-dir
|
||||
ein:jupyter-default-server-command "jupyter"
|
||||
ein:jupyter-server-args '("--no-browser")
|
||||
ein:notebook-modes
|
||||
'(ein:notebook-multilang-mode ein:notebook-python-mode ein:notebook-plain-mode))
|
||||
;; Avy is required for showing links in the notebook list with ace-link.
|
||||
(require 'avy)
|
||||
(setq ein:jupyter-server-args '("--no-browser")
|
||||
ein:notebook-modes
|
||||
'(ein:notebook-multilang-mode ein:notebook-python-mode ein:notebook-plain-mode)
|
||||
;; Slice images into rows; easier to navigate around images
|
||||
ein:slice-image t)
|
||||
|
||||
(unless ein:jupyter-default-notebook-directory
|
||||
(setq ein:jupyter-default-notebook-directory "~/"))
|
||||
|
||||
(defun +ein-buffer-p (buf)
|
||||
(string-match-p "^\\*ein: .*" (buffer-name buf)))
|
||||
(add-to-list 'doom-real-buffer-functions #'+ein-buffer-p nil #'eq)
|
||||
|
||||
;; Ace-link on notebook list buffers
|
||||
(map! :after ein-notebooklist
|
||||
:map ein:notebooklist-mode-map
|
||||
"o" #'+ein/ace-link-ein)
|
||||
|
||||
;; add hydra
|
||||
(defhydra +ein/hydra (:hint t :color red)
|
||||
"
|
||||
|
|
|
@ -8,16 +8,6 @@
|
|||
(defvar-local doom-electric-indent-words '()
|
||||
"TODO")
|
||||
|
||||
(setq-default electric-indent-chars '(?\n ?\^?))
|
||||
|
||||
(defun +electric-indent|char (_c)
|
||||
(when (and (eolp) doom-electric-indent-words)
|
||||
(save-excursion
|
||||
(backward-word)
|
||||
(looking-at-p
|
||||
(concat "\\<" (regexp-opt doom-electric-indent-words))))))
|
||||
(push #'+electric-indent|char electric-indent-functions)
|
||||
|
||||
(def-setting! :electric (modes &rest plist)
|
||||
"Declare :words (list of strings) or :chars (lists of chars) in MODES that
|
||||
trigger electric indentation."
|
||||
|
@ -34,3 +24,15 @@ trigger electric indentation."
|
|||
,@(if words `((setq doom-electric-indent-words ',words))))
|
||||
(add-hook! ,modes #',fn-name))))))
|
||||
|
||||
;;
|
||||
(after! electric
|
||||
(setq-default electric-indent-chars '(?\n ?\^?))
|
||||
|
||||
(defun +electric-indent|char (_c)
|
||||
(when (and (eolp) doom-electric-indent-words)
|
||||
(save-excursion
|
||||
(backward-word)
|
||||
(looking-at-p
|
||||
(concat "\\<" (regexp-opt doom-electric-indent-words))))))
|
||||
(add-to-list 'electric-indent-functions #'+electric-indent|char))
|
||||
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
;;; tools/eshell/config.el -*- lexical-binding: t; -*-
|
||||
|
||||
;; This is highly experimental. I don't use eshell often, so this may need work.
|
||||
|
||||
;; see:
|
||||
;; + `+eshell/open': open in current buffer
|
||||
;; + `+eshell/open-popup': open in a popup
|
||||
|
@ -9,7 +7,7 @@
|
|||
;; workspaces)
|
||||
|
||||
(def-package! eshell ; built-in
|
||||
:commands eshell-mode
|
||||
:defer t
|
||||
:init
|
||||
(setq eshell-directory-name
|
||||
(let ((dir (concat doom-private-dir "eshell")))
|
||||
|
|
|
@ -4,9 +4,7 @@
|
|||
;; errors. If that happens, try `+gist/kill-cache'. You may have to restart
|
||||
;; Emacs.
|
||||
|
||||
(def-package! gist
|
||||
:commands (gist-list gist-region-or-buffer-private gist-region-or-buffer)
|
||||
:config
|
||||
(after! gist
|
||||
(set! :evil-state 'gist-list-mode 'normal)
|
||||
|
||||
(defun +gist*list-render (orig-fn &rest args)
|
||||
|
|
|
@ -1,13 +1,10 @@
|
|||
;;; tools/imenu/config.el -*- lexical-binding: t; -*-
|
||||
|
||||
(def-package! imenu-anywhere
|
||||
:commands (ido-imenu-anywhere ivy-imenu-anywhere helm-imenu-anywhere)
|
||||
:config (setq imenu-anywhere-delimiter ": "))
|
||||
;; `imenu-anywhere'
|
||||
(setq imenu-anywhere-delimiter ": ")
|
||||
|
||||
|
||||
(def-package! imenu-list
|
||||
:commands (imenu-list-minor-mode imenu-list-smart-toggle)
|
||||
:config
|
||||
(after! imenu-list
|
||||
(setq imenu-list-idle-update-delay 0.5)
|
||||
|
||||
(set! :popup "^\\*Ilist"
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
|
||||
(def-package! magit
|
||||
:defer t
|
||||
:init
|
||||
(load "magit-autoloads" nil t)
|
||||
:config
|
||||
(setq magit-completing-read-function
|
||||
(if (featurep! :completion ivy)
|
||||
|
@ -18,13 +16,11 @@
|
|||
(map! :map magit-status-mode-map [remap magit-mode-bury-buffer] #'+magit/quit))
|
||||
|
||||
|
||||
(def-package! magit-blame
|
||||
:commands magit-blame
|
||||
:after git-timemachine)
|
||||
(def-package! magit-blame :after git-timemachine)
|
||||
|
||||
|
||||
(def-package! magithub
|
||||
:commands (magithub-clone magithub-feature-autoinject)
|
||||
:commands magithub-feature-autoinject
|
||||
:after magit
|
||||
:preface
|
||||
(setq magithub-dir (concat doom-etc-dir "magithub/"))
|
||||
|
@ -32,7 +28,6 @@
|
|||
(setq magithub-clone-default-directory "~/"
|
||||
magithub-preferred-remote-method 'clone_url)
|
||||
:config
|
||||
(load "magithub-autoloads" nil t)
|
||||
(magithub-feature-autoinject t))
|
||||
|
||||
|
||||
|
|
|
@ -11,17 +11,18 @@
|
|||
;; Plugins
|
||||
;;
|
||||
|
||||
(def-package! password-store
|
||||
;; `password-store'
|
||||
(setq password-store-password-length 12)
|
||||
|
||||
|
||||
;; `pass'
|
||||
(def-package! pass
|
||||
:defer t
|
||||
:config
|
||||
(setq password-store-password-length 12))
|
||||
|
||||
|
||||
(def-package! pass
|
||||
:commands pass
|
||||
:config
|
||||
(set! :evil-state 'pass-mode 'emacs)
|
||||
(set! :popup "^\\*Password-Store" '((side . left) (size . 0.25)) '((quit)))
|
||||
(set! :popup "^\\*Password-Store"
|
||||
'((side . left) (size . 0.25))
|
||||
'((quit)))
|
||||
(map! :map pass-mode-map
|
||||
"j" #'pass-next-entry
|
||||
"k" #'pass-prev-entry
|
||||
|
@ -30,12 +31,6 @@
|
|||
"C-k" #'pass-next-directory))
|
||||
|
||||
|
||||
(def-package! helm-pass
|
||||
:when (featurep! :completion helm)
|
||||
:commands helm-pass)
|
||||
|
||||
|
||||
;; Is built into Emacs 26+
|
||||
(def-package! auth-source-pass
|
||||
:when (featurep! +auth)
|
||||
:config (auth-source-pass-enable))
|
||||
(when (and EMACS26+ (featurep! +auth))
|
||||
(auth-source-pass-enable))
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
(package! pass)
|
||||
(package! password-store)
|
||||
|
||||
(when (featurep! +auth)
|
||||
(when (and EMACS26+ (featurep! +auth))
|
||||
(package! auth-source-pass))
|
||||
|
||||
(when (featurep! :completion helm)
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
;;; tools/pdf/config.el -*- lexical-binding: t; -*-
|
||||
|
||||
(def-package! pdf-tools
|
||||
:mode ("\\.pdf$" . pdf-view-mode)
|
||||
:init (load "pdf-tools-autoloads" nil t)
|
||||
:mode ("\\.pdf\\'" . pdf-view-mode)
|
||||
:config
|
||||
(unless noninteractive
|
||||
(pdf-tools-install))
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
;;; tools/prodigy/autoload.el -*- lexical-binding: t; -*-
|
||||
|
||||
;;;###autoload
|
||||
(def-setting! :service (&rest plist)
|
||||
"TODO"
|
||||
`(after! prodigy
|
||||
(prodigy-define-service ,@plist)))
|
||||
|
||||
;;;###autoload
|
||||
(defun +prodigy/create ()
|
||||
"Interactively create a new prodigy service."
|
||||
|
@ -32,3 +38,17 @@
|
|||
(file-directory-p (plist-get service :project)))
|
||||
collect service into services
|
||||
finally do (setq prodigy-service services)))
|
||||
|
||||
;;;###autoload
|
||||
(defun +prodigy*services (orig-fn &rest args)
|
||||
"Adds a new :project property to prodigy services, which hides the service
|
||||
unless invoked from the relevant project."
|
||||
(let ((project-root (downcase (doom-project-root)))
|
||||
(services (apply orig-fn args)))
|
||||
(if current-prefix-arg
|
||||
services
|
||||
(cl-remove-if-not (lambda (service)
|
||||
(let ((project (plist-get service :project)))
|
||||
(or (not project)
|
||||
(file-in-directory-p project-root project))))
|
||||
services))))
|
||||
|
|
|
@ -1,38 +1,13 @@
|
|||
;;; tools/prodigy/config.el -*- lexical-binding: t; -*-
|
||||
|
||||
(def-setting! :service (&rest plist)
|
||||
"TODO"
|
||||
`(after! prodigy
|
||||
(prodigy-define-service ,@plist)))
|
||||
|
||||
|
||||
;;
|
||||
;; Plugins
|
||||
;;
|
||||
|
||||
(def-package! prodigy
|
||||
:commands (prodigy prodigy-view-mode prodigy-add-filter)
|
||||
:config
|
||||
(after! prodigy
|
||||
(set! :evil-state 'prodigy-mode 'emacs)
|
||||
|
||||
;; Make services, etc persistent between Emacs sessions
|
||||
(doom-cache-persist
|
||||
:prodigy '(prodigy-services prodigy-tags prodigy-filters))
|
||||
|
||||
(defun +prodigy*services (orig-fn &rest args)
|
||||
"Adds a new :project property to prodigy services, which hides the service
|
||||
unless invoked from the relevant project."
|
||||
(let ((project-root (downcase (doom-project-root)))
|
||||
(services (apply orig-fn args)))
|
||||
(if current-prefix-arg
|
||||
services
|
||||
(cl-remove-if-not (lambda (service)
|
||||
(let ((project (plist-get service :project)))
|
||||
(or (not project)
|
||||
(file-in-directory-p project-root project))))
|
||||
services))))
|
||||
(advice-add #'prodigy-services :around #'+prodigy*services)
|
||||
|
||||
;; Keybindings
|
||||
(map! :map prodigy-mode-map "d" #'+prodigy/delete))
|
||||
|
||||
|
|
|
@ -4,9 +4,6 @@
|
|||
;; Plugins
|
||||
;;
|
||||
|
||||
(def-package! rainbow-mode)
|
||||
|
||||
|
||||
(def-package! kurecolor
|
||||
:after rainbow-mode
|
||||
:config
|
||||
|
|
17
modules/tools/rotate-text/autoload.el
Normal file
17
modules/tools/rotate-text/autoload.el
Normal file
|
@ -0,0 +1,17 @@
|
|||
;;; tools/rotate-text/autoload.el -*- lexical-binding: t; -*-
|
||||
|
||||
;;;###autoload
|
||||
(def-setting! :rotate (modes &rest plist)
|
||||
"Declare :symbols, :words or :patterns (all lists of strings) that
|
||||
`rotate-text' will cycle through."
|
||||
(declare (indent 1))
|
||||
(let* ((modes (doom-enlist (doom-unquote modes)))
|
||||
(fn-name (intern (format "doom--rotate-%s" (mapconcat #'symbol-name modes "-")))))
|
||||
`(progn
|
||||
(defun ,fn-name ()
|
||||
(require 'rotate-text)
|
||||
(let ((plist (list ,@plist)))
|
||||
(setq rotate-text-local-symbols (plist-get plist :symbols)
|
||||
rotate-text-local-words (plist-get plist :words)
|
||||
rotate-text-local-patterns (plist-get plist :patterns))))
|
||||
(add-hook! ,modes #',fn-name))))
|
|
@ -1,22 +1,4 @@
|
|||
;;; tools/rotate-text/config.el -*- lexical-binding: t; -*-
|
||||
|
||||
(def-package! rotate-text
|
||||
:commands (rotate-text rotate-text-backward)
|
||||
:config
|
||||
(push '("true" "false") rotate-text-words))
|
||||
|
||||
|
||||
(def-setting! :rotate (modes &rest plist)
|
||||
"Declare :symbols, :words or :patterns (all lists of strings) that
|
||||
`rotate-text' will cycle through."
|
||||
(declare (indent 1))
|
||||
(let* ((modes (doom-enlist (doom-unquote modes)))
|
||||
(fn-name (intern (format "doom--rotate-%s" (mapconcat #'symbol-name modes "-")))))
|
||||
`(progn
|
||||
(defun ,fn-name ()
|
||||
(let ((plist (list ,@plist)))
|
||||
(setq rotate-text-local-symbols (plist-get plist :symbols)
|
||||
rotate-text-local-words (plist-get plist :words)
|
||||
rotate-text-local-patterns (plist-get plist :patterns))))
|
||||
(add-hook! ,modes #',fn-name))))
|
||||
|
||||
(after! rotate-text
|
||||
(add-to-list 'rotate-text-words '("true" "false")))
|
||||
|
|
|
@ -1,8 +1,14 @@
|
|||
;;; tools/term/config.el -*- lexical-binding: t; -*-
|
||||
|
||||
(def-package! multi-term
|
||||
:commands (multi-term multi-term-next multi-term-prev)
|
||||
:config
|
||||
(setq multi-term-program (getenv "SHELL")
|
||||
multi-term-dedicated-window-height 20
|
||||
multi-term-switch-after-close 'PREVIOUS))
|
||||
;; `multi-term'
|
||||
(setq multi-term-dedicated-window-height 20
|
||||
multi-term-switch-after-close 'PREVIOUS)
|
||||
|
||||
;; `term' (built-in)
|
||||
(after! term
|
||||
(set! :env "SHELL")
|
||||
|
||||
;; Consider term buffers real
|
||||
(defun +term-p (buf)
|
||||
(eq (buffer-local-value 'major-mode buf) 'term-mode))
|
||||
(add-to-list 'doom-real-buffer-functions #'+eshell-p #'eq))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue