doomconfig/config.org

8.1 KiB

My Org-mode Emacs Config

Doom theme

Use nerd-font in Emacs (for better support in vterm to liquidprompt)

(setq doom-font (font-spec :family "Fira Code Nerd Font" :size 12)
      doom-big-font (font-spec :family "Fira Code Nerd Font" :size 24)
      doom-variable-pitch-font (font-spec :family "Fira Code Nerd Font" :size 12)
      doom-unicode-font (font-spec :family "Fira Code Nerd Font")
      doom-serif-font (font-spec :family "Fira Code Nerd Font" :size 12 :weight 'light))

UI

(setq confirm-kill-emacs nil)

Expand initial Frame

(add-hook 'window-setup-hook 'toggle-frame-maximized t)

Edition modes

Quarto

LaTeX

(setq TeX-quote-after-quote t)

Fix cdlatex back quote binding

I want my back quotes back.

(setq cdlatex-math-symbol-prefix [f12])

Add custom LaTeX classes to ox-latex class.

(defun custom-latex-classes ()
  (add-to-list 'org-latex-classes
                '("scrartcl" "\\documentclass{scrartcl}"
                  ("\\section{%s}" . "\\section*{%s}")
                  ("\\subsection{%s}" . "\\subsection*{%s}")
                  ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
                  ("\\paragraph{%s}" . "\\paragraph*{%s}")
                  ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
  (add-to-list 'org-latex-classes
               '("scrbook" "\\documentclass{scrbook}"
                  ("\\part{%s}" . "\\part*{%s}")
                  ("\\chapter{%s}" . "\\chapter*{%s}")
                  ("\\section{%s}" . "\\section*{%s}")
                  ("\\subsection{%s}" . "\\subsection*{%s}")
                  ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
                  ("\\paragraph{%s}" . "\\paragraph*{%s}")
                  ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
  (add-to-list 'org-latex-classes
               '("scrreprt" "\\documentclass{scrreprt}"
                  ("\\part{%s}" . "\\part*{%s}")
                  ("\\chapter{%s}" . "\\chapter*{%s}")
                  ("\\section{%s}" . "\\section*{%s}")
                  ("\\subsection{%s}" . "\\subsection*{%s}")
                  ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
                  ("\\paragraph{%s}" . "\\paragraph*{%s}")
                  ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
  (add-to-list 'org-latex-classes
               '("lamme2024" "\\documentclass{scrartcl}
                [NO-DEFAULT-PACKAGES]
                [NO-PACKAGES]
                [EXTRA]
                        "
                  ("\\part{%s}" . "\\part*{%s}")
                  ("\\section{%s}" . "\\section*{%s}")
                  ("\\subsection{%s}" . "\\subsection*{%s}")
                  ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
                  ("\\subsubsubsection{%s}" . "\\subsubsubsection*{%s}")
                  ("\\paragraph{%s}" . "\\paragraph*{%s}")
                  ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))))

(eval-after-load "ox-latex"
  #'custom-latex-classes)
(setq org-latex-compiler "lualatex")

Use minted for code listings:

(setq org-latex-listings 'minted
      org-latex-packages-alist '(("" "minted"))
      org-latex-pdf-process
      '("lualatex -shell-escape -interaction nonstopmode -output-directory %o %f"
        "lualatex -shell-escape -interaction nonstopmode -output-directory %o %f"))

Disable LateX preview in Org-mode by default

(setq org-startup-with-latex-preview nil)

Add a hook so that the org file is tangled before the build

(add-hook 'org-export-before-processing-hook #'org-babel-tangle)

Syntax highlighting in Org-mode

; (setq org-highlight-latex-and-related '(latex script entities))
(setq org-highlight-latex-and-related '(native))
;; (add-hook 'org-mode-hook #'turn-on-org-cdlatex)

\(i \in \mathbf{N}\)

Proper indentation in algorithmic

(with-eval-after-load 'latex
    (add-to-list 'LaTeX-indent-environment-list '("algorithmic" current-indentation)))

Enable conda environment in a Org-mode

(require 'conda)
(conda-env-initialize-interactive-shells)

Org-roam

Set the roam directory

(setq org-roam-directory "~/Documents/org/roam/")

typst

(add-to-list 'treesit-language-source-alist
             '(typst "https://github.com/uben0/tree-sitter-typst"))
(treesit-install-language-grammar 'typst)

Emacs Server & Emacs Client

Emacs can be a little slow to startup: it might come useful to use Emacs server to share the initialization cost between instances.

Let's add an entry to our applications launcher, in client mode:

# In ~/.local/share/applications/emacs-client.desktop
[Desktop Entry]
Name=Emacs (Client)
GenericName=Text Editor
Comment=Edit text
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
Exec=emacsclient -fs -c -a "emacs" %F
Icon=emacs
Type=Application
Terminal=false
Categories=Development;TextEditor;Utility;
StartupWMClass=Emacs

the -fs option enable to launch Emacs in full-screen mode at startup.

Then we start the Emacs daemon:

systemctl --user enable --now emacs

Escape from vim in libvterm while in evil-mode

(defun vim-save ()
  ":wd this unfortunate vim window in my terminal"
  (interactive)
  (send-))
vim-save

PlantUML

(setq plantuml-default-exec-mode 'executable)
  ;; (setq plantuml-default-exec-mode 'jar)
  (setq plantuml-executable-path "/usr/bin/plantuml")
  ;; setup plantuml for org-babel
  ;; (add-to-list 'org-src-lang-modes '("plantuml" . plantuml))
  (setq org-plantuml-exec-mode 'executable)
  (setq org-plantuml-executable-path plantuml-executable-path)
  ;; (require 'ob-plantuml) ; OBSOLETED
  (setq org-plantuml-jar-path "/usr/share/java/plantuml.jar")
  ;; (setq plantuml-jar-args '())
  ;; Enable puml-mode for PlantUML files
  (add-to-list 'auto-mode-alist '("\\.puml\\'" . plantuml-mode))
  (add-to-list 'auto-mode-alist '("\\.plantuml\\'" . plantuml-mode))

Org-ref-acronyms

(after! org
  (require 'org-ref)
 (add-to-list 'org-latex-classes
          '("scientific-project"
             "\\documentclass{scrreprt}
             [NO-DEFAULT-PACKAGES]
             [EXTRA]
                \\makeindex
                \\makeglossaries          "

;             ("\\part{%s}" . "\\part*{%s}")
             ("\\chapter{%s}" . "\\chapter{%s}")
             ("\\section{%s}" . "\\section*{%s}")
             ("\\subsection{%s}" . "\\subsection*{%s}")
             ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
             ("\\paragraph{%s}" . "\\paragraph*{%s}")
             ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
                (add-hook 'org-export-before-parsing-hook #'org-ref-acronyms-before-parsing)
                (add-hook 'org-export-before-parsing-hook #'org-ref-glossary-before-parsing))
org-ref-glossary-before-parsing org-ref-acronyms-before-parsing org-attach-expand-links
org-ref-glossary-before-parsing org-ref-acronyms-before-parsing org-attach-expand-links
(after! org (org-add-link-type
 "latex" nil
 (lambda (path desc format)
   (cond
    ((eq format 'html)
     (format "<span class=\"%s\">%s</span>" path desc))
    ((eq format 'latex)
     (format "\\%s{%s}" path desc))))))