Refactor Emacs for authoring workflows

This commit is contained in:
Fabio Scotto di Santolo
2026-08-20 15:35:38 +02:00
parent 6589b25f95
commit 474f0082bb
172 changed files with 881 additions and 3134 deletions

View File

@@ -1,167 +1,69 @@
;;; org.el -*- lexical-binding: t; -*-
;;; org.el --- Org authoring workflow -*- lexical-binding: t; -*-
(use-package htmlize
:ensure t)
(require 'org)
(require 'org-capture)
(require 'org-agenda)
(require 'org-id)
(require 'org-tempo)
(require 'ox)
(require 'ox-html)
(require 'ox-latex)
(require 'ox-md)
(require 'ox-odt)
;; Setting default directory for Org files.
(setq org-directory "~/Org")
(setq org-directory (expand-file-name "Org" (getenv "HOME"))
org-default-notes-file (expand-file-name "inbox.org" org-directory)
org-agenda-files (list org-default-notes-file
(expand-file-name "agenda.org" org-directory)
(expand-file-name "notes.org" org-directory)
(expand-file-name "meetings" org-directory)
(expand-file-name "projects" org-directory))
org-todo-keywords '((sequence "TODO(t)" "NEXT(n)" "WAIT(w)" "|" "DONE(d)" "CANCELLED(c)"))
org-tag-alist '((:startgroup) ("work" . ?w) ("personal" . ?p) ("meeting" . ?m)
("documentation" . ?d) (:endgroup))
org-startup-indented t
org-startup-folded 'content
org-hide-leading-stars t
org-hide-emphasis-markers t
org-return-follows-link t
org-src-fontify-natively t
org-src-tab-acts-natively t
org-fontify-quote-and-verse-blocks t
org-export-with-smart-quotes t
org-html-doctype "html5"
org-html-html5-fancy t
org-html-head-include-default-style nil
org-html-head "<link rel=\"stylesheet\" href=\"org.css\" type=\"text/css\" />"
org-latex-compiler "lualatex"
org-latex-pdf-process '("latexmk -lualatex -interaction=nonstopmode -output-directory=%o %f"))
(defvar org-notes-file (expand-file-name "notes.org" org-directory)
"Default Org notes file.")
;; Keep the LuaLaTeX dependency set small while retaining text, tables, links,
;; and images in exported documents.
(setq org-latex-default-packages-alist
'(("" "amsmath" t ("lualatex" "xetex"))
("" "fontspec" t ("lualatex" "xetex"))
("" "graphicx" t)
("" "longtable" nil)
("" "hyperref" nil)))
(defvar org-calendar-file (expand-file-name "calendar.org" org-directory)
"Default Org calendar file.")
(setq org-capture-templates
`(("t" "TODO" entry (file ,org-default-notes-file)
"* TODO %?\n:PROPERTIES:\n:CREATED: %U\n:END:\n")
("n" "Note" entry (file ,(expand-file-name "notes.org" org-directory))
"* %U %?\n")
("m" "Meeting" entry (file+olp+datetree ,(expand-file-name "meetings/meetings.org" org-directory))
"* %^{Title} :meeting:\n%U\n%?\n")
("d" "Document idea" entry (file ,(expand-file-name "documentation/ideas.org" org-directory))
"* IDEA %? :documentation:\n%U\n")))
(defface +org-todo-active
'((t (:foreground "#51afef" :weight bold)))
"Face for active Org TODO states.")
(add-hook 'org-mode-hook #'org-indent-mode)
(add-hook 'org-mode-hook #'visual-line-mode)
(add-hook 'org-mode-hook #'flyspell-mode)
(defface +org-todo-project
'((t (:foreground "#c678dd" :weight bold)))
"Face for project Org TODO states.")
(defface +org-todo-onhold
'((t (:foreground "#ECBE7B" :weight bold)))
"Face for waiting Org TODO states.")
(defface +org-todo-cancel
'((t (:foreground "#ff6c6b" :weight bold)))
"Face for cancelled Org TODO states.")
(use-package org
:init
(setq org-clock-mode-line-total 'today
org-fontify-done-headline t
org-fontify-quote-and-verse-blocks t
org-indent-mode t
org-agenda-skip-unavailable-files t
org-return-follows-link t
org-src-fontify-natively t
org-src-tab-acts-natively t
org-startup-folded 'content
org-hide-leading-stars t
org-hide-emphasis-markers t
org-id-link-to-org-use-this t
org-id-track-globally t
org-todo-keywords
'((sequence
"TODO(t)"
"PROJ(p)"
"LOOP(r)"
"STRT(s)"
"WAIT(w)"
"HOLD(h)"
"IDEA(i)"
"|"
"DONE(d)"
"KILL(k)")
(sequence
"[ ](T)"
"[-](S)"
"[?](W)"
"|"
"[X](D)")
(sequence
"|"
"OKAY(o)"
"YES(y)"
"NO(n)"))
org-todo-keyword-faces
'(("[-]" . +org-todo-active)
("STRT" . +org-todo-active)
("[?]" . +org-todo-onhold)
("WAIT" . +org-todo-onhold)
("HOLD" . +org-todo-onhold)
("PROJ" . +org-todo-project)
("NO" . +org-todo-cancel)
("KILL" . +org-todo-cancel))
org-export-backends '(html latex odt md ascii icalendar)
org-latex-pdf-process '("pdflatex -interaction nonstopmode %f"
"pdflatex -interaction nonstopmode %f")
org-latex-default-class "article"
org-html-doctype "html5"
org-html-html5-fancy t
org-default-notes-file (expand-file-name "inbox.org" org-directory)
org-agenda-files (mapcar (lambda (file)
(expand-file-name file org-directory))
'("inbox.org" "tasks.org" "calendar.org" "notes.org"))
org-capture-templates
'(("t" "Task" entry
(file org-default-notes-file)
"* TODO %?\n:PROPERTIES:\n:CREATED: %U\n:END:\n")
("n" "Note" entry
(file org-notes-file)
"* %U %?\n")
("e" "Event" entry
(file org-calendar-file)
"* %?\nSCHEDULED: %^T\n")))
:config
(require 'org-tempo)
(require 'org-id)
(require 'org-protocol)
(add-to-list 'org-src-lang-modes '("go" . go-ts))
(add-to-list 'org-src-lang-modes '("rust" . rust-ts))
(add-hook 'org-mode-hook 'org-indent-mode))
(use-package org-appear
:ensure t
:hook (org-mode . org-appear-mode))
(use-package org-bullets
:ensure t
:init
(setq org-bullets-bullet-list '("❯" "❯❯" "❯❯❯" "❯❯❯❯" "❯❯❯❯❯"))
:config
(add-hook 'org-mode-hook 'org-bullets-mode))
(use-package org-re-reveal
:ensure t
:init
(setq org-re-reveal-transition 'none
org-re-reveal-theme "dracula"))
(use-package org-alert
:ensure t
:after org
:config
(setq alert-default-style 'libnotify
org-alert-interval 300
org-alert-notify-cutoff 5
org-alert-notify-after-event-cutoff 10
org-alert-notification-title "Org Agenda")
(add-hook 'org-agenda-mode-hook #'org-alert-enable))
(use-package ob-mermaid
:ensure t
:init
(setq ob-mermaid-cli-path (or (executable-find "mmdc") "mmdc")))
(use-package ob-go
:ensure t
:after org)
(use-package ob-rust
:ensure t
:after org)
(org-babel-do-load-languages
'org-babel-load-languages
'((shell . t)
(python . t)
(C . t)))
(provide 'lang/org)
(with-eval-after-load 'org
(require 'ob-C)
(require 'ob-emacs-lisp)
(require 'ob-go)
(require 'ob-perl)
(require 'ob-python)
(require 'ob-rust)
(require 'ob-shell)
(org-babel-do-load-languages
'org-babel-load-languages
'((C . t)
(emacs-lisp . t)
(go . t)
(perl . t)
(python . t)
(rust . t)
(shell . t))))
;;; org.el ends here