Emacs Config

Table of Contents

1. Keybindings

These keybindings extend the default doom bindings, either because the defaults were confusing to me or because the binding did not yet exist.

Key Description State
F12 Show Org-Agenda N
Ctrl-Alt-+ Increase Font Size  
Ctrl-# Toggle Line Comment  
DEL Up Directory Dired
F6 Toggle Light/Dark Theme  
F7 Start Org-Drill  

2. Base Config

;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-

;; Basic User Settings
(setq user-full-name "Jonathan Jenne"
      user-mail-address "johnnie@posteo.de")

;; Default Shell
;; Useful if default system shell is not bash
(setq shell-file-name (executable-find "bash"))

;; Display Line numbers
(setq display-line-numbers-type t)

;; General Keybindings
(map! :n "<f12>" #'org-agenda-list)
(map! :n "<f7>" #'org-drill)
(map! "C-M-+" #'doom/increase-font-size)
(map! "C-#" #'comment-line)
(evil-define-key 'normal dired-mode-map
  (kbd "DEL") 'dired-up-directory)

2.1. Hooks

;; Org Mode
(add-hook 'org-mode-hook #'org-modern-mode)
(add-hook 'org-mode-hook #'hl-todo-mode)

;; Org Agenda
(add-hook 'org-agenda-finalize-hook #'org-modern-agenda)

;; Modeline
(add-hook 'doom-after-init-hook #'display-battery-mode)
(add-hook 'doom-after-init-hook #'display-time-mode)

3. Themes

(use-package! heaven-and-hell
  :ensure t
  :config
  (setq heaven-and-hell-theme-type 'dark) ;; Omit to use light by default
  (setq heaven-and-hell-themes
        '((light . doom-gruvbox-light)
          (dark . doom-gruvbox))) ;; Themes can be the list: (dark . (tsdh-dark wombat))
  ;; Optionall, load themes without asking for confirmation.
  (setq heaven-and-hell-load-theme-no-confirm t)
  :hook (after-init . heaven-and-hell-init-hook)
  :bind (("<f6>" . heaven-and-hell-toggle-theme)))

4. Org Mode

4.1. General Settings

(setq +user-org-path "~/Notes/Org")
(defun org-path (filename) (expand-file-name filename +user-org-path))

(after! org (setq org-directory +user-org-path
                  org-src-tab-acts-natively t))

(add-to-list 'org-modules 'org-habit)

4.2. Org Export


(after! org (;; TOC Links will lead to errors when attempting
             ;; to export to HTML
             setq org-export-exclude-tags '("toc")))

(defun my-org-inline-css-hook (exporter)
  "Insert custom inline css"
  (when (eq exporter 'html)
    (let* ((dir (ignore-errors (file-name-directory (buffer-file-name))))
           (path (concat dir "style.css"))
           (fallback-style (or (null dir) (null (file-exists-p path))))
           (final (if fallback-style "~/.config/doom/style.css" path))) ;; <- set your own style file path
      (setq org-html-head-include-default-style t)
      (setq org-html-head (concat
                           "<style type=\"text/css\">\n"
                           "<!--/*--><![CDATA[/*><!--*/\n"
                           (with-temp-buffer
                             (insert-file-contents final)
                             (buffer-string))
                           "/*]]>*/-->\n"
                           "</style>\n")))))

;; Org Export
(add-hook 'org-export-before-processing-hook 'my-org-inline-css-hook)

4.3. Org Agenda

(after! org (setq
             org-agenda-show-all-dates nil
             org-agenda-span 4
             org-agenda-start-day "+0d"
             org-agenda-spillover-skip-function '(org-agenda-skip-entry-if 'todo 'done)
             org-agenda-time-grid
             '((daily today require-timed)
               (800 1000 1200 1400 1600 1800 2000)
               " ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄")
             org-agenda-current-time-string
             "◀── now ──────────────────────────────────────────────── \\o/"
             org-agenda-block-separator ?─
             ;; Consider all org files part of the org-agenda
             org-agenda-files (list +user-org-path)))

5. Packages

5.1. hl-todo

(after! hl-todo (setq hl-todo-keyword-faces '(("TODO" warning bold)
                                              ("FIXME" error bold)
                                              ("EXAMPLE" font-lock-keyword-face bold)
                                              ("HACK" font-lock-constant-face bold)
                                              ("DEPRECATED" font-lock-doc-face bold)
                                              ("NOTE" success bold)
                                              ("BUG" error bold)
                                              ("XXX" font-lock-constant-face bold))))

5.2. org-auto-tangle

(use-package! org-auto-tangle
  :defer t
  :config (setq org-auto-tangle-default nil)
  :hook (org-mode . org-auto-tangle-mode))

5.3. org-drill

(after! org-drill
  (setq org-drill-scope 'agenda))

5.4. doom-modeline

(after! doom-modeline
  (setq doom-modeline-battery t)
  (setq doom-modeline-major-mode-icon t))

5.5. evil-snipe

(after! evil-snipe (setq evil-snipe-scope 'whole-visible))

Author: Jonathan Jenne / Inhji

Created: 2024-02-27 Di 13:59