* 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 * My doom config ** Evil #+begin_src emacs-lisp (setq evil-disable-insert-state-bindings t) #+end_src ** Appearance settings #+begin_src emacs-lisp (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-operandi) (setq display-line-numbers-type 'relative) (setq org-directory "~/org/") #+end_src *** Themes #+begin_src emacs-lisp :tangle packages.el (package! catppuccin-theme) #+end_src **** ef-themes #+begin_src emacs-lisp :tangle packages.el ;; (package! ef-themes) #+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 ;; (ef-themes-take-over-modus-themes-mode 1) ;; :bind ;; (("" . modus-themes-rotate) ;; ("C-" . modus-themes-select) ;; ("M-" . 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 *** Nano modeline #+begin_src emacs-lisp :tangle no (package! nano-modeline) #+end_src #+begin_src emacs-lisp :tangle no (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 ** Plugins *** Yasnippet Thisenables the feature of auto-expanding snippets when matching the pattern #+begin_src emacs-lisp (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) ) #+end_src *** 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 *** Leetcode #+begin_src emacs-lisp :tangle packages.el (package! leetcode) #+end_src *** 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 ** 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 :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)) #+end_src **** Tinymist (lsp) #+begin_src emacs-lisp (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")))))) #+end_src **** Live-preview #+begin_src emacs-lisp :tangle packages.el (package! typst-preview :recipe (:host github :repo "havarddj/typst-preview.el")) #+end_src ***** Config #+begin_src emacs-lisp (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) ) #+end_src *** 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 (: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 "lisp/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) #+end_src **** 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 #+begin_src emacs-lisp (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))) ) #+end_src **** Org-roam (deprecated) #+begin_src emacs-lisp :tangle no (use-package! org-roam :ensure t :custom (org-roam-directory (file-truename "~/org/roam")) :bind (("C-c n r l" . org-roam-buffer-toggle) ("C-c n r f" . org-roam-node-find) ("C-c n r g" . org-roam-graph) ("C-c n r i" . org-roam-node-insert) ("C-c n r c" . org-roam-capture) ;; Dailies ("C-c n r j" . org-roam-dailies-capture-today)) :config ;; If you're using a vertical completion framework, you might want a more informative completion interface (setq org-roam-node-display-template (concat "${title:*} " (propertize "${tags:10}" 'face 'org-tag))) (org-roam-db-autosync-mode) ;; If using org-roam-protocol (require 'org-roam-protocol)) #+end_src **** org habit #+begin_src emacs-lisp ;; (add-to-list 'org-modules 'org-habit) #+end_src