diff --git a/early-init.el b/early-init.el index f1993d5..f5a97b8 100644 --- a/early-init.el +++ b/early-init.el @@ -1,19 +1,32 @@ ;; -*- lexical-binding: t -*- - (setq gc-cons-threshold most-positive-fixnum) +(add-to-list 'load-path (expand-file-name "lisp/" user-emacs-directory)) +(require 'init-elpaca) +(require 'init-gc) (setq package-enable-at-startup nil) - (setq use-package-enable-imenu-support t) - (setq load-prefer-newer noninteractive) (prefer-coding-system 'utf-8) ;; Inhibit resizing frame (setq frame-inhibit-implied-resize t) +;; Optimize `auto-mode-alist` +(setq auto-mode-case-fold nil) +(unless (or (daemonp) noninteractive init-file-debug) + ;; Temporarily suppress file-handler processing to speed up startup + (let ((default-handlers file-name-handler-alist)) + (setq file-name-handler-alist nil) + ;; Recover handlers after startup + (add-hook 'emacs-startup-hook + (lambda () + (setq file-name-handler-alist + (delete-dups (append file-name-handler-alist default-handlers)))) + 101))) + ;; Faster to disable these here (before they've been initialized) (push '(menu-bar-lines . 0) default-frame-alist) (push '(tool-bar-lines . 0) default-frame-alist) diff --git a/init.el b/init.el index 2898fcf..28fe0e0 100644 --- a/init.el +++ b/init.el @@ -1,25 +1,5 @@ ;; -*- lexical-binding: t -*- -;; Optimize Garbage Collection for Startup -(setq gc-cons-threshol 33554432) - -;; Optimize `auto-mode-alist` -(setq auto-mode-case-fold nil) -(unless (or (daemonp) noninteractive init-file-debug) - ;; Temporarily suppress file-handler processing to speed up startup - (let ((default-handlers file-name-handler-alist)) - (setq file-name-handler-alist nil) - ;; Recover handlers after startup - (add-hook 'emacs-startup-hook - (lambda () - (setq file-name-handler-alist - (delete-dups (append file-name-handler-alist default-handlers)))) - 101))) - - -(add-to-list 'load-path (expand-file-name "lisp/" user-emacs-directory)) -(require 'init-elpaca) - (require 'init-better-default) (require 'init-completion) (require 'init-meow) @@ -28,7 +8,7 @@ (require 'init-bindings) (require 'init-dired) -(require 'init-dashboard) +;; (require 'init-dashboard) (require 'init-llm) diff --git a/lisp/init-better-default.el b/lisp/init-better-default.el index 72e917a..348446c 100644 --- a/lisp/init-better-default.el +++ b/lisp/init-better-default.el @@ -1,11 +1,19 @@ ;; -*- lexical-binding: t -*- -(add-hook 'prog-mode-hook #'display-line-numbers-mode) -(add-hook 'org-mode-hook #'display-line-numbers-mode) +(use-package benchmark-init + :ensure t + :demand t + :config + ;; To disable collection of benchmark data after init is done. + (add-hook 'elpaca-after-init-hook 'benchmark-init/deactivate)) + +(server-mode 1) +(global-display-line-numbers-mode) (setq-default cursor-type 'bar) (setq display-line-numbers-type 'relative) (show-paren-mode t) (recentf-mode 1) +(setq recentf-max-saved-items 500) (setq make-backup-files nil) (setq custom-file (expand-file-name "~/.emacs.d/custom.el")) (load custom-file 'no-error 'no-message) @@ -31,7 +39,7 @@ ;; Interactively insert and edit items from kill-ring (use-package browse-kill-ring - :hook (after-init . browse-kill-ring-default-keybindings) + :hook (elpaca-after-init . browse-kill-ring-default-keybindings) :init (setq browse-kill-ring-separator "────────────────" browse-kill-ring-separator-face 'shadow)) @@ -46,14 +54,7 @@ :init (setq scroll-conservatively 3 scroll-margin 0) - :config - (ultra-scroll-mode 1)) - -(use-package benchmark-init - :ensure t - :demand t - :config - ;; To disable collection of benchmark data after init is done. - (add-hook 'after-init-hook 'benchmark-init/deactivate)) + :hook (elpaca-after-init . ultra-scroll-mode)) + (provide 'init-better-default) diff --git a/lisp/init-coding.el b/lisp/init-coding.el index f2e977d..ca3c5ae 100644 --- a/lisp/init-coding.el +++ b/lisp/init-coding.el @@ -3,7 +3,6 @@ (use-package transient) (use-package magit - :defer :config (setq magit-show-long-lines-warning nil)) @@ -18,17 +17,15 @@ ;; ) (use-package vterm - :defer :bind ("C-\\" . vterm)) (use-package editorconfig :diminish - :hook after-init) + :hook elpaca-after-init) (use-package yaml-mode) ;; Fish shell mode and auto-formatting (use-package fish-mode - :defer t :commands fish_indent-before-save :defines eglot-server-programs :hook (fish-mode . (lambda () @@ -43,4 +40,11 @@ (use-package leetcode) +(use-package treesit-auto + :hook (elpaca-after-init . treesit-auto-mode) + :custom + (treesit-auto-install 'prompt) + :config + (treesit-auto-add-to-auto-mode-alist 'all)) + (provide 'init-coding) diff --git a/lisp/init-completion.el b/lisp/init-completion.el index 7d32ef6..001ba51 100644 --- a/lisp/init-completion.el +++ b/lisp/init-completion.el @@ -55,8 +55,9 @@ ("RET" . vertico-directory-enter) ("DEL" . vertico-directory-delete-char) ("M-DEL" . vertico-directory-delete-word)) - :init - (vertico-mode t)) + :hook (elpaca-after-init . vertico-mode) + :hook (rfn-eshadow-update-overlay . vertico-directory-tidy)) + ;; (use-package vertico-posframe ;; :after vertico @@ -101,14 +102,12 @@ ;; Enrich existing commands with completion annotations (use-package marginalia - :init - (marginalia-mode)) + :hook (elpaca-after-init . marginalia-mode)) + ;; Add icons to completion candidates (use-package nerd-icons-completion - :hook (marginalia-mode . nerd-icons-completion-marginalia-setup) - :init - (nerd-icons-completion-mode)) + :hook (marginalia-mode . nerd-icons-completion-marginalia-setup)) ;; Consulting completing-read (use-package consult @@ -120,13 +119,22 @@ :functions (list-colors-duplicates consult-colors--web-list) :bind (("C-." . consult-imenu) ("C-c T" . consult-theme) - + + ([remap Info-search] . consult-info) + ;; ([remap isearch-forward] . consult-line) + ([remap recentf-open-files] . consult-recent-file) + + ("s-f" . consult-line) ("C-c s s" . consult-line) ("C-c p f" . consult-project-buffer) ("C-c f r" . consult-recent-file) ("C-x C-b" . consult-buffer) - ("C-c s p" . consult-ripgrep))) + ("C-c s p" . consult-ripgrep)) + :hook (completion-list-mode . consult-preview-at-point-mode) + :init + (setq register-preview-delay 0.5 + register-preview-function #'consult-register-format)) (use-package consult-dir @@ -180,7 +188,16 @@ :config ;;Quit completion before saving (add-hook 'before-save-hook #'corfu-quit) - (advice-add #'persistent-scratch-save :before #'corfu-quit)) + (advice-add #'persistent-scratch-save :before #'corfu-quit) + (defun corfu-move-to-minibuffer () + (interactive) + (pcase completion-in-region--data + (`(,beg ,end ,table ,pred ,extras) + (let ((completion-extra-properties extras) + completion-cycle-threshold completion-cycling) + (consult-completion-in-region beg end table pred))))) + (keymap-set corfu-map "M-m" #'corfu-move-to-minibuffer) + (add-to-list 'corfu-continue-commands #'corfu-move-to-minibuffer)) (use-package nerd-icons-corfu :init @@ -212,6 +229,9 @@ (read-extended-command-predicate #'command-completion-default-include-p)) (use-package cape + :commands (cape-file cape-elisp-block cape-keyword) + :autoload (cape-wrap-noninterruptible cape-wrap-nonexclusive cape-wrap-buster) + :autoload (cape-wrap-silent) :init ;; Add `completion-at-point-functions', used by `completion-at-point'. ;; (add-to-list 'completion-at-point-functions #'cape-dabbrev) diff --git a/lisp/init-dashboard.el b/lisp/init-dashboard.el index 06aea01..b20ae5e 100644 --- a/lisp/init-dashboard.el +++ b/lisp/init-dashboard.el @@ -9,6 +9,9 @@ (dashboard-items-face ((t (:weight normal)))) (dashboard-no-items-face ((t (:weight normal)))) :hook (dashboard-mode . (lambda () (setq-local frame-title-format nil))) + :config + (add-hook 'elpaca-after-init-hook #'dashboard-insert-startupify-lists) + (add-hook 'elpaca-after-init-hook #'dashboard-initialize) :init (setq dashboard-banner-logo-title "ZEMACS - Enjoy Programming & Writing" ;; dashboard-page-separator "\n\f\n" @@ -31,7 +34,6 @@ dashboard-insert-init-info dashboard-insert-items dashboard-insert-newline - dashboard-insert-footer)) - - (dashboard-setup-startup-hook)) + dashboard-insert-footer))) + (provide 'init-dashboard) diff --git a/lisp/init-edit.el b/lisp/init-edit.el index 50c2bda..fb8b63c 100644 --- a/lisp/init-edit.el +++ b/lisp/init-edit.el @@ -11,19 +11,19 @@ (add-hook 'text-mode-hook #'electric-pair-mode) (use-package winum - :init - (winum-mode) + :hook (elpaca-after-init . winum-mode) :config (winum-set-keymap-prefix (kbd "C-c w"))) ;; Yasnippet settings (use-package yasnippet :ensure t + :hook (elpaca-after-init . yas-global-mode) :hook ((LaTeX-mode . yas-minor-mode) (post-self-insert . my/yas-try-expanding-auto-snippets)) :config - (yas-global-mode) (use-package warnings + :ensure nil :config (cl-pushnew '(yasnippet backquote-change) warning-suppress-types diff --git a/lisp/init-gc.el b/lisp/init-gc.el new file mode 100644 index 0000000..99f93c2 --- /dev/null +++ b/lisp/init-gc.el @@ -0,0 +1,10 @@ +;; -*- lexical-binding: t; -*- + + +(use-package gcmh + :init + (gcmh-mode 1) + :config + (setq gcmh-high-cons-threshold #x6400000)) + +(provide 'init-gc) diff --git a/lisp/init-haskell.el b/lisp/init-haskell.el index ee44097..85edcae 100644 --- a/lisp/init-haskell.el +++ b/lisp/init-haskell.el @@ -8,8 +8,6 @@ :config (setq haskell-process-suggest-remove-import-lines t haskell-process-auto-import-loaded-modules t) - (add-hook 'haskell-mode-local-vars-hook #'lsp! 'append) - (add-hook 'haskell-literate-mode-local-vars-hook #'lsp! 'append) (add-to-list 'completion-ignored-extensions ".hi") ) diff --git a/lisp/init-meow.el b/lisp/init-meow.el index 057182f..faec6d8 100644 --- a/lisp/init-meow.el +++ b/lisp/init-meow.el @@ -85,11 +85,9 @@ (use-package meow :demand t - :init - (meow-global-mode 1) + :hook (elpaca-after-init . meow-global-mode) :config (meow-setup) - (setq meow-cursor-type-normal 'bar) - ) + (setq meow-cursor-type-normal 'bar)) (provide 'init-meow) diff --git a/lisp/init-typst.el b/lisp/init-typst.el index d8a1f87..8db0459 100644 --- a/lisp/init-typst.el +++ b/lisp/init-typst.el @@ -3,16 +3,24 @@ (use-package typst-ts-mode :ensure (:type git :host codeberg :repo "meow_king/typst-ts-mode") + :hook (typst-ts-mode . eglot-ensure) :custom ;; (typst-ts-watch-options "--open") (typst-ts-mode-grammar-location (expand-file-name "tree-sitter/libtree-sitter-typst.so" user-emacs-directory)) (typst-ts-mode-enable-raw-blocks-highlight t) :config - (keymap-set typst-ts-mode-map "C-c C-c" #'typst-ts-tmenu)) + (keymap-set typst-ts-mode-map "C-c C-c" #'typst-ts-tmenu) + (with-eval-after-load 'eglot + (with-eval-after-load 'typst-ts-mode + (add-to-list 'eglot-server-programs + `((typst-ts-mode) . + ,(eglot-alternatives `(,typst-ts-lsp-download-path + "tinymist" + "typst-lsp"))))))) (use-package typst-preview :ensure (:type git :host github :repo "havarddj/typst-preview.el") - :init + :init (setq typst-preview-autostart t) ; start preview automatically when typst-preview-mode is activated (setq typst-preview-open-browser-automatically t) ; open browser automatically when typst-preview-start is run @@ -24,7 +32,8 @@ :config (define-key typst-ts-mode-map (kbd "C-c C-j") 'typst-preview-send-position) - (define-key typst-ts-mode-map (kbd "C-c C-l") #'typst-preview-mode) - ) + (define-key typst-ts-mode-map (kbd "C-c C-l") #'typst-preview-mode)) + + (provide 'init-typst) diff --git a/lisp/init-ui.el b/lisp/init-ui.el index 50762ce..938ab66 100644 --- a/lisp/init-ui.el +++ b/lisp/init-ui.el @@ -12,7 +12,7 @@ frame-resize-pixelwise t) (use-package solaire-mode - :hook (after-init . solaire-global-mode)) + :hook (elpaca-after-init . solaire-global-mode)) (use-package ef-themes :ensure t :init @@ -45,7 +45,9 @@ (foo-mode . rainbow-delimiters-mode))) (use-package doom-modeline - :init (doom-modeline-mode 1)) + :hook (elpaca-after-init . doom-modeline-mode)) +(use-package minions + :hook elpaca-after-init) (use-package hide-mode-line :autoload turn-off-hide-mode-line-mode @@ -88,7 +90,7 @@ ;; Easily adjust the font size in all frames (use-package default-text-scale - :hook (after-init . default-text-scale-mode) + :hook (elpaca-after-init . default-text-scale-mode) :bind (:map default-text-scale-mode-map ("s-=" . default-text-scale-increase) ("s--" . default-text-scale-decrease)