Files
doom/config.org
Zelong Kuang 8d3363cc38 feat(packages): Add gptel and org-habit
- Configure gptel to use the Gemini 2.5 Pro model via the GitHub Copilot backend.
- Enable the org-habit module for habit tracking in Org mode.
2025-12-05 03:52:26 +11:00

10 KiB

Benchmark

;; (package! benchmark-init)
;; (use-package! benchmark-init
;;   :ensure t
;;   :config
;;   ;; To disable collection of benchmark data after init is done.
;;   (add-hook 'after-init-hook 'benchmark-init/deactivate))

My doom config

Appearance settings

(pcase system-type
  ('darwin  ; macOS
   (setq doom-font (font-spec :family "Maple Mono" :size 20))
   (add-to-list 'default-frame-alist '(height . 53))
   (add-to-list 'default-frame-alist '(width . 120)))
  
  ('gnu/linux  ; Linux (including Debian)
   (setq doom-font (font-spec :family "Maple Mono" :size 24))  ; 20 * 1.5
   (add-to-list 'default-frame-alist '(height . 40))
   (add-to-list 'default-frame-alist '(width . 100))))

(setq catppuccin-flavor 'catppuccin)
(setq doom-theme 'modus-vivendi)
(setq display-line-numbers-type 'relative)
(setq org-directory "~/org/")

Meow cursor

(use-package! meow
  :init
  (setq meow-cursor-type-normal 'box))

Themes

(package! catppuccin-theme)
ef-themes
;; (package! ef-themes)
;; (use-package! ef-themes
;;   :ensure t
;;   :init
;;   ;; This makes the Modus commands listed below consider only the Ef
;;   ;; themes.  For an alternative that includes Modus and all
;;   ;; derivative themes (like Ef), enable the
;;   ;; `modus-themes-include-derivatives-mode' instead.  The manual of
;;   ;; the Ef themes has a section that explains all the possibilities:
;;   ;;
;;   ;; - Evaluate `(info "(ef-themes) Working with other Modus themes or taking over Modus")'
;;   ;; - Visit <https://protesilaos.com/emacs/ef-themes#h:6585235a-5219-4f78-9dd5-6a64d87d1b6e>
;;   (ef-themes-take-over-modus-themes-mode 1)
;;   :bind
;;   (("<f5>" . modus-themes-rotate)
;;    ("C-<f5>" . modus-themes-select)
;;    ("M-<f5>" . modus-themes-load-random))
;;   :config
;;   ;; All customisations here.
;;   (setq modus-themes-mixed-fonts t)
;;   (setq modus-themes-italic-constructs t)

;; ;;   ;; Finally, load your theme of choice (or a random one with
;; ;;   ;; `modus-themes-load-random', `modus-themes-load-random-dark',
;; ;;   ;; `modus-themes-load-random-light').
;; ;;   (modus-themes-load-theme 'ef-light)
;;   )

Nano modeline

(package! nano-modeline)
(use-package! nano-modeline
  :config
  (add-hook 'prog-mode-hook            #'nano-modeline-prog-mode)
  (add-hook 'text-mode-hook            #'nano-modeline-text-mode)
  (add-hook 'org-mode-hook             #'nano-modeline-org-mode)
  (add-hook 'pdf-view-mode-hook        #'nano-modeline-pdf-mode)
  (add-hook 'mu4e-headers-mode-hook    #'nano-modeline-mu4e-headers-mode)
  (add-hook 'mu4e-view-mode-hook       #'nano-modeline-mu4e-message-mode)
  (add-hook 'elfeed-show-mode-hook     #'nano-modeline-elfeed-entry-mode)
  (add-hook 'elfeed-search-mode-hook   #'nano-modeline-elfeed-search-mode)
  (add-hook 'term-mode-hook            #'nano-modeline-term-mode)
  (add-hook 'xwidget-webkit-mode-hook  #'nano-modeline-xwidget-mode)
  (add-hook 'messages-buffer-mode-hook #'nano-modeline-message-mode)
  (add-hook 'org-capture-mode-hook     #'nano-modeline-org-capture-mode)
  (add-hook 'org-agenda-mode-hook      #'nano-modeline-org-agenda-mode)
  (global-hide-mode-line-mode t))

Plugins

Yasnippet

Thisenables the feature of auto-expanding snippets when matching the pattern

(use-package! yasnippet
  :config
  (defun my-yas-try-expanding-auto-snippets ()
    (when yas-minor-mode
      (let ((yas-buffer-local-condition ''(require-snippet-condition . auto)))
        (yas-expand))))
  (add-hook 'post-command-hook #'my-yas-try-expanding-auto-snippets)
  )

Rainbow delimiters

(package! rainbow-delimiters)
(use-package! rainbow-delimiters
    :hook ((prog-mode . rainbow-delimiters-mode)
           (typst-ts-mode . rainbow-delimiters-mode)
           (foo-mode . rainbow-delimiters-mode)))

Leetcode

(package! leetcode)

gptel

(use-package! gptel
    :config
    (setq! gptel-api-key "e994f45f9b46cc8608bd2e9cd508417255514e96913b1764aab612512aa66449")
    (setq gptel-model 'claude-sonnet-4.5)
    (setq gptel-backend (gptel-make-gh-copilot "Copilot"))
    )
t

Lang

Typst

Tree-sitter
(package! typst-ts-mode :recipe (:host codeberg :repo "meow_king/typst-ts-mode"))
(use-package! typst-ts-mode
  :init
  (add-hook 'typst-ts-mode-hook #'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))
Tinymist (lsp)
(with-eval-after-load 'eglot
  (with-eval-after-load 'typst-ts-mode
    (add-to-list 'eglot-server-programs
                 `((typst-ts-mode) .
                   ,(eglot-alternatives `(,"tinymist"
                                          "typst-lsp"))))))
Live-preview
(package! typst-preview
  :recipe (:host github :repo "havarddj/typst-preview.el"))
Config
(use-package! websocket)
(use-package! typst-preview
  ;; :load-path "path/to/typst-preview.el" ;; if installed manually
  :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

  :custom
  (typst-preview-browser "default") ; this is the default option; other options are `eaf-browser' or `xwidget'.
  (typst-preview-invert-colors "auto") ; invert colors depending on system theme
  (typst-preview-executable "tinymist") ; path to tinymist binary (relative or absolute)
  (typst-preview-partial-rendering t)   ; enable partial rendering

  :config
  (define-key typst-preview-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)
  )

Latex

TeXpresso
(load-file "lisp/texpresso/texpresso.el")

Org

(add-to-list 'org-modules 'org-habit)
Latex live-preview (fast)
  1. delete all org-* packages from emacs (can be done by deleting folders in .local/straight)
  2. delete eln-cache
  3. doom sync -u
(package! org :recipe
  (:host nil :repo "https://git.tecosaur.net/mirrors/org-mode.git" :remote "mirror" :fork
   (:host nil :repo "https://git.tecosaur.net/tec/org-mode.git" :branch "dev" :remote "tecosaur")
   :files
   (:defaults "etc")
   :build t :pre-build
   (with-temp-file "org-version.el"
     (require 'lisp-mnt)
     (let
         ((version
           (with-temp-buffer
             (insert-file-contents "lisp/org.el")
             (lm-header "version")))
          (git-version
           (string-trim
            (with-temp-buffer
              (call-process "git" nil t nil "rev-parse" "--short" "HEAD")
              (buffer-string)))))
       (insert
        (format "(defun org-release () \"The release version of Org.\" %S)\n" version)
        (format "(defun org-git-version () \"The truncate git commit hash of Org mode.\" %S)\n" git-version)
        "(provide 'org-version)\n"))))
  :pin nil)
(unpin! org)
(use-package org-latex-preview
  :hook ((org-mode . org-latex-preview-mode)
         (org-latex-preview-mode . org-latex-preview-center-mode))
  :config
  ;; Increase preview width
  ;; (plist-put org-latex-preview-appearance-options
  ;;            :page-width 0.8)

  ;; ;; Enable consistent equation numbering
  (setq org-latex-preview-numbered t)

  ;; Bonus: Turn on live previews.  This shows you a live preview of a LaTeX
  ;; fragment and updates the preview in real-time as you edit it.
  ;; To preview only environments, set it to '(block edit-special) instead
  (setq org-latex-preview-mode-display-live t)

  ;; More immediate live-previews -- the default delay is 1 second
  (setq org-latex-preview-mode-update-delay 0)

  ;; code for centering LaTeX previews -- a terrible idea
  (defun my/org-latex-preview-uncenter (ov)
    (overlay-put ov 'before-string nil))
  (defun my/org-latex-preview-recenter (ov)
    (overlay-put ov 'before-string (overlay-get ov 'justify)))
  (defun my/org-latex-preview-center (ov)
    (save-excursion
      (goto-char (overlay-start ov))
      (when-let* ((elem (org-element-context))
                  ((or (eq (org-element-type elem) 'latex-environment)
                       (string-match-p "^\\\\\\[" (org-element-property :value elem))))
                  (img (overlay-get ov 'display))
                  (prop `(space :align-to (- center (0.55 . ,img))))
                  (justify (propertize " " 'display prop 'face 'default)))
        (overlay-put ov 'justify justify)
        (overlay-put ov 'before-string (overlay-get ov 'justify)))))
  (define-minor-mode org-latex-preview-center-mode
    "Center equations previewed with `org-latex-preview'."
    :global nil
    (if org-latex-preview-center-mode
        (progn
          (add-hook 'org-latex-preview-overlay-open-functions
                    #'my/org-latex-preview-uncenter nil :local)
          (add-hook 'org-latex-preview-overlay-close-functions
                    #'my/org-latex-preview-recenter nil :local)
          (add-hook 'org-latex-preview-overlay-update-functions
                    #'my/org-latex-preview-center nil :local))
      (remove-hook 'org-latex-preview-overlay-close-functions
                    #'my/org-latex-preview-recenter)
      (remove-hook 'org-latex-preview-overlay-update-functions
                    #'my/org-latex-preview-center)
      (remove-hook 'org-latex-preview-overlay-open-functions
                    #'my/org-latex-preview-uncenter)))
  )

hello