diff --git a/lisp/doom-editor.el b/lisp/doom-editor.el index 2827fde85..e9d460adc 100644 --- a/lisp/doom-editor.el +++ b/lisp/doom-editor.el @@ -2,7 +2,12 @@ ;;; Commentary: ;;; Code: -(defvar doom-detect-indentation-excluded-modes '(pascal-mode so-long-mode) +(defvar doom-detect-indentation-excluded-modes + '(pascal-mode + so-long-mode + ;; Automatic indent detection in org files is meaningless. Not to mention, a + ;; non-standard `tab-width' causes an error in org-mode. + org-mode) "A list of major modes where indentation shouldn't be auto-detected.") (defvar-local doom-inhibit-indent-detection nil diff --git a/lisp/doom-lib.el b/lisp/doom-lib.el index 561eb2070..c33edede1 100644 --- a/lisp/doom-lib.el +++ b/lisp/doom-lib.el @@ -4,6 +4,7 @@ ;;; Custom error types (define-error 'doom-error "An unexpected Doom error") +(define-error 'doom-font-error "Could not find a font on your system" 'doom-error) (define-error 'doom-nosync-error "Doom hasn't been initialized yet; did you remember to run 'doom sync' in the shell?" 'doom-error) (define-error 'doom-core-error "Unexpected error in Doom's core" 'doom-error) (define-error 'doom-hook-error "Error in a Doom startup hook" 'doom-error) diff --git a/lisp/doom-ui.el b/lisp/doom-ui.el index ef5091ed0..2bfdc3d8c 100644 --- a/lisp/doom-ui.el +++ b/lisp/doom-ui.el @@ -210,10 +210,7 @@ windows, switch to `doom-fallback-buffer'. Otherwise, delegate to original `kill-current-buffer'." :before-until #'kill-current-buffer (let ((buf (current-buffer))) - (cond ((window-dedicated-p) - (delete-window) - t) - ((eq buf (doom-fallback-buffer)) + (cond ((eq buf (doom-fallback-buffer)) (message "Can't kill the fallback buffer.") t) ((doom-real-buffer-p buf) diff --git a/modules/app/everywhere/config.el b/modules/app/everywhere/config.el index 885495ede..d0512f754 100644 --- a/modules/app/everywhere/config.el +++ b/modules/app/everywhere/config.el @@ -14,6 +14,10 @@ ;; buffers anyway. (setq-hook! 'emacs-everywhere-init-hooks doom-inhibit-local-var-hooks t) + ;; REVIEW: Fixes tecosaur/emacs-everywhere#75. Remove when dealt with + ;; upstream. + (define-key emacs-everywhere-mode-map "\C-c\C-c" #'emacs-everywhere-finish) + (after! doom-modeline (doom-modeline-def-segment emacs-everywhere (concat diff --git a/modules/checkers/spell/packages.el b/modules/checkers/spell/packages.el index eb2c07269..9226c235c 100644 --- a/modules/checkers/spell/packages.el +++ b/modules/checkers/spell/packages.el @@ -2,7 +2,9 @@ ;;; checkers/spell/packages.el (if (not (modulep! +flyspell)) - (package! spell-fu :pin "e4031935803c66eca2f076dce72b0a6a770d026c") + (package! spell-fu + :recipe (:host github :repo "emacsmirror/spell-fu") + :pin "e4031935803c66eca2f076dce72b0a6a770d026c") (package! flyspell-correct :pin "1e7a5a56362dd875dddf848b9a9e25d1395b9d37") (cond ((modulep! :completion ivy) (package! flyspell-correct-ivy)) diff --git a/modules/checkers/syntax/packages.el b/modules/checkers/syntax/packages.el index bd708b566..a22c59a84 100644 --- a/modules/checkers/syntax/packages.el +++ b/modules/checkers/syntax/packages.el @@ -2,7 +2,7 @@ ;;; checkers/syntax/packages.el (unless (modulep! +flymake) - (package! flycheck :pin "e56e30d8c66ffc9776d07740658d3b542c1a8e21") + (package! flycheck :pin "02148c6ce7edb0fd0986460db327cc9463939747") (package! flycheck-popup-tip :pin "ef86aad907f27ca076859d8d9416f4f7727619c6") (when (modulep! +childframe) (package! flycheck-posframe :pin "19896b922c76a0f460bf3fe8d8ebc2f9ac9028d8"))) diff --git a/modules/completion/vertico/config.el b/modules/completion/vertico/config.el index f5d6b7218..a07078e0f 100644 --- a/modules/completion/vertico/config.el +++ b/modules/completion/vertico/config.el @@ -304,7 +304,8 @@ orderless." (:when (modulep! :tools magit) :desc "Open magit-status of target" "g" #'+vertico/embark-magit-status) (:when (modulep! :ui workspaces) - :desc "Open in new workspace" "TAB" #'+vertico/embark-open-in-new-workspace)))) + :desc "Open in new workspace" "TAB" #'+vertico/embark-open-in-new-workspace + :desc "Open in new workspace" "" #'+vertico/embark-open-in-new-workspace)))) (use-package! marginalia @@ -340,3 +341,43 @@ orderless." :hook (vertico-mode . vertico-posframe-mode) :config (add-hook 'doom-after-reload-hook #'posframe-delete-all)) + +;; From https://github.com/minad/vertico/wiki#candidate-display-transformations-custom-candidate-highlighting +;; +;; Uses `add-face-text-property' instead of `propertize' unlike the above snippet +;; because `'append' is necessary to not override the match font lock +;; See: https://github.com/minad/vertico/issues/389 +(use-package! vertico-multiform + :hook (vertico-mode . vertico-multiform-mode) + :config + (defvar +vertico-transform-functions nil) + + (cl-defmethod vertico--format-candidate :around + (cand prefix suffix index start &context ((not +vertico-transform-functions) null)) + (dolist (fun (ensure-list +vertico-transform-functions)) + (setq cand (funcall fun cand))) + (cl-call-next-method cand prefix suffix index start)) + + (defun +vertico-highlight-directory (file) + "If FILE ends with a slash, highlight it as a directory." + (when (string-suffix-p "/" file) + (add-face-text-property 0 (length file) 'marginalia-file-priv-dir 'append file)) + file) + + (defun +vertico-highlight-enabled-mode (cmd) + "If MODE is enabled, highlight it as font-lock-constant-face." + (let ((sym (intern cmd))) + (with-current-buffer (nth 1 (buffer-list)) + (if (or (eq sym major-mode) + (and + (memq sym minor-mode-list) + (boundp sym))) + (add-face-text-property 0 (length cmd) 'font-lock-constant-face 'append cmd))) + cmd)) + + (add-to-list 'vertico-multiform-categories + '(file + (+vertico-transform-functions . +vertico-highlight-directory))) + (add-to-list 'vertico-multiform-commands + '(execute-extended-command + (+vertico-transform-functions . +vertico-highlight-enabled-mode)))) diff --git a/modules/editor/word-wrap/packages.el b/modules/editor/word-wrap/packages.el index 5b0f9317c..349082221 100644 --- a/modules/editor/word-wrap/packages.el +++ b/modules/editor/word-wrap/packages.el @@ -2,4 +2,6 @@ ;;; editor/word-wrap/packages.el (package! adaptive-wrap :pin "70005d2012ab57c20be03c05aebd49318fe49c99") -(package! visual-fill-column :pin "db7c7c236555c9c684e1294a277efefdc25fa5c4") +(package! visual-fill-column + :recipe (:host github :repo "emacsmirror/visual-fill-column") + :pin "5e74afe39d0afb911dae51af4e7a60ccdf9701f3") diff --git a/modules/emacs/dired/config.el b/modules/emacs/dired/config.el index b23fc20f2..e8dbbfacd 100644 --- a/modules/emacs/dired/config.el +++ b/modules/emacs/dired/config.el @@ -179,6 +179,7 @@ we have to clean it up ourselves." dired-omit-files (concat dired-omit-files "\\|^\\.DS_Store\\'" + "\\|^flycheck_.*" "\\|^\\.project\\(?:ile\\)?\\'" "\\|^\\.\\(?:svn\\|git\\)\\'" "\\|^\\.ccls-cache\\'" diff --git a/modules/lang/clojure/config.el b/modules/lang/clojure/config.el index 832fa659e..96238d2fa 100644 --- a/modules/lang/clojure/config.el +++ b/modules/lang/clojure/config.el @@ -79,6 +79,7 @@ nrepl-log-messages nil cider-font-lock-dynamically '(macro core function var deprecated) cider-overlays-use-font-lock t + cider-print-options '(("length" 100)) cider-prompt-for-symbol nil cider-repl-history-display-duplicates nil cider-repl-history-display-style 'one-line @@ -88,7 +89,6 @@ cider-repl-history-highlight-inserted-item t cider-repl-history-size 1000 cider-repl-result-prefix ";; => " - cider-repl-print-length 100 cider-repl-use-clojure-font-lock t cider-repl-use-pretty-printing t cider-repl-wrap-history nil diff --git a/modules/lang/nix/doctor.el b/modules/lang/nix/doctor.el index 043ce4c8c..fe1b18b35 100644 --- a/modules/lang/nix/doctor.el +++ b/modules/lang/nix/doctor.el @@ -4,8 +4,9 @@ (unless (executable-find "nix") (warn! "Couldn't find the nix package manager. nix-mode won't work.")) -(unless (executable-find "nixfmt") - (warn! "Couldn't find nixfmt. nix-format-buffer won't work.")) +(when (require 'nix-mode nil t) + (unless (executable-find nix-nixfmt-bin) + (warn! (concat "Couldn't find " nix-nixfmt-bin ". nix-format-buffer won't work.")))) (assert! (or (not (modulep! +tree-sitter)) (modulep! :tools tree-sitter)) diff --git a/modules/lang/org/config.el b/modules/lang/org/config.el index 087f95cf6..f88057bf3 100644 --- a/modules/lang/org/config.el +++ b/modules/lang/org/config.el @@ -181,9 +181,6 @@ Is relative to `org-directory', unless it is absolute. Is used in Doom's default ("NO" . +org-todo-cancel) ("KILL" . +org-todo-cancel))) - ;; Automatic indent detection in org files is meaningless - (add-to-list 'doom-detect-indentation-excluded-modes 'org-mode) - (set-ligatures! 'org-mode :name "#+NAME:" :name "#+name:" @@ -1438,6 +1435,11 @@ between the two." :references #'+org-lookup-references-handler :documentation #'+org-lookup-documentation-handler) + ;; HACK: Somehow, users/packages still find a way to modify tab-width in + ;; org-mode. Since org-mode treats a non-standerd tab-width as an error + ;; state, I use this hook to makes it much harder to change by accident. + (add-hook! 'org-mode-hook :depth 110 (setq-local tab-width 8)) + ;; Save target buffer after archiving a node. (setq org-archive-subtree-save-file-p t) diff --git a/modules/lang/rust/packages.el b/modules/lang/rust/packages.el index c092f3ae3..7d85ffe26 100644 --- a/modules/lang/rust/packages.el +++ b/modules/lang/rust/packages.el @@ -1,5 +1,5 @@ ;; -*- no-byte-compile: t; -*- ;;; lang/rust/packages.el -(package! rust-mode :pin "f74dd1cd87987ea7faf0cfc6240c2284ef9133cb") +(package! rust-mode :pin "d8a09f218e24407acbc9f36c641be4f913f1a63c") (package! rustic :pin "39423d1cf4fa054c36bf9577356451f4c06ee148") diff --git a/modules/tools/biblio/config.el b/modules/tools/biblio/config.el index a37263e7e..61caf6677 100644 --- a/modules/tools/biblio/config.el +++ b/modules/tools/biblio/config.el @@ -3,9 +3,7 @@ ;; ;;; `org-cite' -(use-package! oc - :defer t - :config +(after! oc (setq org-cite-global-bibliography (ensure-list (or (bound-and-true-p citar-bibliography) @@ -13,16 +11,30 @@ ;; Setup export processor; default csl/citeproc-el, with biblatex for ;; latex org-cite-export-processors '((latex biblatex) (t csl)) - org-support-shift-select t)) + org-support-shift-select t) + + (require 'oc-biblatex)) + +;; oc-csl requires citeproc, which requires the top-level org, so loading oc-csl +;; after oc interferes with incremental loading of Org +(after! org (require 'oc-csl)) (use-package! citar :when (modulep! :completion vertico) - :no-require - :config + :defer t + :init (setq org-cite-insert-processor 'citar org-cite-follow-processor 'citar org-cite-activate-processor 'citar) + + :config + (after! embark + (citar-embark-mode)) + + (after! org-roam + (citar-org-roam-mode)) + (when (modulep! :completion vertico +icons) (defvar citar-indicator-files-icons (citar-indicator-create @@ -65,22 +77,6 @@ citar-indicator-notes-icons citar-indicator-cited-icons)))) -(use-package! citar-embark - :when (modulep! :completion vertico) - :after citar embark - :config (citar-embark-mode)) - -(use-package! citar-org-roam - :when (and (modulep! +roam2) - (modulep! :completion vertico)) - :after citar org-roam - :config (citar-org-roam-mode)) - -;; `org-cite' processors -(use-package! oc-biblatex :after oc) -(use-package! oc-csl :after oc) -(use-package! oc-natbib :after oc) - ;; ;;; Third-party diff --git a/modules/tools/lsp/packages.el b/modules/tools/lsp/packages.el index a0adf1a2d..c8c0f44b0 100644 --- a/modules/tools/lsp/packages.el +++ b/modules/tools/lsp/packages.el @@ -3,13 +3,13 @@ (if (modulep! +eglot) (progn - (package! eglot :pin "cd4e45b700b117d360aac24d749c3c4a4be3d2e2") + (package! eglot :pin "24f2bf7b28c33e1d677b547956ade5560d27f55f") (when (modulep! :completion vertico) (package! consult-eglot :pin "049c6319b8a48ff66189d49592c7759f0b356596")) (when (and (modulep! :checkers syntax) (not (modulep! :checkers syntax +flymake))) - (package! flycheck-eglot :pin "9ff8d0068be59b1450964b390349d75a68af21ed"))) - (package! lsp-mode :pin "fb88cc6b8bcad4df5dd1d4e5d785adc7663e5c76") + (package! flycheck-eglot :pin "114e1315aaf0dc3196da67da426bbe2b46384fe2"))) + (package! lsp-mode :pin "a5f5ca9a8a4b2ceaf236457bf2524f94c183c2f2") (package! lsp-ui :pin "bc58c6664577d1d79060c6b32b7ad20e70ee19d0") (when (modulep! :completion ivy) (package! lsp-ivy :pin "9ecf4dd9b1207109802bd1882aa621eb1c385106")) diff --git a/modules/tools/magit/packages.el b/modules/tools/magit/packages.el index 726e6fa6d..6bc86d4e5 100644 --- a/modules/tools/magit/packages.el +++ b/modules/tools/magit/packages.el @@ -1,12 +1,12 @@ ;; -*- no-byte-compile: t; -*- ;;; tools/magit/packages.el -(when (package! magit :pin "b68e0a3c3388af8daac662f25ccfd3e980590e12") +(when (package! magit :pin "65ecb9c5fc7586a1c527b60d180a97ea230da99f") (when (modulep! +forge) - (package! forge :pin "3fc6c362b0162082317c128c9c3226529f6965ae") + (package! forge :pin "03b48be2a12a282cd47b92287fc1701a81f1cece") (package! code-review :recipe (:host github :repo "doomelpa/code-review" :files ("graphql" "code-review*.el")) - :pin "2670a4beb6636e6ee596c5b7cb5e784cf33d5a98")) - (package! magit-todos :pin "debb77b3589f2d83c8b43706edc1f8f90bf1ad91")) + :pin "e4c34fa284da25d8e0bafbae4300f1db5bdcda44")) + (package! magit-todos :pin "1e9acc0ba63fbc297001bf334d63cb4326be80df"))