2025-11-18 18:48:05 +11:00
|
|
|
* Benchmark
|
|
|
|
|
#+begin_src emacs-lisp :tangle packages.el
|
|
|
|
|
;; (package! benchmark-init)
|
|
|
|
|
#+end_src
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
;; (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))
|
|
|
|
|
#+end_src
|
2025-11-16 15:47:31 +11:00
|
|
|
* My doom config
|
2025-12-06 15:31:50 +11:00
|
|
|
** Meow
|
2025-12-06 14:47:52 +11:00
|
|
|
#+begin_src emacs-lisp
|
2025-12-06 15:31:50 +11:00
|
|
|
(setf meow-expand-hint-remove-delay 0)
|
2025-12-06 14:47:52 +11:00
|
|
|
#+end_src
|
2025-11-16 15:47:31 +11:00
|
|
|
** Appearance settings
|
2025-11-16 20:46:00 +11:00
|
|
|
|
2025-11-16 15:47:31 +11:00
|
|
|
#+begin_src emacs-lisp
|
2025-11-22 00:22:58 +11:00
|
|
|
(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)
|
2025-12-04 23:01:56 +11:00
|
|
|
(setq doom-font (font-spec :family "Maple Mono" :size 24)) ; 20 * 1.5
|
|
|
|
|
(add-to-list 'default-frame-alist '(height . 40))
|
2025-11-22 00:22:58 +11:00
|
|
|
(add-to-list 'default-frame-alist '(width . 100))))
|
2025-12-04 23:01:56 +11:00
|
|
|
|
2025-11-17 20:44:54 +11:00
|
|
|
(setq catppuccin-flavor 'catppuccin)
|
2025-12-06 22:50:42 +11:00
|
|
|
(setq doom-theme 'ef-dark)
|
2025-11-16 15:47:31 +11:00
|
|
|
(setq display-line-numbers-type 'relative)
|
|
|
|
|
(setq org-directory "~/org/")
|
|
|
|
|
#+end_src
|
2025-11-17 20:44:54 +11:00
|
|
|
|
2025-11-16 20:46:00 +11:00
|
|
|
*** Themes
|
|
|
|
|
#+begin_src emacs-lisp :tangle packages.el
|
|
|
|
|
(package! catppuccin-theme)
|
|
|
|
|
#+end_src
|
2025-11-18 18:48:05 +11:00
|
|
|
**** ef-themes
|
|
|
|
|
#+begin_src emacs-lisp :tangle packages.el
|
2025-12-06 22:50:42 +11:00
|
|
|
(package! ef-themes)
|
2025-11-18 18:48:05 +11:00
|
|
|
#+end_src
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
;; (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)
|
|
|
|
|
;; )
|
|
|
|
|
#+end_src
|
2025-11-17 20:44:54 +11:00
|
|
|
*** Nano modeline
|
2025-12-05 19:17:15 +11:00
|
|
|
#+begin_src emacs-lisp :tangle no
|
2025-11-17 20:44:54 +11:00
|
|
|
(package! nano-modeline)
|
|
|
|
|
#+end_src
|
2025-12-05 19:17:15 +11:00
|
|
|
#+begin_src emacs-lisp :tangle no
|
2025-11-17 20:44:54 +11:00
|
|
|
(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))
|
|
|
|
|
#+end_src
|
2025-11-16 15:47:31 +11:00
|
|
|
** Plugins
|
|
|
|
|
*** Yasnippet
|
2025-11-17 01:34:12 +11:00
|
|
|
Thisenables the feature of auto-expanding snippets when matching the pattern
|
|
|
|
|
|
2025-11-16 15:47:31 +11:00
|
|
|
#+begin_src emacs-lisp
|
2025-11-16 22:05:10 +11:00
|
|
|
(use-package! yasnippet
|
2025-11-17 20:44:54 +11:00
|
|
|
: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)
|
|
|
|
|
)
|
2025-11-16 15:47:31 +11:00
|
|
|
#+end_src
|
|
|
|
|
|
2025-11-18 18:48:05 +11:00
|
|
|
*** Rainbow delimiters
|
|
|
|
|
#+begin_src emacs-lisp :tangle packages.el
|
|
|
|
|
(package! rainbow-delimiters)
|
|
|
|
|
#+end_src
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(use-package! rainbow-delimiters
|
|
|
|
|
:hook ((prog-mode . rainbow-delimiters-mode)
|
|
|
|
|
(typst-ts-mode . rainbow-delimiters-mode)
|
|
|
|
|
(foo-mode . rainbow-delimiters-mode)))
|
|
|
|
|
#+end_src
|
2025-11-21 01:05:13 +11:00
|
|
|
*** Leetcode
|
|
|
|
|
#+begin_src emacs-lisp :tangle packages.el
|
|
|
|
|
(package! leetcode)
|
|
|
|
|
#+end_src
|
2025-12-05 03:46:58 +11:00
|
|
|
*** gptel
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(use-package! gptel
|
|
|
|
|
:config
|
|
|
|
|
(setq! gptel-api-key "e994f45f9b46cc8608bd2e9cd508417255514e96913b1764aab612512aa66449")
|
|
|
|
|
(setq gptel-model 'claude-sonnet-4.5)
|
|
|
|
|
(setq gptel-backend (gptel-make-gh-copilot "Copilot"))
|
|
|
|
|
)
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
#+RESULTS:
|
|
|
|
|
: t
|
|
|
|
|
|
2025-11-16 19:12:34 +11:00
|
|
|
** Lang
|
|
|
|
|
*** Typst
|
|
|
|
|
**** Tree-sitter
|
|
|
|
|
#+begin_src emacs-lisp :tangle packages.el
|
|
|
|
|
(package! typst-ts-mode :recipe (:host codeberg :repo "meow_king/typst-ts-mode"))
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(use-package! typst-ts-mode
|
2025-11-17 20:44:54 +11:00
|
|
|
: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))
|
2025-11-16 19:12:34 +11:00
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
**** Tinymist (lsp)
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(with-eval-after-load 'eglot
|
2025-11-17 20:44:54 +11:00
|
|
|
(with-eval-after-load 'typst-ts-mode
|
|
|
|
|
(add-to-list 'eglot-server-programs
|
|
|
|
|
`((typst-ts-mode) .
|
|
|
|
|
,(eglot-alternatives `(,"tinymist"
|
|
|
|
|
"typst-lsp"))))))
|
2025-11-16 19:12:34 +11:00
|
|
|
#+end_src
|
2025-11-16 20:05:31 +11:00
|
|
|
|
|
|
|
|
**** Live-preview
|
|
|
|
|
#+begin_src emacs-lisp :tangle packages.el
|
|
|
|
|
(package! typst-preview
|
2025-11-17 20:44:54 +11:00
|
|
|
:recipe (:host github :repo "havarddj/typst-preview.el"))
|
2025-11-16 20:05:31 +11:00
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
***** Config
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(use-package! websocket)
|
|
|
|
|
(use-package! typst-preview
|
2025-11-17 20:44:54 +11:00
|
|
|
;; :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
|
2025-11-16 20:05:31 +11:00
|
|
|
|
2025-11-17 20:44:54 +11:00
|
|
|
: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
|
2025-11-16 20:05:31 +11:00
|
|
|
|
2025-11-17 20:44:54 +11:00
|
|
|
: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)
|
|
|
|
|
)
|
2025-11-16 20:05:31 +11:00
|
|
|
#+end_src
|
2025-11-17 16:07:41 +11:00
|
|
|
|
|
|
|
|
*** Latex
|
|
|
|
|
**** TeXpresso
|
|
|
|
|
#+begin_src emacs-lisp :tangle no
|
|
|
|
|
(load-file "lisp/texpresso/texpresso.el")
|
|
|
|
|
#+end_src
|
|
|
|
|
*** Org
|
|
|
|
|
#+begin_src emacs-lisp :tangle packages.el
|
|
|
|
|
(package! org :recipe
|
2025-12-06 15:31:50 +11:00
|
|
|
(:host nil :repo "https://code.tecosaur.net/mirrors/org-mode.git" :remote "mirror" :fork
|
|
|
|
|
(:host nil :repo "https://code.tecosaur.net/tec/org-mode.git" :branch "dev" :remote "tecosaur")
|
|
|
|
|
:files
|
|
|
|
|
(:defaults "etc")
|
|
|
|
|
:build t :pre-build
|
|
|
|
|
(with-temp-file "org-version.el"
|
2025-12-05 19:17:15 +11:00
|
|
|
(require 'lisp-mnt)
|
|
|
|
|
(let
|
|
|
|
|
((version
|
|
|
|
|
(with-temp-buffer
|
|
|
|
|
(insert-file-contents "lisp/org.el")
|
|
|
|
|
(lm-header "version")))
|
|
|
|
|
(git-version
|
|
|
|
|
(string-trim
|
|
|
|
|
(with-temp-buffer
|
2025-12-06 15:31:50 +11:00
|
|
|
(call-process "git" nil t nil "rev-parse" "--short" "HEAD")
|
2025-12-05 19:17:15 +11:00
|
|
|
(buffer-string)))))
|
|
|
|
|
(insert
|
2025-12-06 15:31:50 +11:00
|
|
|
(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)
|
2025-12-05 19:17:15 +11:00
|
|
|
"(provide 'org-version)\n"))))
|
2025-11-17 16:07:41 +11:00
|
|
|
:pin nil)
|
2025-12-06 15:31:50 +11:00
|
|
|
|
2025-11-17 16:07:41 +11:00
|
|
|
(unpin! org)
|
|
|
|
|
#+end_src
|
2025-12-05 19:17:15 +11:00
|
|
|
**** 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
|
2025-11-17 16:07:41 +11:00
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp
|
2025-12-05 19:17:15 +11:00
|
|
|
(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)
|
2025-11-17 20:44:54 +11:00
|
|
|
|
2025-12-05 19:17:15 +11:00
|
|
|
;; ;; Enable consistent equation numbering
|
|
|
|
|
(setq org-latex-preview-numbered t)
|
2025-11-17 20:44:54 +11:00
|
|
|
|
2025-12-05 19:17:15 +11:00
|
|
|
;; 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)
|
2025-11-17 20:44:54 +11:00
|
|
|
|
2025-12-05 19:17:15 +11:00
|
|
|
;; More immediate live-previews -- the default delay is 1 second
|
|
|
|
|
(setq org-latex-preview-mode-update-delay 0)
|
2025-11-17 20:44:54 +11:00
|
|
|
|
2025-12-05 19:17:15 +11:00
|
|
|
;; 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)))
|
|
|
|
|
)
|
|
|
|
|
#+end_src
|
|
|
|
|
**** org habit
|
|
|
|
|
#+begin_src emacs-lisp
|
2025-12-06 15:31:50 +11:00
|
|
|
(add-to-list 'org-modules 'org-habit)
|
2025-11-17 16:07:41 +11:00
|
|
|
#+end_src
|
2025-12-06 22:50:42 +11:00
|
|
|
**** Org modern
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(use-package! org-modern
|
|
|
|
|
:config
|
|
|
|
|
(setq org-modern-table nil))
|
|
|
|
|
#+end_src
|