Literate Configuration

Table of Contents

1 System Configuration

1.1 Org Directory

(setq org-directory "~/Notes/")

1.2 Startup Settings

;; Full screen on startup
(add-to-list 'initial-frame-alist '(fullscreen . maximized))

;; Bring Emacs to front on macOS
(defun bring-emacs-to-front ()
  "Bring Emacs to the front using AppleScript."
  (when (eq system-type 'darwin)
    (ns-do-applescript "tell application \"Emacs\" to activate")))

(add-hook 'after-init-hook #'bring-emacs-to-front)
(advice-add 'restart-emacs :after #'bring-emacs-to-front)

;; Avoid adding new line automatically
(setq-default require-final-newline nil)

1.3 Utility Functions

(defun my-open (filepath)
  "Open file with system default application."
  (cond
   ((eq system-type 'gnu/linux) (shell-command (format "xdg-open %s &" filepath) nil nil))
   ((eq system-type 'darwin) (shell-command (format "open %s &" filepath) nil nil))))

1.4 Environment Settings

;; Editor settings
(setenv "EDITOR" "emacsclient")
(setq tramp-default-method "ssh")

;; Debug settings
(setq debug-on-error nil
      edebug-on-error nil)

;; Auth sources
(setq auth-sources '("~/.authinfo.gpg"))

2 Evil/Vim Configuration

2.1 Evil Settings

(after! evil
  (setq evil-split-window-below t
        evil-vsplit-window-right t
        evil-ex-substitute-global t
        evil-kill-on-visual-paste nil))

;; Evil escape configuration
(use-package! evil-escape)
(setq-default evil-escape-key-sequence "fd")

2.2 Doom Leader Configuration

(setq doom-localleader-key ",")

3 Key Bindings

3.1 Global Key Bindings

;; Org-mode global shortcuts
(define-key global-map "\C-cl" 'org-store-link)
(define-key global-map "\C-cc" 'org-capture)
(define-key global-map "\C-ca" 'org-agenda)

;; Unfill paragraph (opposite of fill-paragraph)
(defun unfill-paragraph (&optional region)
  "Takes a multi-line paragraph and makes it into a single line of text."
  (interactive (progn (barf-if-buffer-read-only) '(t)))
  (let ((fill-column (point-max))
        (emacs-lisp-docstring-fill-column t))
    (fill-paragraph nil region)))
(define-key global-map "\M-Q" 'unfill-paragraph)

3.2 Leader Key Mappings

(map!
 (:leader
  :desc "M-x"                     :nv "SPC"  #'execute-extended-command
  :desc "Find file in project"    :n  ":"    #'projectile-find-file

  (:prefix "TAB"
   :desc "Previous workspace"    :n  "h" #'+workspace/switch-left
   :desc "Next workspace"        :n  "l" #'+workspace/switch-right
   :desc "Load workspace"        :n  "L" #'+workspace/load)

  (:desc "git" :prefix "g"
   :desc "Git status"            :n  "s" #'magit-status
   :desc "Git stage hunk"        :n  "S" #'git-gutter:stage-hunk)

  (:desc "+toggle" :prefix "t"
   :desc "Flycheck"              :n  "c" #'flycheck-mode
   :desc "Focus"                 :n  "f" #'focus-mode
   :desc "Center"                :n  "w" #'centered-window-mode
   :desc "LSP iMenu"             :n  "i" #'lsp-ui-imenu)))

3.3 Evil Key Mappings

(map!
 (:after evil
  (:map evil-window-map ; prefix "C-w"
   "d"       #'+workspace/close-window-or-workspace
   "g"       #'golden-ratio
   "G"       #'balance-windows
   "w"       #'other-window
   "u"       #'winner-undo
   "r"       #'winner-redo)
  (:map evil-motion-state-map
   ";"       #'ignore)
  (:map evil-normal-state-map
   "zi"      #'ispell-word
   "zI"      #'ispell-buffer
   "s-["     #'evil-goto-last-change
   "s-]"     #'evil-goto-last-change-reverse)))

3.4 Org-mode Key Mappings

(map!
 (:after evil-org
  (:map evil-org-mode-map
   (:localleader
    :n "n" #'org-toggle-narrow-to-subtree
    :n "A" #'org-archive-subtree
    :n "S" #'org-sort
    :n "T" #'org-babel-tangle
    :n "#" #'org-update-checkbox-count)
   :ni  "M-j" #'org-metadown
   :ni  "M-k" #'org-metaup
   :ni  "M-h" #'org-promote-subtree
   :ni  "M-l" #'org-demote-subtree
   :n   "t"   #'org-todo
   :n   "zi"  #'ispell-word)
  (:map evil-org-agenda-mode-map
   (:localleader
    :n "A" #'org-agenda-archive-default-with-confirmation))))

3.5 macOS Specific Bindings

(when IS-MAC
  (setq mac-command-modifier 'super
        mac-option-modifier 'meta))

3.6 Tool Specific Bindings

(after! magit
  (define-key magit-mode-map (kbd "Q") 'delete-frame))

4 Org-mode Configuration

4.1 Core Settings

(after! org
  (require 'org-id)

  ;; Directory structure
  (setq org-default-notes-file (expand-file-name "refile.org" org-directory)
        org-default-meeting-file (expand-file-name "roam/meetings.org" org-directory)
        org-journal-dir (expand-file-name "journal" org-directory))

  ;; Statistics and hierarchies
  (setq org-checkbox-hierarchical-statistics nil
        org-hierarchical-todo-statistics nil)

  ;; Mode hooks
  (add-hook 'org-mode-hook #'turn-on-auto-fill)
  (add-hook 'org-mode-hook (lambda () (display-line-numbers-mode 0)))
  (add-hook 'org-trigger-hook #'save-buffer)

  ;; ID management
  (setq org-id-link-to-org-use-id 'create-if-interactive
        org-id-locations-file (expand-file-name ".orgids" org-directory)
        org-attach-preferred-new-method 'id)

  ;; Visual settings
  (setq org-startup-indented t
        org-startup-truncated nil
        org-startup-folded t
        org-cycle-separator-lines 0
        outline-blank-line nil
        org-pretty-entities t
        org-hide-emphasis-markers nil
        org-fontify-whole-heading-line t
        org-fontify-done-headline t
        org-fontify-quote-and-verse-blocks t
        org-blank-before-new-entry '((heading) (plain-list-item)))

  ;; Search fix for evil
  (setq org-fold-core-style 'overlays)
  (evil-select-search-module 'evil-search-module 'evil-search))

4.2 Babel Configuration

(after! org
  ;; PlantUML integration
  (setq plantuml-jar-path (expand-file-name "~/.dotfiles/plantuml.1.2021.0.jar"))
  (setq org-plantuml-jar-path plantuml-jar-path)
  (add-to-list 'org-src-lang-modes '("plantuml" . plantuml))

  ;; Babel evaluation confirmation
  (defun my-org-confirm-babel-evaluate (lang body)
    (cond
     ((string= lang "plantuml") nil)
     ((string= lang "emacs-lisp") nil)
     ((string= lang "http") nil)
     (t t)))
  (setq org-confirm-babel-evaluate #'my-org-confirm-babel-evaluate))

4.3 Refile and Export

(after! org
  ;; Refile configuration
  (setq org-refile-use-outline-path 'file
        org-outline-path-complete-in-steps nil
        org-refile-targets '((nil :maxlevel . 2)
                             (org-agenda-files :maxlevel . 4))
        org-reverse-note-order t)

  ;; Export configuration
  (setq org-export-with-toc nil
        org-export-with-smart-quotes nil
        org-pandoc-format-extensions '(markdown_strict+pipe_tables)
        org-pandoc-markdown-extension "+yaml_metadata_block"
        org-export-initial-scope 'subtree
        org-html-head-include-default-style nil
        org-html-head "<link rel=\"stylesheet\" href=\"https://mingwei.gitlab.io/doom.d/org.css\" type=\"text/css\" />")

  ;; Hugo configuration
  (setq org-hugo-default-section-directory "post"))

4.4 Capture Templates

(after! org
  (setq org-capture-templates
        '(("t" "Todo" entry (file+headline org-default-notes-file "Inbox")
           "* TODO %?\n%U\n%a\n" :clock-in t :clock-resume t)
          ("n" "Note" entry (file+headline org-default-notes-file "Notes")
           "* %? :NOTE:\n%U\n%a\n" :clock-in t :clock-resume t)
          ("r" "Radar Group Meeting" entry (file+headline "roam/cloudflare_radar.org" "Group Meetings")
           "*** Group meeting on %t\n**** Topic:\n\n**** Notes\n\n")
          ("c" "Individual Meeting" entry (file+headline "roam/cloudflare_radar.org" "Individual Meetings")
           "*** Meeting with %^{Person} on %t\n**** Topic\n\n**** Notes\n\n")))
  (add-hook 'org-capture-mode-hook #'delete-other-windows))

4.5 Agenda Configuration

(after! org
  ;; Agenda files and display
  (setq org-agenda-files (directory-files-recursively "~/Notes/roam/" "\\.org$")
        org-tags-column -77
        +popup-margin-width 0)
  (set-popup-rule! "^\\*Org Agenda" :side 'right :width 98 :select t :ttl nil)

  ;; Agenda view settings
  (setq org-agenda-start-day nil
        org-agenda-start-on-weekday 1
        org-agenda-span 'week
        org-agenda-skip-scheduled-if-done t
        org-agenda-skip-deadline-if-done t
        org-agenda-block-separator ""
        org-tags-match-list-sublevels t
        org-agenda-use-tag-inheritance nil
        org-agenda-window-setup 'current-window
        org-agenda-restore-windows-after-quit t)

  ;; TODO keywords and faces
  (setq org-todo-keywords
        '((sequence
           "TODO(t)" "NEXT(n)" "STRT(s)" "REVW(r)" "BLOCKED(b@/@)" "WAIT(w@/@)" "HOLD(h@/@)"
           "|" "DONE(d)" "KILL(k@/@)")
          (sequence
           "[ ](T)" "[-](S)" "[?](W)"
           "|" "[X](D)"))
        org-todo-keyword-faces
        '(("NEXT"    . +org-todo-active)
          ("[-]"     . +org-todo-active)
          ("STRT"    . +org-todo-active)
          ("REVW"    . +org-todo-active)
          ("[?]"     . +org-todo-onhold)
          ("WAIT"    . +org-todo-project)
          ("BLOCKED" . +org-todo-project)
          ("HOLD"    . +org-todo-project)))

  ;; Logging and dependencies
  (setq org-log-into-drawer t
        org-return-follows-link t
        org-use-fast-todo-selection t
        org-treat-S-cursor-todo-selection-as-state-change nil
        org-log-done 'time
        org-enforce-todo-dependencies t
        org-enforce-todo-checkbox-dependencies t
        org-agenda-dim-blocked-tasks t)

  ;; Log note headings
  (setq org-log-note-headings
        '((done . "CLOSING NOTE %t")
          (state . "State %-12s from %-12S %t")
          (note . "%t")
          (reschedule . "Rescheduled from %S on %t")
          (delschedule . "Not scheduled, was %S on %t")
          (redeadline . "New deadline from %S on %t")
          (deldeadline . "Removed deadline, was %S on %t")
          (refile . "Refiled on %t")
          (clock-out . ""))))

4.6 Custom Agenda Commands

(after! org
  (setq org-agenda-custom-commands
        '(("d" "Dashboard"
           ((agenda "" ((org-agenda-span 'day)
                        (org-deadline-warning-days 7)))
            (todo "NEXT"
                  ((org-agenda-overriding-header "Next Actions")
                   (org-agenda-max-todos nil)))
            (todo "STRT"
                  ((org-agenda-overriding-header "In Progress")))
            (todo "WAIT|BLOCKED"
                  ((org-agenda-overriding-header "Waiting/Blocked")))
            (tags-todo "inbox"
                       ((org-agenda-overriding-header "Inbox - to Refile")))))

          ("n" "Next Actions"
           ((todo "NEXT"
                  ((org-agenda-overriding-header "Next Actions")))))

          ("w" "Weekly Review"
           ((agenda "" ((org-agenda-span 'week)
                        (org-agenda-start-on-weekday 1)))
            (todo "DONE"
                  ((org-agenda-overriding-header "Completed This Week")))
            (todo "TODO"
                  ((org-agenda-overriding-header "All TODOs")
                   (org-super-agenda-groups
                    '((:name "Important" :priority "A")
                      (:name "Next" :todo "NEXT")
                      (:name "On Hold" :todo "HOLD")
                      (:auto-category t)))))))

          ("p" "Projects"
           ((todo "" ((org-agenda-overriding-header "All Projects")
                      (org-super-agenda-groups
                       '((:name "Active Projects" :todo "STRT")
                         (:name "Stuck Projects" :todo "BLOCKED")
                         (:name "On Hold" :todo "HOLD")
                         (:discard (:anything t))))))))

          ("t" "All TODOs"
           ((todo "" ((org-agenda-overriding-header "TODO!")
                      (org-super-agenda-groups
                       '((:name "Important" :priority "A")
                         (:name "Next Actions" :todo "NEXT")
                         (:name "In Progress" :todo "STRT")
                         (:name "Waiting" :todo "WAIT")
                         (:name "On Hold" :todo "HOLD" :order 1)))))))))
  (org-super-agenda-mode))

4.7 Org-roam Configuration

(after! org-roam
  (setq org-roam-directory (expand-file-name "roam" org-directory)
        org-roam-db-location (expand-file-name "org-roam.db" org-roam-directory)
        org-roam-capture-templates '(("d" "default" plain "%?" :target
                                      (file+head "${slug}.org" "#+title: ${title}\n")
                                      :unnarrowed t))))

4.8 Utility Functions

(after! org
  (defun weekly-dates()
    "Insert dates of current Monday and Sunday for weekly purpose."
    (interactive)
    (insert
     (concat
      "** "
      (org-read-date nil nil "this monday")
      " "
      (org-read-date nil nil "this sunday")
      "\n"
      "*** log\n"
      "**** Monday\n"
      "**** Tuesday\n"
      "**** Wednesday\n"
      "**** Thursday\n"
      "**** Friday\n"))))

4.9 TODO State Change Hooks

;; Clear scheduled time when changing to WAIT/BLOCKED/HOLD
(add-hook 'org-after-todo-state-change-hook
          (lambda ()
            (when (member org-state '("WAIT" "BLOCKED" "HOLD"))
              (org-schedule '(4)))))

5 Theme and UI Configuration

5.1 Theme Setup

(after! doom-themes
  (setq doom-themes-enable-bold t
        doom-themes-enable-italic t)
  (doom-themes-visual-bell-config)
  (doom-themes-treemacs-config)
  (doom-themes-org-config))

;; Load theme
(setq doom-theme 'doom-dracula)

5.2 Font Configuration

;; Primary font configuration
(setq doom-font (font-spec :family "JetBrains Mono" :size 15))
(unless (doom-font-exists-p doom-font)
  (setq doom-font nil))

(setq doom-unicode-font (font-spec :family "JetBrains Mono" :size 15))
(unless (doom-font-exists-p doom-unicode-font)
  (setq doom-unicode-font nil))

;; Line spacing for consistency
(setq line-spacing 0.15)

5.3 Display Settings

;; Line numbers
(setq display-line-numbers-type 'visual)

;; Disable cursor blinking
(blink-cursor-mode -1)

6 Language Support

6.1 Rust Configuration

(after! rustic
  (setq rustic-format-on-save t
        rustic-cargo-build-arguments "--all-features"
        lsp-rust-analyzer-display-parameter-hints t
        lsp-rust-all-features t
        lsp-ui-sideline-show-hover nil)
  (map!
   (:map rustic-mode-map
    (:localleader
     (:prefix ("t" . "cargo test")
      :desc "related test"     "r" #'lsp-rust-analyzer-related-tests
      :desc "current test"      "t" #'lsp-rust-analyzer-run)))))

6.2 Other Languages

;; Unix timestamp utilities
(use-package! unix-ts)

;; Syslog mode
(add-to-list 'auto-mode-alist '("syslog\\'" . syslog-mode) t)

;; TOML configuration
(add-hook 'conf-toml-mode-hook #'visual-line-mode)

7 Tools Configuration

7.1 Flycheck

(setq flycheck-temp-prefix ".flycheck")

7.2 Spell Checking

(setq ispell-personal-dictionary "~/.dotfiles/emacs/ispell-dict"
      ispell-silently-savep t)

(defun flyspell-buffer-after-pdict-save (&rest _)
  (flyspell-buffer))
(advice-add 'ispell-pdict-save :after #'flyspell-buffer-after-pdict-save)

Author: root

Created: 2026-01-18 Sun 21:37

Validate