Files
doom/config.org
2025-11-17 16:07:41 +11:00

6.3 KiB

My doom config

Appearance settings

(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))
(setq catppuccin-flavor 'mocha)
(setq doom-theme 'catppuccin)
(setq display-line-numbers-type 'relative)
(setq org-directory "~/org/")

Themes

Catppuccin
(package! catppuccin-theme)

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)
)

Eat (deprecated)

(package! eat
    :recipe (:type git
            :host codeberg
            :repo "akib/emacs-eat"
            :files ("*.el" ("term" "term/*.el") "*.texi"
                    "*.ti" ("terminfo/e" "terminfo/e/*")
                    ("terminfo/65" "terminfo/65/*")
                    ("integration" "integration/*")
                    (:exclude ".dir-locals.el" "*-tests.el"))))

Fix the issue that backspace doesn't work on mac

(after! eat
    (when (eq system-type 'darwin)
        (define-key eat-semi-char-mode-map (kbd "C-h")  #'eat-self-input)
        (define-key eat-semi-char-mode-map (kbd "<backspace>") (kbd "C-h"))))

Copilot

(package! copilot
    :recipe (:host github :repo "copilot-emacs/copilot.el" :files ("*.el")))

Configuration

;; accept completion from copilot and fallback to company
(use-package! copilot
    :hook (prog-mode . copilot-mode)
    :bind (:map copilot-completion-map
                ("<tab>" . 'copilot-accept-completion)
                ("TAB" . 'copilot-accept-completion)
                ("C-TAB" . 'copilot-accept-completion-by-word)
                ("C-<tab>" . 'copilot-accept-completion-by-word)
                ("C-n" . 'copilot-next-completion)
                ("C-p" . 'copilot-previous-completion))

    :config
    (add-to-list 'copilot-indentation-alist '(prog-mode 2))
    (add-to-list 'copilot-indentation-alist '(org-mode 2))
    (add-to-list 'copilot-indentation-alist '(text-mode 2))
    (add-to-list 'copilot-indentation-alist '(clojure-mode 2))
    (add-to-list 'copilot-indentation-alist '(emacs-lisp-mode 2)))

LLM (gptel)

(package! gptel :recipe (:nonrecursive t))
(use-package! gptel
    :config
    (setq! gptel-api-key "e994f45f9b46cc8608bd2e9cd508417255514e96913b1764aab612512aa66449")
    (setq gptel-model 'gpt-5)
    (setq gptel-backend (gptel-make-gh-copilot "Copilot"))
    (map! "M-s RET" #'gptel-send)
    (map! "M-s m" #'gptel-menu)
    )

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

(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
  :hook (org-mode . org-latex-preview-mode))