diff --git a/modules/collab/impatient-mode/autoload.el b/modules/collab/impatient-mode/autoload.el index 3222b5477..41047d359 100644 --- a/modules/collab/impatient-mode/autoload.el +++ b/modules/collab/impatient-mode/autoload.el @@ -2,9 +2,8 @@ ;;;###autoload (defun +impatient-mode/toggle () - "TODO" + "Toggle `impatient-mode' in the current buffer." (interactive) - (require 'simple-httpd) (unless (process-status "httpd") (httpd-start)) (impatient-mode) diff --git a/modules/collab/impatient-mode/config.el b/modules/collab/impatient-mode/config.el deleted file mode 100644 index 0087bee52..000000000 --- a/modules/collab/impatient-mode/config.el +++ /dev/null @@ -1,6 +0,0 @@ -;;; collab/impatient-mode/config.el -*- lexical-binding: t; -*- - -;; Show off code as you write it - -(def-package! impatient-mode - :commands impatient-mode) diff --git a/modules/completion/company/config.el b/modules/completion/company/config.el index 12a1f352b..ec6113713 100644 --- a/modules/completion/company/config.el +++ b/modules/completion/company/config.el @@ -24,8 +24,7 @@ MODES should be one major-mode symbol or a list of them." ;; (def-package! company - :commands (company-mode global-company-mode company-complete - company-complete-common company-manual-begin company-grab-line) + :commands (company-complete-common company-manual-begin company-grab-line) :init (setq company-idle-delay nil company-tooltip-limit 14 @@ -48,7 +47,8 @@ MODES should be one major-mode symbol or a list of them." (def-package! company :when (featurep! +auto) - :defer pre-command-hook + :defer 2 + :after-call pre-command-hook :config (setq company-idle-delay 0.2)) @@ -73,27 +73,12 @@ MODES should be one major-mode symbol or a list of them." (def-package! company-dict - :commands company-dict + :defer t :config (defun +company|enable-project-dicts (mode &rest _) "Enable per-project dictionaries." (if (symbol-value mode) - (cl-pushnew mode company-dict-minor-mode-list :test #'eq) + (add-to-list 'company-dict-minor-mode-list mode #'eq) (setq company-dict-minor-mode-list (delq mode company-dict-minor-mode-list)))) (add-hook 'doom-project-hook #'+company|enable-project-dicts)) - -;; -;; Included with company.el -;; - -(autoload 'company-capf "company-capf") -(autoload 'company-dabbrev "company-dabbrev") -(autoload 'company-dabbrev-code "company-dabbrev-code") -(autoload 'company-elisp "company-elisp") -(autoload 'company-etags "company-etags") -(autoload 'company-files "company-files") -(autoload 'company-gtags "company-gtags") -(autoload 'company-ispell "company-ispell") -(autoload 'company-yasnippet "company-yasnippet") - diff --git a/modules/completion/helm/config.el b/modules/completion/helm/config.el index b4e6c5282..702208166 100644 --- a/modules/completion/helm/config.el +++ b/modules/completion/helm/config.el @@ -11,7 +11,8 @@ ;; (def-package! helm-mode - :defer (pre-command-hook . 1) + :defer 1 + :after-call pre-command-hook :config (helm-mode +1) ;; helm is too heavy for find-file-at-point diff --git a/modules/completion/ivy/autoload/ivy.el b/modules/completion/ivy/autoload/ivy.el index eef638f21..89ce56db5 100644 --- a/modules/completion/ivy/autoload/ivy.el +++ b/modules/completion/ivy/autoload/ivy.el @@ -116,9 +116,9 @@ If ARG (universal argument), open selection in other-window." "\\):?\\s-*\\(.+\\)") x) (error - (message! (red "Error matching task in file: (%s) %s" - (error-message-string ex) - (car (split-string x ":")))) + (print! (red "Error matching task in file: (%s) %s" + (error-message-string ex) + (car (split-string x ":")))) nil)) collect `((type . ,(match-string 3 x)) (desc . ,(match-string 4 x)) diff --git a/modules/completion/ivy/config.el b/modules/completion/ivy/config.el index 51434fb26..9d3f3f705 100644 --- a/modules/completion/ivy/config.el +++ b/modules/completion/ivy/config.el @@ -24,7 +24,8 @@ immediately runs it on the current candidate (ending the ivy session)." ;; (def-package! ivy - :defer (pre-command-hook . 1) + :defer 1 + :after-call pre-command-hook :config (setq ivy-height 12 ivy-do-completion-in-region nil @@ -184,7 +185,7 @@ immediately runs it on the current candidate (ending the ivy session)." (def-package! wgrep - :commands (wgrep-setup wgrep-change-to-wgrep-mode) + :commands wgrep-change-to-wgrep-mode :config (setq wgrep-auto-save-buffer t)) diff --git a/modules/config/default/config.el b/modules/config/default/config.el index 6d5ba386b..12bd8c5ec 100644 --- a/modules/config/default/config.el +++ b/modules/config/default/config.el @@ -35,6 +35,15 @@ (sp-pair "'" nil :unless unless-list) (sp-pair "\"" nil :unless unless-list)) + ;; Major-mode specific fixes + (sp-local-pair 'ruby-mode "{" "}" + :pre-handlers '(:rem sp-ruby-prehandler) + :post-handlers '(:rem sp-ruby-posthandler)) + ;; sp's default rules for these modes are obnoxious, so disable them + (provide 'smartparens-latex) + (provide 'smartparens-elixir) + (provide 'smartparens-lua) + ;; Expand {|} => { | } ;; Expand {|} => { ;; | diff --git a/modules/feature/debugger/config.el b/modules/feature/debugger/config.el index 1b7ef587d..78660ffa8 100644 --- a/modules/feature/debugger/config.el +++ b/modules/feature/debugger/config.el @@ -3,7 +3,8 @@ (def-package! realgud :commands (realgud:gdb realgud:trepanjs realgud:bashdb realgud:zshdb) :config - (set! :popup "^\\*\\(?trepanjs:\\(?:g\\|zsh\\|bash\\)db\\)" '((size . 20))) + (set! :popup "^\\*\\(?trepanjs:\\(?:g\\|zsh\\|bash\\)db\\)" + '((size . 20))) ;; TODO Temporary Ex commands for the debugger ;; (def-tmp-excmd! doom:def-debug-on doom:def-debug-off diff --git a/modules/feature/eval/config.el b/modules/feature/eval/config.el index 72b086d15..1549eacb8 100644 --- a/modules/feature/eval/config.el +++ b/modules/feature/eval/config.el @@ -10,12 +10,7 @@ ;; (def-package! quickrun - :commands (quickrun - quickrun-region - quickrun-with-arg - quickrun-shell - quickrun-compile-only - quickrun-replace-region) + :defer t :init (unless (boundp 'display-line-numbers) (add-hook 'quickrun--mode-hook #'nlinum-mode)) diff --git a/modules/feature/evil/autoload/evil.el b/modules/feature/evil/autoload/evil.el index f1c41106d..a04891154 100644 --- a/modules/feature/evil/autoload/evil.el +++ b/modules/feature/evil/autoload/evil.el @@ -1,6 +1,21 @@ ;; feature/evil/autoload/evil.el -*- lexical-binding: t; -*- ;;;###if (featurep! :feature evil) +;;;###autoload +(def-setting! :evil-state (modes state) + "Set the initialize STATE of MODE using `evil-set-initial-state'." + (let ((unquoted-modes (doom-unquote modes))) + (if (listp unquoted-modes) + `(progn + ,@(cl-loop for mode in unquoted-modes + collect `(evil-set-initial-state ',mode ,state))) + `(evil-set-initial-state ,modes ,state)))) + + +;; +;; Commands +;; + ;;;###autoload (defun +evil/visual-indent () "vnoremap < " evil-args-closers))) -(def-package! evil-indent-plus - :commands (evil-indent-plus-i-indent - evil-indent-plus-a-indent - evil-indent-plus-i-indent-up - evil-indent-plus-a-indent-up - evil-indent-plus-i-indent-up-down - evil-indent-plus-a-indent-up-down)) - - -(def-package! evil-textobj-anyblock - :commands (evil-textobj-anyblock-inner-block evil-textobj-anyblock-a-block)) - - ;; ;; Multiple cursors compatibility (for the plugins that use it) ;; diff --git a/modules/feature/lookup/autoload/devdocs.el b/modules/feature/lookup/autoload/devdocs.el new file mode 100644 index 000000000..2b2c4a514 --- /dev/null +++ b/modules/feature/lookup/autoload/devdocs.el @@ -0,0 +1,11 @@ +;;; feature/lookup/autoload/devdocs.el -*- lexical-binding: t; -*- +;;;###if (featurep! +devdocs) + +;;;###autoload +(def-setting! :devdocs (modes docset) + "Map major MODES (one major-mode symbol or a list of them) to a devdocs +DOCSET (a string). + +See `devdocs-alist' for the defaults. " + `(dolist (mode ',modes) + (push (cons mode ,docset) devdocs-alist))) diff --git a/modules/feature/lookup/autoload/docsets.el b/modules/feature/lookup/autoload/docsets.el new file mode 100644 index 000000000..89fef163c --- /dev/null +++ b/modules/feature/lookup/autoload/docsets.el @@ -0,0 +1,40 @@ +;;; feature/lookup/autoload/docsets.el -*- lexical-binding: t; -*- +;;;###if (featurep! +docsets) + +;;;###autoload +(def-setting! :docset (modes &rest docsets) + "Registers a list of DOCSETS (strings) for MODES (either one major mode +symbol or a list of them). + +If MODES is a minor mode, you can use :add or :remove as the first element of +DOCSETS, to instruct it to append (or remove) those from the docsets already set +by a major-mode, if any. + +Used by `+lookup/in-docsets' and `+lookup/documentation'." + (let* ((modes (doom-unquote modes)) + (ivy-p (featurep! :completion ivy)) + (hook-sym (intern (format "+lookup|%s-docsets--%s" + (cond ((eq ',(car docsets) :add) 'add) + ((eq ',(car docsets) :remove) 'remove) + ('set)) + (string-join docsets "-")))) + (var-sym (if ivy-p 'counsel-dash-docsets 'helm-dash-docsets))) + `(progn + (defun ,hook-sym () + (make-variable-buffer-local ',var-sym) + ,(cond ((eq ',(car docsets) :add) + `(setq ,var-sym (append ,var-sym (list ,@(cdr docsets))))) + ((eq ',(car docsets) :remove) + `(setq ,var-sym + (cl-loop with to-delete = (list ,@(cdr docsets)) + for docset in ,var-sym + unless (member docset to-delete) + collect docset))) + (`(setq ,var-sym (list ,@docsets))))) + (add-hook! ,modes #',hook-sym)))) + +;;;###autoload +(autoload 'helm-dash-installed-docsets "helm-dash") + +;;;###autoload +(autoload 'helm-dash-docset-installed-p "helm-dash") diff --git a/modules/feature/lookup/config.el b/modules/feature/lookup/config.el index b693f44bc..bbabb689a 100644 --- a/modules/feature/lookup/config.el +++ b/modules/feature/lookup/config.el @@ -122,33 +122,29 @@ ones." ;; (def-package! dumb-jump - :commands (dumb-jump-go dumb-jump-quick-look - dumb-jump-back dumb-jump-result-follow) + :commands dumb-jump-result-follow :config (setq dumb-jump-default-project doom-emacs-dir dumb-jump-aggressive nil dumb-jump-selector (cond ((featurep! :completion ivy) 'ivy) ((featurep! :completion helm) 'helm) - (t 'popup)))) + ('popup)))) ;; ;; xref ;; -(def-package! xref - :commands (xref-backend-identifier-at-point xref-find-definitions xref-find-references) - :config - ;; By default, `etags--xref-backend' is the default xref backend. No need. - ;; We'll set these up ourselves in other modules. - (setq-default xref-backend-functions '(t)) +;; By default, `etags--xref-backend' is the default xref backend. No need. We'll +;; set these up ourselves in other modules. +(setq-default xref-backend-functions '(t)) - ;; ...however, it breaks `projectile-find-tag', unless we put it back. - (defun +lookup*projectile-find-tag (orig-fn) - (let ((xref-backend-functions '(etags--xref-backend t))) - (funcall orig-fn))) - (advice-add #'projectile-find-tag :around #'+lookup*projectile-find-tag)) +;; ...however, it breaks `projectile-find-tag', unless we put it back. +(defun +lookup*projectile-find-tag (orig-fn) + (let ((xref-backend-functions '(etags--xref-backend t))) + (funcall orig-fn))) +(advice-add #'projectile-find-tag :around #'+lookup*projectile-find-tag) (def-package! ivy-xref @@ -168,41 +164,9 @@ ones." ;; (when (featurep! +docsets) - (def-setting! :docset (modes &rest docsets) - "Registers a list of DOCSETS (strings) for MODES (either one major mode -symbol or a list of them). - -If MODES is a minor mode, you can use :add or :remove as the first element of -DOCSETS, to instruct it to append (or remove) those from the docsets already set -by a major-mode, if any. - -Used by `+lookup/in-docsets' and `+lookup/documentation'." - (let* ((modes (doom-unquote modes)) - (ivy-p (featurep! :completion ivy)) - (hook-sym (intern (format "+lookup|%s-docsets--%s" - (cond ((eq ',(car docsets) :add) 'add) - ((eq ',(car docsets) :remove) 'remove) - ('set)) - (string-join docsets "-")))) - (var-sym (if ivy-p 'counsel-dash-docsets 'helm-dash-docsets))) - `(progn - (defun ,hook-sym () - (make-variable-buffer-local ',var-sym) - ,(cond ((eq ',(car docsets) :add) - `(setq ,var-sym (append ,var-sym (list ,@(cdr docsets))))) - ((eq ',(car docsets) :remove) - `(setq ,var-sym - (cl-loop with to-delete = (list ,@(cdr docsets)) - for docset in ,var-sym - unless (member docset to-delete) - collect docset))) - (`(setq ,var-sym (list ,@docsets))))) - (add-hook! ,modes #',hook-sym)))) - ;; Both packages depend on helm-dash (def-package! helm-dash - :commands (helm-dash helm-dash-install-docset helm-dash-at-point - helm-dash-docset-installed-p helm-dash-installed-docsets) + :defer t :init (setq helm-dash-enable-debugging doom-debug-mode helm-dash-browser-func #'eww) @@ -214,7 +178,7 @@ Used by `+lookup/in-docsets' and `+lookup/documentation'." (def-package! counsel-dash :when (featurep! :completion ivy) - :commands (counsel-dash counsel-dash-install-docset) + :commands counsel-dash-install-docset :config (setq counsel-dash-min-length 2))) @@ -223,20 +187,11 @@ Used by `+lookup/in-docsets' and `+lookup/documentation'." ;; (when (featurep! +devdocs) - (def-setting! :devdocs (modes docset) - "Map major MODES (one major-mode symbol or a list of them) to a devdocs -DOCSET (a string). - -See `devdocs-alist' for the defaults. " - `(dolist (mode ',modes) - (push (cons mode ,docset) devdocs-alist))) - - (def-package! devdocs-lookup - :commands (devdocs-setup devdocs-lookup) - :config - (setq devdocs-subjects - (append '(("SCSS" "scss") - ("GFM" "markdown") - ("Typescript" "typescript")) - devdocs-subjects)))) + (after! devdocs-lookup + (unless (assoc "SCSS" devdocs-subjects) + (setq devdocs-subjects + (append '(("SCSS" "scss") + ("GFM" "markdown") + ("Typescript" "typescript")) + devdocs-subjects))))) diff --git a/modules/feature/snippets/config.el b/modules/feature/snippets/config.el index a9acfadd6..33757e31e 100644 --- a/modules/feature/snippets/config.el +++ b/modules/feature/snippets/config.el @@ -1,9 +1,16 @@ ;;; feature/snippets/config.el -*- lexical-binding: t; -*- +(defvar +snippets-dir (expand-file-name "snippets/" doom-private-dir) + "Directory where `yasnippet' will search for your private snippets.") + + +;; +;; Plugins +;; + (def-package! yasnippet - :commands (yas-minor-mode yas-minor-mode-on yas-expand yas-expand-snippet - yas-lookup-snippet yas-insert-snippet yas-new-snippet - yas-visit-snippet-file snippet-mode) + :commands (yas-minor-mode-on yas-expand yas-expand-snippet yas-lookup-snippet + yas-insert-snippet yas-new-snippet yas-visit-snippet-file) :preface (defvar yas-minor-mode-map (let ((map (make-sparse-keymap))) @@ -23,28 +30,25 @@ (setq yas-verbosity (if doom-debug-mode 3 0) yas-also-auto-indent-first-line t yas-prompt-functions (delq #'yas-dropdown-prompt yas-prompt-functions) - ;; Allow nested snippets - yas-triggers-in-field t) + yas-triggers-in-field t) ; Allow nested snippets - (cl-pushnew (expand-file-name "snippets/" doom-private-dir) yas-snippet-dirs - :test #'string=) + (add-to-list 'yas-snippet-dirs '+snippets-dir nil #'eq) (defun +snippets|enable-project-modes (mode &rest _) - "Enable snippets for project modes." + "Automatically enable snippet libraries for project minor modes defined with +`def-project-mode!'." (if (symbol-value mode) (yas-activate-extra-mode mode) (yas-deactivate-extra-mode mode))) (add-hook 'doom-project-hook #'+snippets|enable-project-modes) - ;; fix an error caused by smartparens interfering with yasnippet bindings - (advice-add #'yas-expand :before #'sp-remove-active-pair-overlay) - ;; Exit snippets on ESC from normal mode - (add-hook 'doom-escape-hook #'yas-abort-snippet)) + (add-hook 'doom-escape-hook #'yas-abort-snippet) + + (after! smartparens + ;; fix an error caused by smartparens interfering with yasnippet bindings + (advice-add #'yas-expand :before #'sp-remove-active-pair-overlay))) -(def-package! auto-yasnippet - :commands (aya-create aya-expand aya-open-line aya-persist-snippet) - :config +(after! auto-yasnippet (setq aya-persist-snippets-dir (concat doom-local-dir "auto-snippets/"))) - diff --git a/modules/feature/snippets/doctor.el b/modules/feature/snippets/doctor.el deleted file mode 100644 index 8ba004a36..000000000 --- a/modules/feature/snippets/doctor.el +++ /dev/null @@ -1,7 +0,0 @@ -;; -*- lexical-binding: t; no-byte-compile: t; -*- -;;; feature/snippets/doctor.el - -(require 'yasnippet) -(unless (ignore-errors (yas-reload-all) - (yas--get-snippet-tables)) - (warn! "Couldn't find any snippets in any of these directories: %s" yas-snippet-dirs)) diff --git a/modules/feature/spellcheck/config.el b/modules/feature/spellcheck/config.el index c1f8b3bb6..2cc8dadb6 100644 --- a/modules/feature/spellcheck/config.el +++ b/modules/feature/spellcheck/config.el @@ -8,7 +8,7 @@ Since spellchecking can be slow in some buffers, this can be disabled with: (setq-hook! 'LaTeX-mode-hook +spellcheck-immediately nil)") (def-package! flyspell ; built-in - :commands flyspell-mode + :defer t :init (add-hook 'flyspell-mode-hook #'+spellcheck|immediately) :config diff --git a/modules/feature/spellcheck/packages.el b/modules/feature/spellcheck/packages.el index bb01a00ba..97172953f 100644 --- a/modules/feature/spellcheck/packages.el +++ b/modules/feature/spellcheck/packages.el @@ -1,11 +1,11 @@ ;; -*- no-byte-compile: t; -*- ;;; feature/spellcheck/packages.el -(package! flyspell-correct) -(cond ((featurep! :completion ivy) - (package! flyspell-correct-ivy)) - ((featurep! :completion helm) - (package! flyspell-correct-helm)) - (t - (package! flyspell-correct-popup))) +(when (package! flyspell-correct) + (cond ((featurep! :completion ivy) + (package! flyspell-correct-ivy)) + ((featurep! :completion helm) + (package! flyspell-correct-helm)) + (t + (package! flyspell-correct-popup)))) diff --git a/modules/feature/syntax-checker/config.el b/modules/feature/syntax-checker/config.el index 29048618e..9bdc0b5fa 100644 --- a/modules/feature/syntax-checker/config.el +++ b/modules/feature/syntax-checker/config.el @@ -1,18 +1,11 @@ ;;; feature/syntax-checker/config.el -*- lexical-binding: t; -*- -;; Since Doom doesn't use `package-initialize', pkg-info won't get autoloaded -;; when `flycheck-version' needs it, so we need this: -(autoload 'pkg-info-version-info "pkg-info") - (def-package! flycheck - :commands (flycheck-mode flycheck-list-errors flycheck-buffer) + :commands (flycheck-list-errors flycheck-buffer) :config ;; Emacs feels snappier without checks on newline (setq flycheck-check-syntax-automatically '(save idle-change mode-enabled)) - ;; Popup - (add-hook 'flycheck-mode-hook #'+syntax-checker-popup-mode) - (after! evil (defun +syntax-checkers|flycheck-buffer () "Flycheck buffer on ESC in normal mode." @@ -20,21 +13,16 @@ (ignore-errors (flycheck-buffer)) nil)) (add-hook 'doom-escape-hook #'+syntax-checkers|flycheck-buffer t) - (add-hook 'evil-insert-state-exit-hook #'+syntax-checkers|flycheck-buffer) - - ;; With the option of flychecking the buffer on escape or leaving insert - ;; mode, we don't need auto-flychecking on idle-change (which can feel slow, - ;; esp on computers without SSDs). - (delq 'idle-change flycheck-check-syntax-automatically))) + (add-hook 'evil-insert-state-exit-hook #'+syntax-checkers|flycheck-buffer))) (def-package! flycheck-popup-tip - :commands (flycheck-popup-tip-show-popup flycheck-popup-tip-delete-popup)) + :commands (flycheck-popup-tip-show-popup flycheck-popup-tip-delete-popup) + :init (add-hook 'flycheck-mode-hook #'+syntax-checker-popup-mode)) (def-package! flycheck-posframe - :when EMACS26+ - :when (featurep! +childframe) + :when (and EMACS26+ (featurep! +childframe)) :commands flycheck-posframe-show-posframe :config (setq flycheck-posframe-warning-prefix "⚠ " diff --git a/modules/feature/version-control/+git.el b/modules/feature/version-control/+git.el index 88d610089..8488f9076 100644 --- a/modules/feature/version-control/+git.el +++ b/modules/feature/version-control/+git.el @@ -1,10 +1,5 @@ ;;; feature/version-control/+git.el -*- lexical-binding: t; -*- -;; These don't need `def-package!' blocks because they've already been set up by -;; `doom-initialize'. -(autoload 'gitconfig-mode "gitconfig-mode" nil t) -(autoload 'gitignore-mode "gitignore-mode" nil t) - (when (featurep! :feature evil) (add-hook 'git-commit-mode-hook #'evil-insert-state)) @@ -59,7 +54,7 @@ (def-package! git-timemachine - :commands (git-timemachine git-timemachine-toggle) + :defer t :config ;; Sometimes I forget `git-timemachine' is enabled in a buffer, so instead of ;; showing revision details in the minibuffer, show them in @@ -67,10 +62,6 @@ (setq git-timemachine-show-minibuffer-details t) (advice-add #'git-timemachine--show-minibuffer-details :override #'+vcs*update-header-line) - ;; Force evil to rehash keybindings for the current state - (add-hook 'git-timemachine-mode-hook #'evil-force-normal-state)) - - -(def-package! git-link - :commands (git-link git-link-commit git-link-homepage)) - + (after! evil + ;; Force evil to rehash keybindings for the current state + (add-hook 'git-timemachine-mode-hook #'evil-force-normal-state))) diff --git a/modules/feature/workspaces/config.el b/modules/feature/workspaces/config.el index 4b6d1f4b4..bc1467bcf 100644 --- a/modules/feature/workspaces/config.el +++ b/modules/feature/workspaces/config.el @@ -27,7 +27,7 @@ new project directory.") stored in `persp-save-dir'.") (defun +workspaces-restore-last-session (&rest _) - (add-hook 'emacs-startup-hook #'+workspace/load-session 'append)) + (add-hook 'doom-post-init-hook #'+workspace/load-session 'append)) (map-put command-switch-alist '"--restore" #'+workspaces-restore-last-session) diff --git a/modules/feature/workspaces/test/autoload-workspaces.el b/modules/feature/workspaces/test/autoload-workspaces.el index e7cc2e9bd..6367400ed 100644 --- a/modules/feature/workspaces/test/autoload-workspaces.el +++ b/modules/feature/workspaces/test/autoload-workspaces.el @@ -2,6 +2,7 @@ ;;; feature/workspaces/test/autoload-workspaces.el (require! :feature workspaces) +(doom|init-custom-hooks) (defmacro with-workspace!! (buffer-args &rest body) (declare (indent defun)) diff --git a/modules/lang/assembly/autoload.el b/modules/lang/assembly/autoload.el new file mode 100644 index 000000000..38b582a66 --- /dev/null +++ b/modules/lang/assembly/autoload.el @@ -0,0 +1,4 @@ +;;; lang/assembly/autoload.el -*- lexical-binding: t; -*- + +;;;###autoload +(map-put auto-mode-alist "\\.hax\\'" 'haxor-mode) diff --git a/modules/lang/assembly/config.el b/modules/lang/assembly/config.el deleted file mode 100644 index 98b879b24..000000000 --- a/modules/lang/assembly/config.el +++ /dev/null @@ -1,8 +0,0 @@ -;;; lang/assembly/config.el -*- lexical-binding: t; -*- - -(def-package! mips-mode :mode "\\.mips$") - -(def-package! haxor-mode :mode "\\.hax$") - -(def-package! nasm-mode :commands nasm-mode) - diff --git a/modules/lang/cc/autoload.el b/modules/lang/cc/autoload.el index cf6580425..f063cf11c 100644 --- a/modules/lang/cc/autoload.el +++ b/modules/lang/cc/autoload.el @@ -89,13 +89,6 @@ compilation dbs." nconc (list "-I" path))) (doom-project-root))))) -;;;###autoload -(defun +cc|init-rtags () - "Start an rtags server in c-mode and c++-mode buffers." - (when (and (memq major-mode '(c-mode c++-mode)) - (rtags-executable-find "rtags")) - (rtags-start-process-unless-running))) - ;;;###autoload (defun +cc|cleanup-rtags () "Kill rtags server(s) if there are no C/C++ buffers open." diff --git a/modules/lang/cc/config.el b/modules/lang/cc/config.el index 0077083c1..cb02a6558 100644 --- a/modules/lang/cc/config.el +++ b/modules/lang/cc/config.el @@ -55,10 +55,10 @@ compilation database is present in the project.") :config (set! :electric '(c-mode c++-mode objc-mode java-mode) - :chars '(?\n ?\})) + :chars '(?\n ?\})) (set! :company-backend - '(c-mode c++-mode objc-mode) - '(company-irony-c-headers company-irony)) + '(c-mode c++-mode objc-mode) + '(company-irony-c-headers company-irony)) ;;; Style/formatting ;; C/C++ style settings @@ -101,8 +101,8 @@ compilation database is present in the project.") (label . 0)))) ;;; Keybindings - ;; Completely disable electric keys because it interferes with smartparens and - ;; custom bindings. We'll do this ourselves. + ;; Disable electric keys because it interferes with smartparens and custom + ;; bindings. We'll do it ourselves (mostly). (setq c-tab-always-indent nil c-electric-flag nil) (dolist (key '("#" "}" "/" "*" ";" "," ":" "(" ")" "\177")) @@ -129,6 +129,7 @@ compilation database is present in the project.") (def-package! irony + :when (featurep! +irony) :commands (irony-install-server irony-mode) :preface (setq irony-server-install-prefix (concat doom-etc-dir "irony-server/")) @@ -172,23 +173,13 @@ compilation database is present in the project.") ;; (def-package! cmake-mode - :mode "/CMakeLists\\.txt$" - :mode "\\.cmake\\$" + :defer t :config (set! :company-backend 'cmake-mode '(company-cmake company-yasnippet))) -(def-package! cuda-mode :mode "\\.cuh?$") +(def-package! opencl-mode :mode "\\.cl\\'") -(def-package! opencl-mode :mode "\\.cl$") - -(def-package! demangle-mode - :hook llvm-mode) - -(def-package! glsl-mode - :mode "\\.glsl$" - :mode "\\.vert$" - :mode "\\.frag$" - :mode "\\.geom$") +(def-package! demangle-mode :hook llvm-mode) ;; @@ -213,7 +204,12 @@ compilation database is present in the project.") (def-package! rtags :commands rtags-executable-find :init - (add-hook! (c-mode c++-mode) #'+cc|init-rtags) + (defun +cc|init-rtags () + "Start an rtags server in c-mode and c++-mode buffers." + (when (and (memq major-mode '(c-mode c++-mode)) + (rtags-executable-find "rtags")) + (rtags-start-process-unless-running))) + (add-hook 'c-mode-common-hook #'+cc|init-rtags) :config (setq rtags-autostart-diagnostics t rtags-use-bookmarks nil diff --git a/modules/lang/cc/doctor.el b/modules/lang/cc/doctor.el index 442798ce4..5f9799ecf 100644 --- a/modules/lang/cc/doctor.el +++ b/modules/lang/cc/doctor.el @@ -7,9 +7,9 @@ (warn! "Couldn't find the rtag client and/or server programs %s. Disabling rtags support" bins))) ;; irony server -(require 'irony) -(unless (file-directory-p irony-server-install-prefix) - (warn! "Irony server isn't installed. Run M-x irony-install-server")) +(when (require 'irony nil t) + (unless (file-directory-p irony-server-install-prefix) + (warn! "Irony server isn't installed. Run M-x irony-install-server"))) (when (featurep! :completion company) ;; glslangValidator diff --git a/modules/lang/clojure/config.el b/modules/lang/clojure/config.el index 53a18eded..e78813ef5 100644 --- a/modules/lang/clojure/config.el +++ b/modules/lang/clojure/config.el @@ -1,13 +1,7 @@ ;;; lang/clojure/config.el -*- lexical-binding: t; -*- -(def-package! clojure-mode - :mode "\\.clj$" - :mode "\\.edn$" - :mode "\\(?:build\\|profile\\)\\.boot$" - :mode ("\\.cljs$" . clojurescript-mode) - :mode ("\\.cljc$" . clojurec-mode) - :config - (add-hook 'clojure-mode #'rainbow-delimiters-mode)) +;; `clojure-mode' +(add-hook 'clojure-mode #'rainbow-delimiters-mode) (def-package! clj-refactor diff --git a/modules/lang/crystal/config.el b/modules/lang/crystal/config.el index f1b765e72..717a4137c 100644 --- a/modules/lang/crystal/config.el +++ b/modules/lang/crystal/config.el @@ -1,8 +1,7 @@ ;;; lang/crystal/config.el -*- lexical-binding: t; -*- (def-package! crystal-mode - :mode "\\.cr$" - :interpreter "crystal" + :defer t :config (set! :lookup 'crystal-mode :definition #'crystal-def-jump @@ -19,5 +18,4 @@ :config (add-hook 'crystal-mode-hook #'flycheck-mode)) -(def-package! inf-crystal - :commands (inf-crystal crystal-switch-to-inf)) +(def-package! inf-crystal :commands crystal-switch-to-inf) diff --git a/modules/lang/csharp/config.el b/modules/lang/csharp/config.el index 306f93b12..c7ecabe28 100644 --- a/modules/lang/csharp/config.el +++ b/modules/lang/csharp/config.el @@ -1,17 +1,16 @@ ;;; lang/csharp/config.el -*- lexical-binding: t; -*- -(def-package! csharp-mode :mode "\\.cs$") - -(def-package! shader-mode :mode "\\.shader$") ; unity shaders +(add-to-list 'auto-mode-alist '("\\.shader$" . shader-mode)) ; unity shaders (def-package! omnisharp - :after csharp-mode + :hook (csharp-mode . omnisharp-mode) + :commands omnisharp-install-server :preface (setq omnisharp-auto-complete-want-documentation nil omnisharp-cache-directory (concat doom-cache-dir "omnisharp")) :config - (add-hook! csharp-mode #'(flycheck-mode omnisharp-mode)) + (add-hook 'csharp-mode-hook #'flycheck-mode) (defun +csharp|cleanup-omnisharp-server () "Clean up the omnisharp server once you kill the last csharp-mode buffer." diff --git a/modules/lang/data/config.el b/modules/lang/data/config.el index 60b1af9b2..77e9723de 100644 --- a/modules/lang/data/config.el +++ b/modules/lang/data/config.el @@ -1,47 +1,30 @@ ;;; lang/data/config.el -*- lexical-binding: t; -*- -(push '("/sxhkdrc" . conf-mode) auto-mode-alist) +;; Built in plugins +(dolist (spec '(("/sxhkdrc\\'" . conf-mode) + ("\\.\\(?:hex\\|nes\\)\\'" . hexl-mode) + ("\\.plist\\'" . nxml-mode))) + (map-put auto-mode-alist (car spec) (cdr spec))) + +(set! :company-backend 'nxml-mode '(company-nxml company-yasnippet)) -(def-package! dockerfile-mode - :mode "/Dockerfile$") - +;; +;; Third-party plugins +;; (def-package! graphql-mode - :mode "\\.g\\(?:raph\\)?ql$") - - -(def-package! hexl ; For ROM hacking or debugging - :mode ("\\.hex$" . hexl-mode) - :mode ("\\.nes$" . hexl-mode)) - + :mode "\\.gql\\'") (def-package! json-mode - :mode "\\.js\\(?:on\\|[hl]int\\(rc\\)?\\)$" + :mode "\\.js\\(?:on\\|[hl]int\\(rc\\)?\\)\\'" :config (when (featurep! :feature syntax-checker) (add-hook 'json-mode-hook #'flycheck-mode)) (set! :electric 'json-mode :chars '(?\n ?: ?{ ?}))) - -(def-package! nxml-mode - :mode "\\.plist$" - :config - (set! :company-backend 'nxml-mode '(company-nxml company-yasnippet))) - - -(def-package! toml-mode - :mode "\\.toml$") - - (def-package! vimrc-mode - :mode "/\\.?g?vimrc$" - :mode "\\.vimp?$" - :mode "\\.?vimperatorrc$") - - -(def-package! yaml-mode - :mode "\\.ya?ml$") + :mode "\\.?vimperatorrc\\'") ;; diff --git a/modules/lang/elixir/config.el b/modules/lang/elixir/config.el index 590bb545a..6afd25471 100644 --- a/modules/lang/elixir/config.el +++ b/modules/lang/elixir/config.el @@ -1,21 +1,18 @@ ;;; lang/elixir/config.el -*- lexical-binding: t; -*- (def-package! elixir-mode - :mode "\\.exs?\\'" - :mode "\\.elixir2\\'" - :init - ;; sp's default elixir rules are obnoxious, so disable them - (provide 'smartparens-elixir) + :defer t :config ;; ...and only complete the basics - (sp-with-modes 'elixir-mode - (sp-local-pair "do" "end" - :when '(("RET" "")) - :unless '(sp-in-comment-p sp-in-string-p) - :skip-match 'sp-elixir-skip-def-p - :post-handlers '("||\n[i]")) - (sp-local-pair "do " " end" :unless '(sp-in-comment-p sp-in-string-p)) - (sp-local-pair "fn " " end" :unless '(sp-in-comment-p sp-in-string-p)))) + (after! smartparens + (sp-with-modes 'elixir-mode + (sp-local-pair "do" "end" + :when '(("RET" "")) + :unless '(sp-in-comment-p sp-in-string-p) + :skip-match 'sp-elixir-skip-def-p + :post-handlers '("||\n[i]")) + (sp-local-pair "do " " end" :unless '(sp-in-comment-p sp-in-string-p)) + (sp-local-pair "fn " " end" :unless '(sp-in-comment-p sp-in-string-p))))) (def-package! alchemist @@ -30,13 +27,13 @@ (def-package! alchemist-company :when (featurep! :completion company) - :after elixir-mode + :commands alchemist-company + :init + (set! :company-backend 'elixir-mode '(alchemist-company company-yasnippet)) :config ;; Alchemist doesn't use hook symbols to add these backends, so we have to use ;; the entire closure to get rid of it. (let ((fn (byte-compile (lambda () (add-to-list (make-local-variable 'company-backends) 'alchemist-company))))) (remove-hook 'alchemist-mode-hook fn) - (remove-hook 'alchemist-iex-mode-hook fn)) - - (set! :company-backend 'elixir-mode '(alchemist-company company-yasnippet))) + (remove-hook 'alchemist-iex-mode-hook fn))) diff --git a/modules/lang/elm/config.el b/modules/lang/elm/config.el index 6bc5f9c00..6cf23914d 100644 --- a/modules/lang/elm/config.el +++ b/modules/lang/elm/config.el @@ -1,13 +1,12 @@ ;;; lang/elm/config.el -*- lexical-binding: t; -*- -(def-package! elm-mode - :mode "\\.elm$" - :config - (load "elm-mode-autoloads" nil t) - (add-hook! 'elm-mode-hook #'(flycheck-mode rainbow-delimiters-mode)) - (set! :company-backend 'elm-mode '(company-elm)) - (set! :repl 'elm-mode #'run-elm-interactive) - (setq elm-format-on-save t)) +;; `elm-mode' +(setq elm-format-on-save t) + +(add-hook! 'elm-mode-hook #'(flycheck-mode rainbow-delimiters-mode)) + +(set! :company-backend 'elm-mode 'company-elm) +(set! :repl 'elm-mode #'run-elm-interactive) (def-package! flycheck-elm diff --git a/modules/lang/emacs-lisp/autoload.el b/modules/lang/emacs-lisp/autoload.el index 05e3b6e96..4071df3f1 100644 --- a/modules/lang/emacs-lisp/autoload.el +++ b/modules/lang/emacs-lisp/autoload.el @@ -1,5 +1,13 @@ ;;; lang/emacs-lisp/autoload.el -*- lexical-binding: t; -*- +;;;###autoload +(autoload 'overseer-test "overseer" nil t) + + +;; +;; Library +;; + ;;;###autoload (defun +emacs-lisp/repl () "Open the Emacs Lisp REPL (`ielm')." diff --git a/modules/lang/emacs-lisp/config.el b/modules/lang/emacs-lisp/config.el index 20033e171..97172e8b6 100644 --- a/modules/lang/emacs-lisp/config.el +++ b/modules/lang/emacs-lisp/config.el @@ -67,27 +67,17 @@ ;; Plugins ;; -(def-package! auto-compile - :commands auto-compile-on-save-mode - :config - (setq auto-compile-display-buffer nil - auto-compile-use-mode-line nil)) +;; `auto-compile' +(setq auto-compile-display-buffer nil + auto-compile-use-mode-line nil) -(def-package! highlight-quoted - :commands highlight-quoted-mode) +;; `slime' +(setq inferior-lisp-program "clisp") +(after! slime (require 'slime-fuzzy)) -(def-package! slime - :defer t - :config - (setq inferior-lisp-program "clisp") - (require 'slime-fuzzy)) - - -(def-package! macrostep - :commands macrostep-expand - :config +(after! macrostep (map! :map macrostep-keymap :n "RET" #'macrostep-expand :n "e" #'macrostep-expand @@ -104,6 +94,7 @@ :n "q" #'macrostep-collapse-all :n "C" #'macrostep-collapse-all) + ;; `evil-normalize-keymaps' seems to be required for macrostep or it won't ;; apply for the very first invocation (add-hook 'macrostep-mode-hook #'evil-normalize-keymaps)) @@ -111,18 +102,14 @@ (def-package! flycheck-cask :when (featurep! :feature syntax-checker) - :commands flycheck-cask-setup + :defer t :init (add-hook! 'emacs-lisp-mode-hook (add-hook 'flycheck-mode-hook #'flycheck-cask-setup nil t))) -(def-package! overseer - :commands overseer-test) - - -;; ;; +;; Project modes ;; (def-project-mode! +emacs-lisp-ert-mode diff --git a/modules/lang/erlang/config.el b/modules/lang/erlang/config.el index 8a180d37a..933c455f4 100644 --- a/modules/lang/erlang/config.el +++ b/modules/lang/erlang/config.el @@ -1,20 +1,19 @@ ;;; private/erlang/config.el -*- lexical-binding: t; -*- -(def-package! erlang - ;; customizations - :mode "\\.erlang$" - ;; rebar files - :mode "/rebar\\.config\\(?:\\.script\\)?$" - ;; erlang configs - :mode "/\\(?:app\\|sys\\)\\.config$") +(dolist (regexp '("\\.erlang$" + ;; rebar files + "/rebar\\.config\\(?:\\.script\\)?$" + ;; erlang configs + "/\\(?:app\\|sys\\)\\.config$")) + (map-put auto-mode-alist regexp 'erlang-mode)) + (def-package! flycheck-rebar3 :when (featurep! :feature syntax-checker) - :after erlang - :config - (flycheck-rebar3-setup)) + :after flycheck + :config (flycheck-rebar3-setup)) + -;; Completion via Ivy (def-package! ivy-erlang-complete :when (featurep! :completion ivy) :hook (erlang-mode . ivy-erlang-complete-init) @@ -23,7 +22,6 @@ (add-hook 'after-save-hook #'ivy-erlang-complete-reparse nil t))) -;; Completion via Company (def-package! company-erlang :when (featurep! :completion company) :hook (erlang-mode . company-erlang-init)) diff --git a/modules/lang/ess/config.el b/modules/lang/ess/config.el index e08657a08..a1fc837b2 100644 --- a/modules/lang/ess/config.el +++ b/modules/lang/ess/config.el @@ -79,6 +79,6 @@ :n "cn" #'ess-noweb-next-chunk)))) -(def-package! ess-smart-equals - :hook ((ess-mode . ess-smart-equals-mode) - (inferior-ess-mode . ess-smart-equals-mode))) +;; `ess-smart-equals-mode' +(add-hook! (ess-mode inferior-ess) + #'ess-smart-equals-mode) diff --git a/modules/lang/go/config.el b/modules/lang/go/config.el index 34e4d57d5..f8e8c6050 100644 --- a/modules/lang/go/config.el +++ b/modules/lang/go/config.el @@ -4,10 +4,7 @@ ;; Plugins ;; -(def-package! go-mode - :mode "\\.go$" - :interpreter "go" - :config +(after! go-mode (set! :env "GOPATH" "GOROOT") (set! :repl 'go-mode #'gorepl-run) (set! :lookup 'go-mode @@ -15,11 +12,12 @@ :references #'go-guru-referrers :documentation #'godoc-at-point) - (when (executable-find "goimports") - (setq gofmt-command "goimports")) + (when-let* ((goimports (executable-find "goimports"))) + (setq gofmt-command goimports)) (setq gofmt-show-errors nil) ; Leave it to flycheck - (add-hook 'go-mode-hook #'flycheck-mode) + + (add-hook! 'go-mode-hook #'(flycheck-mode go-eldoc-setup)) (add-hook! go-mode (add-hook 'before-save-hook #'gofmt-before-save nil t)) @@ -70,25 +68,13 @@ :v "r" #'go-play-region)) -(def-package! go-eldoc - :hook (go-mode . go-eldoc-setup)) - - -(def-package! go-guru - :commands (go-guru-describe go-guru-freevars go-guru-implements go-guru-peers - go-guru-referrers go-guru-definition go-guru-pointsto - go-guru-callstack go-guru-whicherrs go-guru-callers go-guru-callees - go-guru-expand-region)) - - (def-package! gorepl-mode - :commands (gorepl-run gorepl-run-load-current-file)) + :commands gorepl-run-load-current-file) (def-package! company-go :when (featurep! :completion company) - :init (setq command-go-gocode-command "gocode") :after go-mode :config - (setq company-go-show-annotation t) - (set! :company-backend 'go-mode '(company-go))) + (set! :company-backend 'go-mode 'company-go) + (setq company-go-show-annotation t)) diff --git a/modules/lang/haskell/config.el b/modules/lang/haskell/config.el index a97fa9bff..559b244aa 100644 --- a/modules/lang/haskell/config.el +++ b/modules/lang/haskell/config.el @@ -8,18 +8,7 @@ ;; Common plugins ;; -(def-package! haskell-mode - :mode "\\.hs$" - :mode ("\\.ghci$" . ghci-script-mode) - :mode ("\\.cabal$" . haskell-cabal-mode) - :interpreter (("runghc" . haskell-mode) - ("runhaskell" . haskell-mode)) - :config - (load "haskell-mode-autoloads" nil t) +(after! haskell-mode (set! :repl 'haskell-mode #'switch-to-haskell) - (push ".hi" completion-ignored-extensions) - - (autoload 'switch-to-haskell "inf-haskell" nil t) - (after! inf-haskell - (map! :map inferior-haskell-mode-map "ESC ESC" #'+popup/close))) + (add-to-list 'completion-ignored-extensions ".hi")) diff --git a/modules/lang/hy/config.el b/modules/lang/hy/config.el index bc106c784..bd24be0da 100644 --- a/modules/lang/hy/config.el +++ b/modules/lang/hy/config.el @@ -1,8 +1,8 @@ ;;; lang/hy/config.el -*- lexical-binding: t; -*- (def-package! hy-mode - :mode "\\.hy$" + :mode "\\.hy\\'" :interpreter "hy" :config (set! :repl 'hy-mode #'hy-shell-start-or-switch-to-shell) - (set! :company-backend 'hy-mode '(company-hy))) + (set! :company-backend 'hy-mode 'company-hy)) diff --git a/modules/lang/java/config.el b/modules/lang/java/config.el index 8be32f44c..5ace2680a 100644 --- a/modules/lang/java/config.el +++ b/modules/lang/java/config.el @@ -3,8 +3,8 @@ (add-hook 'java-mode-hook #'rainbow-delimiters-mode) (cond ((featurep! +meghanada) (load! +meghanada)) - ;; TODO lang/java +eclim - ;; ((featurep! +eclim) (load! +eclim)) + ;; TODO lang/java +lsp (lsp-java?) + ;; ((featurep! +lsp) (load! +lsp)) ) diff --git a/modules/lang/javascript/config.el b/modules/lang/javascript/config.el index ff5991288..c5721ff22 100644 --- a/modules/lang/javascript/config.el +++ b/modules/lang/javascript/config.el @@ -22,6 +22,7 @@ (add-hook! 'js2-mode-hook #'(flycheck-mode rainbow-delimiters-mode)) (set! :electric 'js2-mode :chars '(?\} ?\) ?. ?:)) + (set! :repl 'js2-mode #'+javascript/repl) ;; Conform switch-case indentation to js2 normal indent (defvaralias 'js-switch-indent-offset 'js2-basic-offset) @@ -31,19 +32,10 @@ (map! :map js2-mode-map :localleader - :n "S" #'+javascript/skewer-this-buffer)) - - -(def-package! typescript-mode - :commands typescript-mode - :config - (add-hook! 'typescript-mode-hook #'(flycheck-mode rainbow-delimiters-mode)) - (set! :electric 'typescript-mode - :chars '(?\} ?\)) :words '("||" "&&"))) + :n "S" #'+javascript/skewer-this-buffer)) (def-package! rjsx-mode - :commands rjsx-mode :mode "components/.+\\.js$" :init (defun +javascript-jsx-file-p () @@ -54,8 +46,7 @@ magic-mode-regexp-match-limit t) (progn (goto-char (match-beginning 1)) (not (sp-point-in-string-or-comment))))) - - (push '(+javascript-jsx-file-p . rjsx-mode) magic-mode-alist) + (map-put magic-mode-alist #'+javascript-jsx-file-p 'rjsx-mode) :config (set! :electric 'rjsx-mode :chars '(?\} ?\) ?. ?>)) (add-hook! 'rjsx-mode-hook @@ -67,14 +58,19 @@ ;; However, the parser doesn't run immediately, so a fast typist can outrun ;; it, causing issues, so force it to parse. (defun +javascript|reparse (n) - ;; if n != 1, then rjsx-maybe-reparse will be run elsewhere + ;; if n != 1, rjsx-electric-gt calls rjsx-maybe-reparse itself (if (= n 1) (rjsx-maybe-reparse))) (advice-add #'rjsx-electric-gt :before #'+javascript|reparse)) -(def-package! coffee-mode - :defer t ; file extensions registered by autoloads file - :init (setq coffee-indent-like-python-mode t)) +(after! typescript-mode + (add-hook! 'typescript-mode-hook #'(flycheck-mode rainbow-delimiters-mode)) + (set! :electric 'typescript-mode + :chars '(?\} ?\)) :words '("||" "&&"))) + + +;; `coffee-mode' +(setq coffee-indent-like-python-mode t) ;; @@ -86,6 +82,7 @@ :hook (typescript-mode . tide-setup) :init (defun +javascript|init-tide-in-web-mode () + "Enable `tide-mode' if in a *.tsx file." (when (string= (file-name-extension (or buffer-file-name "")) "tsx") (tide-setup))) (add-hook 'web-mode-hook #'+javascript|init-tide-in-web-mode) @@ -156,12 +153,6 @@ :init (set! :lookup 'js2-mode :xref-backend #'xref-js2-xref-backend)) -(def-package! nodejs-repl - :commands nodejs-repl - :init - (set! :repl 'js2-mode #'+javascript/repl)) - - (def-package! js2-refactor :commands (js2r-extract-function js2r-extract-method js2r-introduce-parameter @@ -174,51 +165,38 @@ js2r-debug-this js2r-forward-slurp js2r-forward-barf)) -(def-package! web-beautify - :commands web-beautify-js - :init - (map! :map* (json-mode js2-mode-map) :n "gQ" #'web-beautify-js)) - - (def-package! eslintd-fix - :commands (eslintd-fix-mode eslintd-fix) + :commands eslintd-fix :config (defun +javascript|set-flycheck-executable-to-eslint () (setq flycheck-javascript-eslint-executable eslintd-fix-executable)) (add-hook 'eslintd-fix-mode-hook #'+javascript|set-flycheck-executable-to-eslint)) -(def-package! skewer-mode - :commands (skewer-mode run-skewer) - :config - (map! :map skewer-mode-map +;; `skewer-mode' +(map! (:after skewer-mode + :map skewer-mode-map :localleader :n "sE" #'skewer-eval-last-expression :n "se" #'skewer-eval-defun - :n "sf" #'skewer-load-buffer)) + :n "sf" #'skewer-load-buffer) - -(def-package! skewer-css ; in skewer-mode - :commands skewer-css-mode - :config - (map! :map skewer-css-mode-map + (:after skewer-css + :map skewer-css-mode-map :localleader :n "se" #'skewer-css-eval-current-declaration :n "sr" #'skewer-css-eval-current-rule :n "sb" #'skewer-css-eval-buffer - :n "sc" #'skewer-css-clear-all)) + :n "sc" #'skewer-css-clear-all) - -(def-package! skewer-html ; in skewer-mode - :commands skewer-html-mode - :config - (map! :map skewer-html-mode-map + (:after skewer-html + :map skewer-html-mode-map :localleader :n "se" #'skewer-html-eval-tag)) -(def-package! skewer-repl - :commands skewer-repl) +;; `web-beautify' +(map! :map* (json-mode-map js2-mode-map) :n "gQ" #'web-beautify-js) ;; @@ -226,7 +204,7 @@ ;; (def-project-mode! +javascript-screeps-mode - :match "/screeps\\(-ai\\)?/.+$" + :match "/screeps\\(?:-ai\\)?/.+$" :modes (+javascript-npm-mode) :add-hooks (+javascript|init-screeps-mode) :on-load (load! +screeps)) diff --git a/modules/lang/julia/config.el b/modules/lang/julia/config.el index 2656fd4c8..c7be5a650 100644 --- a/modules/lang/julia/config.el +++ b/modules/lang/julia/config.el @@ -1,7 +1,6 @@ ;;; lang/julia/config.el -*- lexical-binding: t; -*- (use-package julia-mode - :mode "\\.jl$" :interpreter "julia" :config (set! :repl 'julia-mode #'+julia/repl) diff --git a/modules/lang/latex/config.el b/modules/lang/latex/config.el index 29ecefa08..dd33daf0f 100644 --- a/modules/lang/latex/config.el +++ b/modules/lang/latex/config.el @@ -18,9 +18,6 @@ "Sets the directory where AUCTeX will search for PDFs associated to BibTeX references." `(setq +latex-bibtex-dir ,dir)) -;; sp's default latex rules are obnoxious, so disable them -(provide 'smartparens-latex) - ;; ;; Plugins diff --git a/modules/lang/ledger/config.el b/modules/lang/ledger/config.el index 5db4e7c71..0df0dbc5f 100644 --- a/modules/lang/ledger/config.el +++ b/modules/lang/ledger/config.el @@ -1,8 +1,7 @@ ;;; lang/ledger/config.el -*- lexical-binding: t; -*- -(def-package! ledger-mode - :mode "\\.ledger$" - :config (setq ledger-clear-whole-transactions 1)) +;; `ledger-mode' +(setq ledger-clear-whole-transactions 1) (def-package! evil-ledger @@ -12,4 +11,5 @@ (def-package! flycheck-ledger :when (featurep! :feature syntax-checker) - :init (add-hook 'ledger-mode-hook #'flycheck-mode)) + :after ledger-mode + :config (add-hook 'ledger-mode-hook #'flycheck-mode)) diff --git a/modules/lang/lua/config.el b/modules/lang/lua/config.el index 9a2dece5a..d8557f3b3 100644 --- a/modules/lang/lua/config.el +++ b/modules/lang/lua/config.el @@ -1,18 +1,12 @@ ;;; lang/lua/config.el -*- lexical-binding: t; -*- -(def-package! lua-mode - :mode "\\.lua$" - :interpreter "lua" - :init - ;; sp's default lua rules are obnoxious, so disable them. Use snippets - ;; instead! - (provide 'smartparens-lua) - :config +(after! lua-mode (add-hook 'lua-mode-hook #'flycheck-mode) (set! :lookup 'lua-mode :documentation 'lua-search-documentation) (set! :electric 'lua-mode :words '("else" "end")) (set! :repl 'lua-mode #'+lua/repl) + (set! :company-backend 'lua-mode '(company-lua company-yasnippet)) (def-menu! +lua/build-menu "Build/compilation commands for `lua-mode' buffers." @@ -24,15 +18,8 @@ :n "b" #'+lua/build-menu)) -(def-package! company-lua - :after (:all company lua-mode) - :config - (set! :company-backend 'lua-mode '(company-lua company-yasnippet))) - - -(def-package! moonscript - :mode ("\\.moon$" . moonscript-mode) - :config (defvaralias 'moonscript-indent-offset 'tab-width)) +(after! moonscript + (defvaralias 'moonscript-indent-offset 'tab-width)) ;; diff --git a/modules/lang/markdown/config.el b/modules/lang/markdown/config.el index b45cbe084..0438171e0 100644 --- a/modules/lang/markdown/config.el +++ b/modules/lang/markdown/config.el @@ -1,9 +1,7 @@ ;;; lang/markdown/config.el -*- lexical-binding: t; -*- (def-package! markdown-mode - :mode "/README$" - :mode ("/README\\.md$" . gfm-mode) - :mode "\\.m\\(?:d\\|arkdown\\)$" + :mode ("/README\\(?:\\.\\(?:markdown\\|md\\)\\)?\\'" . gfm-mode) :init (setq markdown-enable-wiki-links t markdown-enable-math t diff --git a/modules/lang/nim/config.el b/modules/lang/nim/config.el index 4beffb199..c43aab0aa 100644 --- a/modules/lang/nim/config.el +++ b/modules/lang/nim/config.el @@ -1,32 +1,20 @@ ;;; lang/nim/config.el -*- lexical-binding: t; -*- -(def-package! nim-mode - :mode "\\.nim\\'" - :mode ("\\.nim\\(ble\\|s\\)\\'" . nimscript-mode) - :config - (load "nim-mode-autoloads" nil t) - ;; NOTE nim-mode autoloads sets up xref - +(after! nim-mode (defun +nim|init-nimsuggest-mode () "Conditionally load `nimsuggest-mode', instead of clumsily erroring out if nimsuggest isn't installed." - (when (executable-find "nimsuggest") + (when (file-executable-p nimsuggest-path) (nimsuggest-mode))) (add-hook 'nim-mode-hook #'+nim|init-nimsuggest-mode) (map! :map nim-mode-map :localleader - :n "b" #'+nim/build-menu) - - (def-menu! +nim/build-menu - "Building commands for `nim-mode' buffers." - '(("Build & run" :exec nim-compile)) - :prompt "Build")) + :n "b" #'nim-compile)) (def-package! flycheck-nim :when (featurep! :feature syntax-checker) :after nim-mode - :config - (add-hook 'nimsuggest-mode-hook #'flycheck-mode)) + :config (add-hook 'nimsuggest-mode-hook #'flycheck-mode)) diff --git a/modules/lang/nix/config.el b/modules/lang/nix/config.el deleted file mode 100644 index e9d090fc3..000000000 --- a/modules/lang/nix/config.el +++ /dev/null @@ -1,4 +0,0 @@ -;;; lang/nix/config.el -*- lexical-binding: t; -*- - -(def-package! nix-mode - :mode "\\.nix$") diff --git a/modules/lang/ocaml/config.el b/modules/lang/ocaml/config.el index 22067cffb..bdd4974d2 100644 --- a/modules/lang/ocaml/config.el +++ b/modules/lang/ocaml/config.el @@ -1,9 +1,13 @@ ;;; lang/ocaml/config.el -*- lexical-binding: t; -*- (def-package! tuareg - :mode ("\\.ml[4ilpy]?$" . tuareg-mode)) + :mode ("\\.ml[4ilpy]?\\'" . tuareg-mode)) (def-package! merlin :after tuareg - :hook (tuareg-mode . merlin-mode)) + :hook (tuareg-mode . merlin-mode) + :config + (set! :company-backend 'tuareg-mode 'merlin-compand-backend) + (after! company + (remove-hook 'company-backends 'merlin-compand-backend))) diff --git a/modules/lang/org/config.el b/modules/lang/org/config.el index a2c17bb28..ba5449039 100644 --- a/modules/lang/org/config.el +++ b/modules/lang/org/config.el @@ -16,12 +16,8 @@ ;; Plugins ;; -(def-package! toc-org - :commands toc-org-enable - :config (setq toc-org-hrefify-default "org")) - -(def-package! org-bullets - :commands org-bullets-mode) +;; `toc-org' +(setq toc-org-hrefify-default "org") (def-package! evil-org :when (featurep! :feature evil) diff --git a/modules/lang/plantuml/config.el b/modules/lang/plantuml/config.el index cb66d1495..a60b92e92 100644 --- a/modules/lang/plantuml/config.el +++ b/modules/lang/plantuml/config.el @@ -1,7 +1,7 @@ ;;; lang/plantuml/config.el -*- lexical-binding: t; -*- (def-package! plantuml-mode - :mode "\\.p\\(?:lant\\)?uml$" + :defer t :init (setq plantuml-jar-path (concat doom-etc-dir "plantuml.jar") org-plantuml-jar-path plantuml-jar-path) diff --git a/modules/lang/purescript/config.el b/modules/lang/purescript/config.el index 39eafd64c..579391e8e 100644 --- a/modules/lang/purescript/config.el +++ b/modules/lang/purescript/config.el @@ -1,16 +1,18 @@ ;;; lang/purescript/config.el -*- lexical-binding: t; -*- -(def-package! purescript-mode - :mode "\\.purs$" - :config +(after! purescript-mode (add-hook! 'purescript-mode-hook - #'(flycheck-mode purescript-indentation-mode rainbow-delimiters-mode))) + #'(flycheck-mode + purescript-indentation-mode + rainbow-delimiters-mode))) + ;; (def-package! flycheck-purescript ;; :after purescript-mode ;; :config ;; (add-hook 'flycheck-mode-hook #'flycheck-purescript-setup)) + (def-package! psc-ide :hook (purescript-mode . psc-ide-mode)) diff --git a/modules/lang/python/config.el b/modules/lang/python/config.el index 4c6fe44f1..4e129b9d3 100644 --- a/modules/lang/python/config.el +++ b/modules/lang/python/config.el @@ -16,7 +16,7 @@ is loaded.") ;; (def-package! python - :commands python-mode + :defer t :init (setq python-environment-directory doom-cache-dir python-indent-guess-indent-offset-verbose nil @@ -73,7 +73,6 @@ environment variables." (def-package! anaconda-mode - :after python :hook python-mode :init (setq anaconda-mode-installation-directory (concat doom-etc-dir "anaconda/") diff --git a/modules/lang/rest/config.el b/modules/lang/rest/config.el index c3781d2b1..117908050 100644 --- a/modules/lang/rest/config.el +++ b/modules/lang/rest/config.el @@ -1,8 +1,7 @@ ;;; lang/rest/config.el -*- lexical-binding: t; -*- (def-package! restclient - :commands restclient-mode - :mode ("\\.http$" . restclient-mode) + :mode ("\\.http\\'" . restclient-mode) :config (set! :popup "^\\*HTTP Response" '((size . 0.4)) '((quit . other))) (map! :mode restclient-mode @@ -16,4 +15,4 @@ (def-package! company-restclient :when (featurep! :completion company) :after restclient - :config (set! :company-backend 'restclient-mode '(company-restclient))) + :config (set! :company-backend 'restclient-mode 'company-restclient)) diff --git a/modules/lang/ruby/config.el b/modules/lang/ruby/config.el index 3d4fd3ae3..5eb32b4fc 100644 --- a/modules/lang/ruby/config.el +++ b/modules/lang/ruby/config.el @@ -12,15 +12,12 @@ ;; (def-package! ruby-mode - :mode "\\.rb$" - :mode "\\.rake$" - :mode "\\.gemspec$" - :mode "\\.\\(?:pry\\|irb\\)rc$" - :mode "/\\(?:Gem\\|Cap\\|Vagrant\\|Rake\\|Pod\\|Puppet\\|Berks\\)file$" - :interpreter "ruby" + :mode "\\.\\(?:pry\\|irb\\)rc\\'" :config - (set! :company-backend 'ruby-mode '(company-dabbrev-code)) + (set! :company-backend 'ruby-mode 'company-dabbrev-code) (set! :electric 'ruby-mode :words '("else" "end" "elseif")) + (set! :env "RBENV_ROOT") + (set! :repl 'ruby-mode #'inf-ruby) ; `inf-ruby' (setq ruby-deep-indent-paren t) ;; Don't interfere with my custom RET behavior (define-key ruby-mode-map [?\n] nil) @@ -74,10 +71,8 @@ environment variables." (def-package! rspec-mode - :mode ("/\\.rspec$" . text-mode) + :mode ("/\\.rspec\\'" . text-mode) :init - (associate! rspec-mode :match "/\\.rspec$") - (associate! rspec-mode :modes (ruby-mode yaml-mode) :files ("/spec/")) (defvar rspec-mode-verifiable-map (make-sparse-keymap)) (defvar evilmi-ruby-match-tags '((("unless" "if") ("elsif" "else") "end") @@ -96,18 +91,12 @@ environment variables." :n "v" #'rspec-verify)) -(def-package! inf-ruby - :commands (inf-ruby inf-ruby-console-auto) - :init (set! :repl 'ruby-mode 'inf-ruby)) - - (def-package! company-inf-ruby :when (featurep! :completion company) :after inf-ruby - :config (set! :company-backend 'inf-ruby-mode '(company-inf-ruby))) + :config (set! :company-backend 'inf-ruby-mode 'company-inf-ruby)) -(def-package! rake - :commands (rake rake-find-task rake-rerun) - :config (setq rake-completion-system 'default)) +;; `rake' +(setq rake-completion-system 'default) diff --git a/modules/lang/rust/config.el b/modules/lang/rust/config.el index 9a45ae71e..cd216273f 100644 --- a/modules/lang/rust/config.el +++ b/modules/lang/rust/config.el @@ -1,12 +1,6 @@ ;;; lang/rust/config.el -*- lexical-binding: t; -*- -;; -;; Plugins -;; - -(def-package! rust-mode - :mode "\\.rs$" - :config +(after! rust-mode (set! :env "RUST_SRC_PATH") (set! :docset 'rust-mode "Rust") (setq rust-indent-method-chain t) @@ -14,6 +8,7 @@ (map! :map rust-mode-map :localleader :n "b" #'+rust/build-menu) + (def-menu! +rust/build-menu "TODO" '(("cargo run" :exec "cargo run --color always") @@ -40,6 +35,5 @@ (def-package! flycheck-rust :when (featurep! :feature syntax-checker) :after rust-mode - :hook (flycheck-mode . flycheck-rust-setup) - :init (add-hook 'rust-mode-hook #'flycheck-mode)) + :config (add-hook! 'rust-mode-hook #'(flycheck-mode flycheck-rust-setup))) diff --git a/modules/lang/scala/config.el b/modules/lang/scala/config.el index b5a2a1bf0..44a39ced9 100644 --- a/modules/lang/scala/config.el +++ b/modules/lang/scala/config.el @@ -1,26 +1,24 @@ ;;; lang/scala/config.el -*- lexical-binding: t; -*- -(def-package! scala-mode - :mode "\\.s\\(?:cala\\|bt\\)$" - :config (setq scala-indent:align-parameters t)) +(after! scala-mode + (setq scala-indent:align-parameters t) + (add-to-list 'dtrt-indent-hook-mapping-list '(scala-mode c/c++/java scala-indent:step))) -(def-package! sbt-mode :after scala-mode) - - -(def-package! ensime - :commands (ensime ensime-scala-mode-hook) - :hook (scala-mode . ensime-mode) - :config - (set! :company-backend 'scala-mode '(ensime-company company-yasnippet)) - +(after! ensime (setq ensime-startup-snapshot-notification nil ensime-startup-notification nil ensime-eldoc-hints 'all ;; let DOOM handle company setup ensime-completion-style nil) + (set! :company-backend 'scala-mode '(ensime-company company-yasnippet)) + ;; Fix void-variable imenu-auto-rescan error caused by `ensime--setup-imenu' ;; trying to make imenu variables buffer local before imenu is loaded. (require 'imenu)) + +(def-package! sbt-mode + :after scala-mode + :config (set! :repl 'scala-mode #'run-scala)) diff --git a/modules/lang/sh/config.el b/modules/lang/sh/config.el index d100a8c86..21444fb91 100644 --- a/modules/lang/sh/config.el +++ b/modules/lang/sh/config.el @@ -12,21 +12,19 @@ ;; (def-package! sh-script ; built-in - :mode ("\\.zsh$" . sh-mode) - :mode ("\\.zunit$" . sh-mode) - :mode ("/bspwmrc$" . sh-mode) - :init - (add-hook! sh-mode #'(flycheck-mode highlight-numbers-mode)) + :mode ("\\.zunit\\'" . sh-mode) + :mode ("/bspwmrc\\'" . sh-mode) :config + (add-hook! sh-mode #'(flycheck-mode highlight-numbers-mode)) (set! :electric 'sh-mode :words '("else" "elif" "fi" "done" "then" "do" "esac" ";;")) (set! :repl 'sh-mode #'+sh/repl) (setq sh-indent-after-continuation 'always) ;; recognize function names with dashes in them - (push '((sh . ((nil "^\\s-*function\\s-+\\([[:alpha:]_-][[:alnum:]_-]*\\)\\s-*\\(?:()\\)?" 1) - (nil "^\\s-*\\([[:alpha:]_-][[:alnum:]_-]*\\)\\s-*()" 1)))) - sh-imenu-generic-expression) + (map-put sh-imenu-generic-expression + 'sh '((nil "^\\s-*function\\s-+\\([[:alpha:]_-][[:alnum:]_-]*\\)\\s-*\\(?:()\\)?" 1) + (nil "^\\s-*\\([[:alpha:]_-][[:alnum:]_-]*\\)\\s-*()" 1))) ;; `sh-set-shell' is chatty about setting up indentation rules (advice-add #'sh-set-shell :around #'doom*shut-up) diff --git a/modules/lang/swift/config.el b/modules/lang/swift/config.el index 9daae8f3a..6ba19cf0e 100644 --- a/modules/lang/swift/config.el +++ b/modules/lang/swift/config.el @@ -1,13 +1,14 @@ ;;; lang/swift/config.el -*- lexical-binding: t; -*- -;; TODO Set up emacs task runners for fruitstrap +;; `swift-mode' +(set! :repl 'swift-mode #'run-swift) -(def-package! swift-mode - :mode "\\.swift$" - :config - (add-hook 'swift-mode-hook #'flycheck-mode) - (set! :repl 'swift-mode #'swift-mode-run-repl) ; TODO test this - (push 'swift flycheck-checkers)) + +(def-package! flycheck-swift + :when (featurep! :feature syntax-checker) + :after swift-mode + :init (add-hook 'swift-mode-hook #'flycheck-mode) + :config (flycheck-swift-setup)) (def-package! company-sourcekit diff --git a/modules/lang/swift/packages.el b/modules/lang/swift/packages.el index a9cc3a778..73e74da91 100644 --- a/modules/lang/swift/packages.el +++ b/modules/lang/swift/packages.el @@ -5,3 +5,6 @@ (when (featurep! :completion company) (package! company-sourcekit)) + +(when (featurep! :feature syntax-checker) + (package! flycheck-swift)) diff --git a/modules/lang/web/+css.el b/modules/lang/web/+css.el index d49d19292..834a2ae6e 100644 --- a/modules/lang/web/+css.el +++ b/modules/lang/web/+css.el @@ -1,10 +1,5 @@ ;;; lang/web/+css.el -*- lexical-binding: t; -*- -;; css-mode hooks apply to scss and less-css modes -(add-hook 'css-mode-hook #'rainbow-delimiters-mode) -(add-hook! (css-mode sass-mode stylus-mode) - #'(yas-minor-mode-on flycheck-mode highlight-numbers-mode)) - ;; An improved newline+continue comment function (setq-hook! css-mode comment-indent-function #'+css/comment-indent-new-line) @@ -13,29 +8,36 @@ (sp-local-pair "/*" "*/" :post-handlers '(("||\n[i]" "RET") ("| " "SPC"))))) (map! :map* (css-mode-map scss-mode-map less-css-mode-map) - :n "M-R" #'+css/web-refresh-browser - (:localleader - :n "rb" #'+css/toggle-inline-or-block)) + :localleader + :n "rb" #'+css/toggle-inline-or-block) ;; ;; Packages ;; +;; css-mode hooks apply to scss and less-css modes +(add-hook 'css-mode-hook #'rainbow-delimiters-mode) +(add-hook! (css-mode sass-mode stylus-mode) + #'(yas-minor-mode-on + flycheck-mode + highlight-numbers-mode + rainbow-mode)) + + (def-package! counsel-css :when (featurep! :completion ivy) - :commands (counsel-css counsel-css-imenu-setup) + :commands counsel-css :hook (css-mode . counsel-css-imenu-setup) :init (map! :map* (css-mode-map scss-mode-map less-css-mode-map) :localleader :n ";" #'counsel-css)) -(def-package! rainbow-mode - :hook (css-mode sass-mode)) - - -(after! css-mode ; contains both css-mode & scss-mode +(def-package! css-mode ; built-in + :defer t + :config + ;; contains both css-mode & scss-mode (set! :docset 'css-mode "CSS") (set! :docset 'scss-mode "Sass") (unless EMACS26+ @@ -45,7 +47,7 @@ (def-package! sass-mode - :commands sass-mode + :defer t :config (set! :docset 'sass-mode "Sass") (set! :company-backend 'sass-mode 'company-css) diff --git a/modules/lang/web/+html.el b/modules/lang/web/+html.el index a01979605..4a27bd0ed 100644 --- a/modules/lang/web/+html.el +++ b/modules/lang/web/+html.el @@ -14,7 +14,6 @@ :mode "wp-content/themes/.+/.+\\.php$" :mode "templates/.+\\.php$" :config - (set! :company-backend 'web-mode '(company-web-html company-yasnippet)) (setq web-mode-enable-html-entities-fontification t web-mode-enable-auto-quoting nil) @@ -91,10 +90,7 @@ :nv "[T" #'web-mode-element-parent)) -(def-package! company-web - :when (featurep! :completion company) - :after web-mode) - - -;; `pug-mode' -(set! :company-backend 'pug-mode '(company-yasnippet)) +;; +(set! :company-backend 'pug-mode 'company-web-jade) +(set! :company-backend 'web-mode 'company-web-html) +(set! :company-backend 'slim-mode 'company-web-slim) diff --git a/modules/lang/web/packages.el b/modules/lang/web/packages.el index f89e975d7..9a864d1bc 100644 --- a/modules/lang/web/packages.el +++ b/modules/lang/web/packages.el @@ -13,9 +13,9 @@ (package! haml-mode) (package! pug-mode) (package! slim-mode) -(package! web-mode) -(when (featurep! :completion company) - (package! company-web)) +(when (package! web-mode) + (when (featurep! :completion company) + (package! company-web))) ;; +css.el (package! less-css-mode) diff --git a/modules/tools/editorconfig/config.el b/modules/tools/editorconfig/config.el index 2e5d98795..c458b8a2e 100644 --- a/modules/tools/editorconfig/config.el +++ b/modules/tools/editorconfig/config.el @@ -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)) diff --git a/modules/tools/ein/autoload.el b/modules/tools/ein/autoload.el index d30f5119e..303deb947 100644 --- a/modules/tools/ein/autoload.el +++ b/modules/tools/ein/autoload.el @@ -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)))) diff --git a/modules/tools/ein/config.el b/modules/tools/ein/config.el index 812e815a5..e3b469254 100644 --- a/modules/tools/ein/config.el +++ b/modules/tools/ein/config.el @@ -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) " diff --git a/modules/tools/electric-indent/config.el b/modules/tools/electric-indent/config.el index 809b07800..01a1f3f86 100644 --- a/modules/tools/electric-indent/config.el +++ b/modules/tools/electric-indent/config.el @@ -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)) + diff --git a/modules/tools/eshell/config.el b/modules/tools/eshell/config.el index 26f919bd9..9c522e699 100644 --- a/modules/tools/eshell/config.el +++ b/modules/tools/eshell/config.el @@ -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"))) diff --git a/modules/tools/gist/config.el b/modules/tools/gist/config.el index 46473990a..3e563de26 100644 --- a/modules/tools/gist/config.el +++ b/modules/tools/gist/config.el @@ -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) diff --git a/modules/tools/imenu/config.el b/modules/tools/imenu/config.el index 58628197d..577476ab9 100644 --- a/modules/tools/imenu/config.el +++ b/modules/tools/imenu/config.el @@ -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" diff --git a/modules/tools/magit/config.el b/modules/tools/magit/config.el index db32ca8d1..f5be64dc6 100644 --- a/modules/tools/magit/config.el +++ b/modules/tools/magit/config.el @@ -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)) diff --git a/modules/tools/password-store/config.el b/modules/tools/password-store/config.el index f57b69c8d..4fac1bb32 100644 --- a/modules/tools/password-store/config.el +++ b/modules/tools/password-store/config.el @@ -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)) diff --git a/modules/tools/password-store/packages.el b/modules/tools/password-store/packages.el index 6827fc23e..dbc5f2afd 100644 --- a/modules/tools/password-store/packages.el +++ b/modules/tools/password-store/packages.el @@ -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) diff --git a/modules/tools/pdf/config.el b/modules/tools/pdf/config.el index 0dd7c0fc9..100246093 100644 --- a/modules/tools/pdf/config.el +++ b/modules/tools/pdf/config.el @@ -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)) diff --git a/modules/tools/prodigy/autoload.el b/modules/tools/prodigy/autoload.el index 88781dd3d..6f27d40df 100644 --- a/modules/tools/prodigy/autoload.el +++ b/modules/tools/prodigy/autoload.el @@ -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)))) diff --git a/modules/tools/prodigy/config.el b/modules/tools/prodigy/config.el index 8763db6a3..e9ba7ca32 100644 --- a/modules/tools/prodigy/config.el +++ b/modules/tools/prodigy/config.el @@ -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)) diff --git a/modules/tools/rgb/config.el b/modules/tools/rgb/config.el index ffab008eb..08a93d06a 100644 --- a/modules/tools/rgb/config.el +++ b/modules/tools/rgb/config.el @@ -4,9 +4,6 @@ ;; Plugins ;; -(def-package! rainbow-mode) - - (def-package! kurecolor :after rainbow-mode :config diff --git a/modules/tools/rotate-text/autoload.el b/modules/tools/rotate-text/autoload.el new file mode 100644 index 000000000..1cae4ba58 --- /dev/null +++ b/modules/tools/rotate-text/autoload.el @@ -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)))) diff --git a/modules/tools/rotate-text/config.el b/modules/tools/rotate-text/config.el index 5fb81df5a..df310e3a5 100644 --- a/modules/tools/rotate-text/config.el +++ b/modules/tools/rotate-text/config.el @@ -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"))) diff --git a/modules/tools/term/config.el b/modules/tools/term/config.el index adb1d470b..3263ddcb6 100644 --- a/modules/tools/term/config.el +++ b/modules/tools/term/config.el @@ -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)) diff --git a/modules/ui/doom-dashboard/config.el b/modules/ui/doom-dashboard/config.el index 841235faf..acde3ad25 100644 --- a/modules/ui/doom-dashboard/config.el +++ b/modules/ui/doom-dashboard/config.el @@ -114,16 +114,17 @@ Possible values: (defun +doom-dashboard|init () "Initializes Doom's dashboard." - (add-hook 'window-configuration-change-hook #'+doom-dashboard|resize) - (add-hook 'window-size-change-functions #'+doom-dashboard|resize) - (add-hook 'kill-buffer-query-functions #'+doom-dashboard|reload-on-kill) - (add-hook 'doom-after-switch-buffer-hook #'+doom-dashboard|reload-on-kill) - (unless (daemonp) - (add-hook 'after-make-frame-functions #'+doom-dashboard|make-frame)) - ;; `persp-mode' integration: update `default-directory' when switching - (add-hook 'persp-created-functions #'+doom-dashboard|record-project) - (add-hook 'persp-activated-functions #'+doom-dashboard|detect-project) - (add-hook 'persp-before-switch-functions #'+doom-dashboard|record-project) + (unless noninteractive + (add-hook 'window-configuration-change-hook #'+doom-dashboard|resize) + (add-hook 'window-size-change-functions #'+doom-dashboard|resize) + (add-hook 'kill-buffer-query-functions #'+doom-dashboard|reload-on-kill) + (add-hook 'doom-after-switch-buffer-hook #'+doom-dashboard|reload-on-kill) + (unless (daemonp) + (add-hook 'after-make-frame-functions #'+doom-dashboard|make-frame)) + ;; `persp-mode' integration: update `default-directory' when switching + (add-hook 'persp-created-functions #'+doom-dashboard|record-project) + (add-hook 'persp-activated-functions #'+doom-dashboard|detect-project) + (add-hook 'persp-before-switch-functions #'+doom-dashboard|record-project)) (+doom-dashboard-reload t)) (defun +doom-dashboard|reload-on-kill () diff --git a/modules/ui/doom-modeline/config.el b/modules/ui/doom-modeline/config.el index f35a3a478..759132f89 100644 --- a/modules/ui/doom-modeline/config.el +++ b/modules/ui/doom-modeline/config.el @@ -4,11 +4,7 @@ ;; mode-line. (def-package! anzu - :commands (anzu-mode global-anzu-mode - anzu-query-replace anzu-query-replace-regexp - anzu-query-replace-at-cursor anzu-replace-at-cursor-thing) - :init - (add-transient-hook! #'isearch-mode (require 'anzu)) + :after-call isearch-mode :config (setq anzu-cons-mode-line-p nil anzu-minimum-input-length 1 @@ -35,10 +31,7 @@ (def-package! evil-anzu - :defer t - :init - (add-transient-hook! #'evil-ex-start-search (require 'evil-anzu)) - (add-transient-hook! #'evil-ex-start-word-search (require 'evil-anzu))) + :after-call (evil-ex-start-search evil-ex-start-word-search)) ;; fish-style modeline diff --git a/modules/ui/doom/config.el b/modules/ui/doom/config.el index 3f8561302..b68313bef 100644 --- a/modules/ui/doom/config.el +++ b/modules/ui/doom/config.el @@ -22,10 +22,11 @@ ;; (def-package! doom-themes - :config + :defer t + :init (unless doom-theme (setq doom-theme 'doom-one)) - + :config ;; Reload common faces when reloading doom-themes live (defun +doom*reload-common (&rest _) (load "doom-themes-common.el" nil t)) (advice-add #'doom//reload-theme :before #'+doom*reload-common) @@ -41,7 +42,7 @@ (def-package! solaire-mode - :commands (solaire-mode turn-on-solaire-mode solaire-mode-swap-bg) + :defer t :init (defun +doom|solaire-mode-swap-bg-maybe () (when-let* ((rule (assq doom-theme +doom-solaire-themes))) diff --git a/modules/ui/evil-goggles/config.el b/modules/ui/evil-goggles/config.el index 1a17d0ebe..e48f8a08a 100644 --- a/modules/ui/evil-goggles/config.el +++ b/modules/ui/evil-goggles/config.el @@ -2,7 +2,7 @@ (def-package! evil-goggles :when (featurep! :feature evil) - :defer pre-command-hook + :after-call pre-command-hook :init (setq evil-goggles-duration 0.05 evil-goggles-pulse nil ; too slow diff --git a/modules/ui/nav-flash/config.el b/modules/ui/nav-flash/config.el index a1519f993..3ab42ec28 100644 --- a/modules/ui/nav-flash/config.el +++ b/modules/ui/nav-flash/config.el @@ -1,7 +1,7 @@ ;;; ui/nav-flash/config.el -*- lexical-binding: t; -*- (def-package! nav-flash - :commands nav-flash-show + :defer t :init ;; NOTE In :feature lookup `recenter' is hooked to a bunch of jumping ;; commands, which will trigger nav-flash. diff --git a/modules/ui/popup/autoload.el b/modules/ui/popup/autoload.el index 844e3d1ef..c1e318514 100644 --- a/modules/ui/popup/autoload.el +++ b/modules/ui/popup/autoload.el @@ -1,5 +1,73 @@ ;;; ui/popup/autoload.el -*- lexical-binding: t; -*- +;;;###autoload +(defvar +popup--display-buffer-alist nil) + +;;;###autoload +(def-setting! :popup (condition &optional alist parameters) + "Register a popup rule. + +CONDITION can be a regexp string or a function. See `display-buffer' for a list +of possible entries for ALIST, which tells the display system how to initialize +the popup window. PARAMETERS is an alist of window parameters. See +`+popup-window-parameters' for a list of custom parameters provided by the popup +module. + +ALIST supports one custom parameter: `size', which will resolve to +`window-height' or `window-width' depending on `side'." + `(progn + (+popup-define ,condition ,alist ,parameters) + (when (bound-and-true-p +popup-mode) + (setq display-buffer-alist +popup--display-buffer-alist)) + +popup--display-buffer-alist)) + +;;;###autoload +(def-setting! :popups (&rest rules) + "Register multiple popup rules with :popup setting (`doom--set:popup'). For +example: + + (set! :popups + (\"^ \\*\" '((slot . 1) (vslot . -1) (size . +popup-shrink-to-fit))) + (\"^\\*\" '((slot . 1) (vslot . -1)) '((select . t))))" + `(progn + ,@(cl-loop for rule in rules collect `(+popup-define ,@rule)) + (when (bound-and-true-p +popup-mode) + (setq display-buffer-alist +popup--display-buffer-alist)) + +popup--display-buffer-alist)) + +;;;###autoload +(defsubst +popup-define (condition &optional alist parameters) + "Define a popup rule. + +The buffers of new windows displayed by `pop-to-buffer' and `display-buffer' +will be tested against CONDITION, which is either a) a regexp string (which is +matched against the buffer's name) or b) a function that takes no arguments and +returns a boolean. + +If CONDITION is met, the buffer will be displayed in a popup window with ALIST +and window PARAMETERS. See `display-buffer-alist' for details on what ALIST may +contain and `+popup-window-parameters' for what window parameters that the popup +module supports. + +ALIST also supports the `size' parameter, which will be translated to +`window-width' or `window-height' depending on `side'. + +If certain attributes/parameters are omitted, the ones from +`+popup-default-alist' and `+popup-default-parameters' will be used." + (declare (indent 1)) + (push (if (eq alist :ignore) + (list condition nil) + `(,condition + (+popup-buffer) + ,@alist + (window-parameters ,@parameters))) + +popup--display-buffer-alist)) + + +;; +;; Library +;; + (defvar +popup--populate-wparams (not EMACS26+)) (defvar +popup--inhibit-transient nil) (defvar +popup--inhibit-select nil) diff --git a/modules/ui/popup/init.el b/modules/ui/popup/init.el deleted file mode 100644 index 8b6b99f16..000000000 --- a/modules/ui/popup/init.el +++ /dev/null @@ -1,61 +0,0 @@ -;;; ui/popup/init.el -*- lexical-binding: t; -*- - -(defvar +popup--display-buffer-alist nil) - -(defun +popup-define (condition &optional alist parameters) - "Define a popup rule. - -The buffers of new windows displayed by `pop-to-buffer' and `display-buffer' -will be tested against CONDITION, which is either a) a regexp string (which is -matched against the buffer's name) or b) a function that takes no arguments and -returns a boolean. - -If CONDITION is met, the buffer will be displayed in a popup window with ALIST -and window PARAMETERS. See `display-buffer-alist' for details on what ALIST may -contain and `+popup-window-parameters' for what window parameters that the popup -module supports. - -ALIST also supports the `size' parameter, which will be translated to -`window-width' or `window-height' depending on `side'. - -If certain attributes/parameters are omitted, the ones from -`+popup-default-alist' and `+popup-default-parameters' will be used." - (declare (indent 1)) - (push (if (eq alist :ignore) - (list condition nil) - `(,condition - (+popup-buffer) - ,@alist - (window-parameters ,@parameters))) - +popup--display-buffer-alist)) - -;; -(def-setting! :popup (condition &optional alist parameters) - "Register a popup rule. - -CONDITION can be a regexp string or a function. See `display-buffer' for a list -of possible entries for ALIST, which tells the display system how to initialize -the popup window. PARAMETERS is an alist of window parameters. See -`+popup-window-parameters' for a list of custom parameters provided by the popup -module. - -ALIST supports one custom parameter: `size', which will resolve to -`window-height' or `window-width' depending on `side'." - `(progn - (+popup-define ,condition ,alist ,parameters) - (when (bound-and-true-p +popup-mode) - (setq display-buffer-alist +popup--display-buffer-alist)) - +popup--display-buffer-alist)) - -(def-setting! :popups (&rest rules) - "Register multiple popup rules with :popup setting (`doom--set:popup'). For -example: - - (set! :popups - (\"^ \\*\" '((slot . 1) (vslot . -1) (size . +popup-shrink-to-fit))) - (\"^\\*\" '((slot . 1) (vslot . -1)) '((select . t))))" - `(progn - ,@(cl-loop for rule in rules collect `(+popup-define ,@rule)) - (when (bound-and-true-p +popup-mode) - (setq display-buffer-alist +popup--display-buffer-alist)) - +popup--display-buffer-alist)) diff --git a/modules/ui/unicode/autoload.el b/modules/ui/unicode/autoload.el new file mode 100644 index 000000000..1af675c04 --- /dev/null +++ b/modules/ui/unicode/autoload.el @@ -0,0 +1,23 @@ +;;; ui/unicode/autoload.el -*- lexical-binding: t; -*- + +;;;###autoload +(add-hook 'doom-post-init-hook #'+unicode|init-fonts) + +;;;###autoload +(defun +unicode|init-fonts () + "Set up `unicode-fonts' to eventually run; accomodating the daemon, if +necessary." + (setq-default bidi-display-reordering t + doom-unicode-font nil) + (if initial-window-system + (+unicode|setup-fonts (selected-frame)) + (add-hook 'after-make-frame-functions #'+unicode|setup-fonts))) + +;;;###autoload +(defun +unicode|setup-fonts (&optional frame) + "Initialize `unicode-fonts', if in a GUI session." + (when (and frame (display-graphic-p frame)) + (with-selected-frame frame + (require 'unicode-fonts) + ;; NOTE will impact startup time on first run + (unicode-fonts-setup)))) diff --git a/modules/ui/unicode/config.el b/modules/ui/unicode/config.el deleted file mode 100644 index a41ae6554..000000000 --- a/modules/ui/unicode/config.el +++ /dev/null @@ -1,19 +0,0 @@ -;;; ui/unicode/config.el -*- lexical-binding: t; -*- - -(def-package! unicode-fonts - :init - (setq-default bidi-display-reordering t - doom-unicode-font nil) - - (defun +unicode|init-fonts (&optional frame) - "Initialize `unicode-fonts', if in a GUI session." - (when (and frame (display-graphic-p frame)) - (with-selected-frame frame - (require 'unicode-fonts) - ;; NOTE will impact startup time on first run - (unicode-fonts-setup)))) - - (add-hook! 'after-init-hook - (if initial-window-system - (+unicode|init-fonts (selected-frame)) - (add-hook 'after-make-frame-functions #'+unicode|init-fonts)))) diff --git a/modules/ui/vi-tilde-fringe/autoload.el b/modules/ui/vi-tilde-fringe/autoload.el new file mode 100644 index 000000000..ab9029cfc --- /dev/null +++ b/modules/ui/vi-tilde-fringe/autoload.el @@ -0,0 +1,4 @@ +;;; ui/vi-tilde-fringe/autoload.el -*- lexical-binding: t; -*- + +;;;###autoload +(add-hook! (prog-mode text-mode conf-mode) #'vi-tilde-fringe-mode) diff --git a/modules/ui/vi-tilde-fringe/config.el b/modules/ui/vi-tilde-fringe/config.el deleted file mode 100644 index 1f099b7aa..000000000 --- a/modules/ui/vi-tilde-fringe/config.el +++ /dev/null @@ -1,6 +0,0 @@ -;;; ui/vi-tilde-fringe/config.el -*- lexical-binding: t; -*- - -;; indicators for empty lines past EOF -(def-package! vi-tilde-fringe - :hook ((prog-mode text-mode conf-mode) . vi-tilde-fringe-mode)) - diff --git a/modules/ui/window-select/config.el b/modules/ui/window-select/config.el index b055bb779..3989310e3 100644 --- a/modules/ui/window-select/config.el +++ b/modules/ui/window-select/config.el @@ -2,9 +2,7 @@ (def-package! switch-window :when (featurep! +switch-window) - :commands (switch-window switch-window-then-maximize switch-window-then-split-below - switch-window-then-split-right switch-window-then-delete - switch-window-then-swap-buffer) + :defer t :init (define-key global-map [remap other-window] #'switch-window) :config @@ -14,8 +12,7 @@ (def-package! ace-window :unless (featurep! +switch-window) - :commands (ace-window ace-swap-window ace-delete-window - ace-select-window ace-delete-other-windows) + :defer t :init (define-key global-map [remap other-window] #'ace-window) :config