diff --git a/config/dot_config/doom/config.el b/config/dot_config/doom/config.el index f5593b6..1789f2b 100644 --- a/config/dot_config/doom/config.el +++ b/config/dot_config/doom/config.el @@ -15,6 +15,9 @@ ;; Useful if default system shell is not bash (setq shell-file-name (executable-find "bash")) +;; This is where all org files are sourced from +(setq +user-org-path "~/Notes/Org") + ;; Display Line numbers (setq display-line-numbers-type t) @@ -27,99 +30,55 @@ (font-spec :family "IBM Plex Serif" :size 18 :weight 'medium)) ;; Dashboard -(defun my-weebery-is-always-greater () - (let* ((banner '("EMACS " - "███▄ ▄███▓ ▒█████ ▒█████ ▓█████▄ " - "▓██▒▀█▀ ██▒▒██▒ ██▒▒██▒ ██▒▒██▀ ██▌" - "▓██ ▓██░▒██░ ██▒▒██░ ██▒░██ █▌" - "▒██ ▒██ ▒██ ██░▒██ ██░░▓█▄ ▌" - "▒██▒ ░██▒░ ████▓▒░░ ████▓▒░░▒████▓ " - "░ ▒░ ░ ░░ ▒░▒░▒░ ░ ▒░▒░▒░ ▒▒▓ ▒ " - "░ ░ ░ ░ ▒ ▒░ ░ ▒ ▒░ ░ ▒ ▒ " - "░ ░ ░ ░ ░ ▒ ░ ░ ░ ▒ ░ ░ ░ " - " ░ ░ ░ ░ ░ ░ " - " ░ ")) - (longest-line (apply #'max (mapcar #'length banner)))) - (put-text-property - (point) - (dolist (line banner (point)) - (insert (+doom-dashboard--center - +doom-dashboard--width - (concat line (make-string (max 0 (- longest-line (length line))) 32))) - "\n")) - 'face 'doom-dashboard-banner))) (setq +doom-dashboard-ascii-banner-fn #'my-weebery-is-always-greater) - (remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-shortmenu) (remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-footer) (remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-loaded) ;; Themes -(use-package! heaven-and-hell - :ensure t + +(use-package! org :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 (("" . heaven-and-hell-toggle-theme))) + (setq ;; General + org-directory +user-org-path + org-src-tab-acts-natively t -(setq +user-org-path "~/Notes/Org") -(defun org-path (filename) (expand-file-name filename +user-org-path)) + ;; Org Export + org-export-exclude-tags '("toc") -(after! org - (map! :map org-mode-map :localleader "g s" #'org-habit-stats-view-habit-at-point) - (setq org-directory +user-org-path - org-src-tab-acts-natively t - org-todo-keywords '((sequence "TODO(t)" "|" "DONE(d)") - (sequence "THIS(T)" "EXAMPLE")))) + ;; Org Agenda + org-agenda-show-all-dates t + org-agenda-span 4 + org-agenda-start-day "+0d" + org-agenda-tag-filter-preset '("-drill") + 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) + ;; org-agenda-spillover-skip-function '(org-agenda-skip-entry-if 'todo 'done) -(add-hook! 'org-mode-hook '(olivetti-mode (lambda () (display-line-numbers-mode -1)))) + ;; Org Todo + org-todo-keywords + '((sequence "TODO(t)" "|" "DONE(d)") + (sequence "THIS(T)" "EXAMPLE")) -(add-hook! 'org-after-todo-state-change-hook '(org-habit-stats-update-properties)) + ;; Org Capture + +org-capture-notes-file (org-path "Notes.org") + +org-capture-todo-file (org-path "Todo.org") + +org-capture-journal-file (org-path "Journal.org") + +org-capture-cooking-file (org-path "Cooking.org") + +org-capture-nepali-file (org-path "Nepali.org") + org-capture-templates + '(("t" "Personal Todo" entry + (file +org-capture-todo-file) + "* TODO %?\n" :prepend t) - -(add-to-list 'org-modules 'org-habit) - -(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 - "\n"))))) - -;; Org Export -(add-hook 'org-export-before-processing-functions 'my-org-inline-css-hook) - -(after! org (setq +org-capture-notes-file (org-path "Notes.org") - +org-capture-todo-file (org-path "Todo.org") - +org-capture-journal-file (org-path "Journal.org") - +org-capture-cooking-file (org-path "Cooking.org") - +org-capture-nepali-file (org-path "Nepali.org"))) - -(after! org (setq org-capture-templates - '(("t" "Personal Todo" entry - (file +org-capture-todo-file) - "* TODO %?\n" :prepend t) - - ("r" "Recipe" entry + ("r" "Recipe" entry (file+headline +org-capture-cooking-file "Unsorted") "* NEVERMADE %? :PROPERTIES: @@ -141,31 +100,22 @@ 1. First Step") - ("n" "Nepali") + ("n" "Nepali") - ("nw" "Nepali Word" entry - (file+headline +org-capture-nepali-file "Nepali Words") - "* %^{Nepali Word} :drill:\n%\\1\n** Answer\n%^{Translation}" :prepend t :immediate-finish t) + ("nw" "Nepali Word" entry + (file+headline +org-capture-nepali-file "Nepali Words") + "* %^{Nepali Word} :drill:\n%\\1\n** Answer\n%^{Translation}" :prepend t :immediate-finish t) - ("j" "Daily Journal" entry - (file+olp+datetree +org-capture-journal-file) - "* %U %?\n" :prepend t)))) + ("j" "Daily Journal" entry + (file+olp+datetree +org-capture-journal-file) + "* %U %?\n" :prepend t))) -(after! org (setq - ;; org-agenda-spillover-skip-function '(org-agenda-skip-entry-if 'todo 'done) - org-agenda-show-all-dates t - org-agenda-span 4 - org-agenda-start-day "+0d" - org-agenda-tag-filter-preset '("-drill") - 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))) + + :bind (:map org-mode-map (" g s" . #'org-habit-stats-view-habit-at-point)) + :hook (org-after-todo-state-change . org-habit-stats-update-properties) + :init + (add-to-list 'org-modules 'org-habit) + (add-hook 'org-export-before-processing-functions 'my-org-inline-css-hook)) (after! doom-modeline (setq doom-modeline-battery t) @@ -174,11 +124,23 @@ (add-hook 'doom-after-init-hook #'display-battery-mode) (add-hook 'doom-after-init-hook #'display-time-mode) +(drag-stuff-global-mode t) + (after! evil-snipe (setq evil-snipe-scope 'whole-visible)) -(add-hook 'org-mode-hook #'hl-todo-mode) +(use-package! heaven-and-hell + :ensure t + :config + (setq heaven-and-hell-theme-type 'dark ;; Omit to use light by default + heaven-and-hell-themes + '((light . doom-gruvbox-light) + (dark . doom-gruvbox)) ;; Themes can be the list: (dark . (tsdh-dark wombat)) + heaven-and-hell-load-theme-no-confirm t) + :hook (after-init . heaven-and-hell-init-hook) + :bind (("" . heaven-and-hell-toggle-theme))) -(after! hl-todo +(use-package! hl-todo + :config (setq hl-todo-keyword-faces '(("TODO" warning bold) ("EXAMPLE" font-lock-keyword-face bold) @@ -186,10 +148,8 @@ ("DEPRECATED" font-lock-doc-face bold) ("NOTE" success bold) ("BUG" error bold) - ("THIS" font-lock-constant-face bold)))) - -(setq +notmuch-home-function (lambda () (notmuch-search "folder:INBOX"))) -(setq +notmuch-sync-backend 'offlineimap) + ("THIS" font-lock-constant-face bold))) + :hook (org-mode . hl-todo-mode)) (use-package! nov :mode ("\\.epub\\'" . nov-mode) @@ -198,7 +158,13 @@ (add-hook! 'nov-mode-hook '(olivetti-mode)) -(after! olivetti (setq olivetti-body-width 70)) +;; (after! olivetti (setq olivetti-body-width 70)) + +(use-package! olivetti + :init + (add-hook! 'org-mode-hook '(olivetti-mode (lambda () (display-line-numbers-mode -1))))) + +;; (add-hook! 'org-mode-hook '(olivetti-mode (lambda () (display-line-numbers-mode -1)))) (use-package! org-auto-tangle :defer t @@ -214,8 +180,53 @@ (setq org-noter-doc-split-fraction '(0.75 . 0.75)) (setq org-noter-default-notes-file-names '())) +;; (use-package! roam +;; :config (setq org-roam-directory "~/Notes/Org/Roam" +;; org-roam-dailies-directory "Daily")) + (after! org-roam (setq org-roam-directory "~/Notes/Org/Roam") (setq org-roam-dailies-directory "Daily")) -(drag-stuff-global-mode t) +(defun org-path (filename) + "Expand filename relative to the default org-path" + (expand-file-name filename +user-org-path)) + +(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 + "\n"))))) + +(defun my-weebery-is-always-greater () + (let* ((banner '("EMACS " + "███▄ ▄███▓ ▒█████ ▒█████ ▓█████▄ " + "▓██▒▀█▀ ██▒▒██▒ ██▒▒██▒ ██▒▒██▀ ██▌" + "▓██ ▓██░▒██░ ██▒▒██░ ██▒░██ █▌" + "▒██ ▒██ ▒██ ██░▒██ ██░░▓█▄ ▌" + "▒██▒ ░██▒░ ████▓▒░░ ████▓▒░░▒████▓ " + "░ ▒░ ░ ░░ ▒░▒░▒░ ░ ▒░▒░▒░ ▒▒▓ ▒ " + "░ ░ ░ ░ ▒ ▒░ ░ ▒ ▒░ ░ ▒ ▒ " + "░ ░ ░ ░ ░ ▒ ░ ░ ░ ▒ ░ ░ ░ " + " ░ ░ ░ ░ ░ ░ " + " ░ ")) + (longest-line (apply #'max (mapcar #'length banner)))) + (put-text-property + (point) + (dolist (line banner (point)) + (insert (+doom-dashboard--center + +doom-dashboard--width + (concat line (make-string (max 0 (- longest-line (length line))) 32))) + "\n")) + 'face 'doom-dashboard-banner))) diff --git a/config/dot_config/doom/config.html b/config/dot_config/doom/config.html index a2ffa1b..d8310c4 100644 --- a/config/dot_config/doom/config.html +++ b/config/dot_config/doom/config.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Emacs Config @@ -210,54 +210,54 @@ body {

Table of Contents

This config file is built on doom-emacs 3.0.0-pre and emacs 29.2.

-
-

1. Header

+
+

1. Header

This header will be the first codeblock in the config file.

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

2. Keybindings

+
+

2. Keybindings

These keybindings extend the default doom bindings, either because the defaults were confusing to me or because the binding did not yet exist. @@ -344,392 +344,401 @@ These keybindings extend the default doom bindings, either because the defaults

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

3. Base Config

+
+

3. Base Config

-;; Basic User Settings
-(setq user-full-name "Jonathan Jenne"
-      user-mail-address "johnnie@posteo.de")
+;; 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"))
+;; 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)
+;; Display Line numbers
+(setq display-line-numbers-type t)
 
-
-

4. Appearance

+
+

4. Appearance

-
;; Fonts
-(setq doom-font
-      (font-spec :family "IBM Plex Mono" :size 18 :weight 'medium))
-(setq doom-variable-pitch-font
-      (font-spec :family "IBM Plex Serif" :size 18 :weight 'medium))
-(setq variable-pitch
-      (font-spec :family "IBM Plex Serif" :size 18 :weight 'medium))
+
;; Fonts
+(setq doom-font
+      (font-spec :family "IBM Plex Mono" :size 18 :weight 'medium))
+(setq doom-variable-pitch-font
+      (font-spec :family "IBM Plex Serif" :size 18 :weight 'medium))
+(setq variable-pitch
+      (font-spec :family "IBM Plex Serif" :size 18 :weight 'medium))
 
-;; Dashboard
-(defun my-weebery-is-always-greater ()
-  (let* ((banner '("EMACS                                "
-                   "███▄ ▄███▓ ▒█████   ▒█████  ▓█████▄  "
-                   "▓██▒▀█▀ ██▒▒██▒  ██▒▒██▒  ██▒▒██▀ ██▌"
-                   "▓██    ▓██░▒██░  ██▒▒██░  ██▒░██   █▌"
-                   "▒██    ▒██ ▒██   ██░▒██   ██░░▓█▄   ▌"
-                   "▒██▒   ░██▒░ ████▓▒░░ ████▓▒░░▒████▓ "
-                   "░ ▒░   ░  ░░ ▒░▒░▒░ ░ ▒░▒░▒░  ▒▒▓  ▒ "
-                   "░  ░      ░  ░ ▒ ▒░   ░ ▒ ▒░  ░ ▒  ▒ "
-                   "░      ░   ░ ░ ░ ▒  ░ ░ ░ ▒   ░ ░  ░ "
-                   "       ░       ░ ░      ░ ░     ░    "
-                   "                              ░      "))
-                  (longest-line (apply #'max (mapcar #'length banner))))
-    (put-text-property
-     (point)
-     (dolist (line banner (point))
-       (insert (+doom-dashboard--center
-                +doom-dashboard--width
-                (concat line (make-string (max 0 (- longest-line (length line))) 32)))
-               "\n"))
-     'face 'doom-dashboard-banner)))
-(setq +doom-dashboard-ascii-banner-fn #'my-weebery-is-always-greater)
+;; Dashboard
+(defun my-weebery-is-always-greater ()
+  (let* ((banner '("EMACS                                "
+                   "███▄ ▄███▓ ▒█████   ▒█████  ▓█████▄  "
+                   "▓██▒▀█▀ ██▒▒██▒  ██▒▒██▒  ██▒▒██▀ ██▌"
+                   "▓██    ▓██░▒██░  ██▒▒██░  ██▒░██   █▌"
+                   "▒██    ▒██ ▒██   ██░▒██   ██░░▓█▄   ▌"
+                   "▒██▒   ░██▒░ ████▓▒░░ ████▓▒░░▒████▓ "
+                   "░ ▒░   ░  ░░ ▒░▒░▒░ ░ ▒░▒░▒░  ▒▒▓  ▒ "
+                   "░  ░      ░  ░ ▒ ▒░   ░ ▒ ▒░  ░ ▒  ▒ "
+                   "░      ░   ░ ░ ░ ▒  ░ ░ ░ ▒   ░ ░  ░ "
+                   "       ░       ░ ░      ░ ░     ░    "
+                   "                              ░      "))
+                  (longest-line (apply #'max (mapcar #'length banner))))
+    (put-text-property
+     (point)
+     (dolist (line banner (point))
+       (insert (+doom-dashboard--center
+                +doom-dashboard--width
+                (concat line (make-string (max 0 (- longest-line (length line))) 32)))
+               "\n"))
+     'face 'doom-dashboard-banner)))
+(setq +doom-dashboard-ascii-banner-fn #'my-weebery-is-always-greater)
 
-(remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-shortmenu)
-(remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-footer)
-(remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-loaded)
+(remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-shortmenu)
+(remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-footer)
+(remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-loaded)
 
-;; 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)))
+;; 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)))
 
-
-

5. Org Mode

+
+

5. Org Mode

-
-

5.1. General Settings

+
+

5.1. General Settings

-
(setq +user-org-path "~/Notes/Org")
-(defun org-path (filename) (expand-file-name filename +user-org-path))
+
(setq +user-org-path "~/Notes/Org")
+(defun org-path (filename) (expand-file-name filename +user-org-path))
 
-(after! org
-  (map! :map org-mode-map :localleader "g s" #'org-habit-stats-view-habit-at-point)
-  (setq org-directory +user-org-path
-        org-src-tab-acts-natively t
-        org-todo-sets '(("TODO" "PROJ" "LOOP" "STRT" "WAIT" "HOLD" "IDEA" "DONE" "KILL")
-                       ("[ ]" "[-]" "[?]" "[X]")
-                       ("THIS" "EXAMPLE"))))
+(use-package! org
+  :config
+  (setq ;; General
+   org-directory +user-org-path
+   org-src-tab-acts-natively t
 
-(add-hook! 'org-mode-hook '(olivetti-mode (lambda () (display-line-numbers-mode -1))))
+   ;; Org Export
+   org-export-exclude-tags '("toc")
 
-(add-hook! 'org-after-todo-state-change-hook '(org-habit-stats-update-properties))
+   ;; Org Capture
+   +org-capture-notes-file (org-path "Notes.org")
+   +org-capture-todo-file (org-path "Todo.org")
+   +org-capture-journal-file (org-path "Journal.org")
+   +org-capture-cooking-file (org-path "Cooking.org")
+   +org-capture-nepali-file (org-path "Nepali.org")
 
+   ;; Org Agenda
+   org-agenda-show-all-dates t
+   org-agenda-span 4
+   org-agenda-start-day "+0d"
+   org-agenda-tag-filter-preset '("-drill")
+   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)
+   ;; org-agenda-spillover-skip-function '(org-agenda-skip-entry-if 'todo 'done)
+
+   ;; Org Todo
+   org-todo-keywords
+   '((sequence "TODO(t)" "|" "DONE(d)")
+     (sequence "THIS(T)" "EXAMPLE")))
+
+  :bind (:map org-mode-map ("<localleader> g s" . #'org-habit-stats-view-habit-at-point))
+  :hook (org-after-todo-state-change . org-habit-stats-update-properties)
+  :init
+  (add-to-list 'org-modules 'org-habit)
+  (add-hook 'org-export-before-processing-functions 'my-org-inline-css-hook))
 
-(add-to-list 'org-modules 'org-habit)
 
-
-

5.2. Org Export

+
+

5.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-functions 'my-org-inline-css-hook)
+;; Org Export
 
 
-
-

5.3. Org Capture

+
+

5.3. Org Capture

-
(after! org (setq +org-capture-notes-file (org-path "Notes.org")
-                  +org-capture-todo-file (org-path "Todo.org")
-                  +org-capture-journal-file (org-path "Journal.org")
-                  +org-capture-cooking-file (org-path "Cooking.org")
-                  +org-capture-nepali-file (org-path "Nepali.org")))
+
+(after! org (setq org-capture-templates
+                  '(("t" "Personal Todo" entry
+                     (file +org-capture-todo-file)
+                     "* TODO %?\n" :prepend t)
 
-(after! org (setq org-capture-templates
-                  '(("t" "Personal Todo" entry
-                     (file +org-capture-todo-file)
-                     "* TODO %?\n" :prepend t)
+                    ("r" "Recipe" entry
+      (file+headline +org-capture-cooking-file "Unsorted")
+      "* NEVERMADE %?
+:PROPERTIES:
+:Author:
+:Source:
+:Sent_by:
+:Yield:
+:Prep_Time:
+:Cook_Time:
+:Total_Time:
+:Cost:
+:Description:
+:URL:
+:Added: %u
+:END:
 
-                    ("r" "Recipe" entry
-      (file+headline +org-capture-cooking-file "Unsorted")
-      "* NEVERMADE %?
-:PROPERTIES:
-:Author:
-:Source:
-:Sent_by:
-:Yield:
-:Prep_Time:
-:Cook_Time:
-:Total_Time:
-:Cost:
-:Description:
-:URL:
-:Added: %u
-:END:
-
-- [ ] Ingredient 1
+- [ ] Ingredient 1
 
 
-1. First Step")
+1. First Step")
 
-                    ("n" "Nepali")
+                    ("n" "Nepali")
 
-                    ("nw" "Nepali Word" entry
-                     (file+headline +org-capture-nepali-file "Nepali Words")
-                     "* %^{Nepali Word} :drill:\n%\\1\n** Answer\n%^{Translation}" :prepend t :immediate-finish t)
+                    ("nw" "Nepali Word" entry
+                     (file+headline +org-capture-nepali-file "Nepali Words")
+                     "* %^{Nepali Word} :drill:\n%\\1\n** Answer\n%^{Translation}" :prepend t :immediate-finish t)
 
-                    ("j" "Daily Journal" entry
-                     (file+olp+datetree +org-capture-journal-file)
-                     "* %U %?\n" :prepend t))))
+                    ("j" "Daily Journal" entry
+                     (file+olp+datetree +org-capture-journal-file)
+                     "* %U %?\n" :prepend t))))
 
 
-
-

5.4. Org Agenda

-
-
-
(after! org (setq
-             ;; org-agenda-spillover-skip-function '(org-agenda-skip-entry-if 'todo 'done)
-             org-agenda-show-all-dates t
-             org-agenda-span 4
-             org-agenda-start-day "+0d"
-             org-agenda-tag-filter-preset '("-drill")
-             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)))
-
-
-
-
-
-

6. Packages

+
+

6. Packages

-
-

6.1. doom-modeline

+
+

6.1. doom-modeline

The doom modeline can be configured to show different information like time and date, battery info and more.

-
(after! doom-modeline
-  (setq doom-modeline-battery t)
-  (setq doom-modeline-major-mode-icon t))
+
(after! doom-modeline
+  (setq doom-modeline-battery t)
+  (setq doom-modeline-major-mode-icon t))
 
-(add-hook 'doom-after-init-hook #'display-battery-mode)
-(add-hook 'doom-after-init-hook #'display-time-mode)
+(add-hook 'doom-after-init-hook #'display-battery-mode)
+(add-hook 'doom-after-init-hook #'display-time-mode)
 
-
-

6.2. evil-snipe

+
+

6.2. evil-snipe

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

6.3. hl-todo

+
+

6.3. hl-todo

-
(add-hook 'org-mode-hook #'hl-todo-mode)
+
(add-hook 'org-mode-hook #'hl-todo-mode)
 
-(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)
-                                              ("THIS" font-lock-constant-face bold))))
+(after! hl-todo
+  (setq hl-todo-keyword-faces
+        '(("TODO" warning 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)
+          ("THIS" font-lock-constant-face bold))))
 
-
-

6.4. notmuch

+
+

6.4. notmuch

-
(setq +notmuch-home-function (lambda () (notmuch-search "folder:INBOX")))
-(setq +notmuch-sync-backend 'offlineimap)
+
(setq +notmuch-home-function (lambda () (notmuch-search "folder:INBOX")))
+(setq +notmuch-sync-backend 'offlineimap)
 
-
-

6.5. nov.el

+
+

6.5. nov.el

-(use-package! nov
-  :mode ("\\.epub\\'" . nov-mode)
-  :config
-  (setq nov-text-width 70))
+(use-package! nov
+  :mode ("\\.epub\\'" . nov-mode)
+  :config
+  (setq nov-text-width 70))
 
-(add-hook! 'nov-mode-hook '(olivetti-mode))
+(add-hook! 'nov-mode-hook '(olivetti-mode))
 
 
-
-

6.6. olivetti

+
+

6.6. olivetti

Centers the text. This is used for reading books in

-
(after! olivetti (setq olivetti-body-width 70))
+
(use-package! olivetti
+  :defer t
+  :config (setq olivetti-body-width 70)
+  :init
+  (add-hook! 'org-mode-hook '(olivetti-mode (lambda () (display-line-numbers-mode -1)))))
 
-
-

6.7. org-auto-tangle

+
+

6.7. org-auto-tangle

This package automatically tangles all sourceblocks in an org file whenever that file is saved. It is very handy to not have to call the tangle command everytime you save.

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

6.8. org-drill

+
+

6.8. org-drill

A package for learning and memorizing using spaced repetition, inspired by applications like Anki.

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

6.9. org-noter

+
+

6.9. org-noter

-
(after! org-noter
-  (setq org-noter-notes-search-path '("~/Notes/Org"))
-  (setq org-noter-always-create-frame nil)
-  (setq org-noter-doc-split-fraction '(0.75 . 0.75))
-  (setq org-noter-default-notes-file-names '()))
+
(after! org-noter
+  (setq org-noter-notes-search-path '("~/Notes/Org"))
+  (setq org-noter-always-create-frame nil)
+  (setq org-noter-doc-split-fraction '(0.75 . 0.75))
+  (setq org-noter-default-notes-file-names '()))
 
 
-
-

6.10. org-roam

+
+

6.10. org-roam

-
(after! org-roam
-  (setq org-roam-directory "~/Notes/Org/Roam")
-  (setq org-roam-dailies-directory "Daily"))
+
(after! org-roam
+  (setq org-roam-directory "~/Notes/Org/Roam")
+  (setq org-roam-dailies-directory "Daily"))
 
 
-
-

6.11. drag-stuff

+
+

6.11. drag-stuff

With drag stuff you can use M-UP and M-DOWN to move lines. You can also mark a region and use M-LEFT and M-RIGHT to move it left and right.

-
(drag-stuff-global-mode t)
+
(drag-stuff-global-mode t)
 
+
+

7. Functions

+
+
+
(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")))))
+
+
+
+
+
+

Author: Jonathan Jenne / Inhji

-

Created: 2024-03-10 So 13:06

+

Created: 2024-03-11 Mo 13:42

diff --git a/config/dot_config/doom/config.org b/config/dot_config/doom/config.org index f33f3e6..835e746 100644 --- a/config/dot_config/doom/config.org +++ b/config/dot_config/doom/config.org @@ -15,22 +15,19 @@ This config file is built on doom-emacs ~3.0.0-pre~ and emacs ~29.2~. - [[#base-config][Base Config]] - [[#appearance][Appearance]] - [[#org-mode][Org Mode]] - - [[#general-settings][General Settings]] - - [[#org-export][Org Export]] - - [[#org-capture][Org Capture]] - - [[#org-agenda][Org Agenda]] - [[#packages][Packages]] - [[#doom-modeline][doom-modeline]] + - [[#drag-stuff][drag-stuff]] - [[#evil-snipe][evil-snipe]] + - [[#heaven-and-hell][heaven-and-hell]] - [[#hl-todo][hl-todo]] - - [[#notmuch][notmuch]] - [[#novel][nov.el]] - [[#olivetti][olivetti]] - [[#org-auto-tangle][org-auto-tangle]] - [[#org-drill][org-drill]] - [[#org-noter][org-noter]] - [[#org-roam][org-roam]] - - [[#drag-stuff][drag-stuff]] +- [[#functions][Functions]] * Header This header will be the first codeblock in the config file. @@ -61,7 +58,6 @@ These keybindings extend the default doom bindings, either because the defaults (map! :n "" #'org-drill) (map! "C-M-+" #'doom/increase-font-size) (map! "C-#" #'comment-line) -(map! :n "" #'emms-playlist-mode-go) (evil-define-key 'normal dired-mode-map (kbd "DEL") 'dired-up-directory) #+end_src @@ -78,6 +74,9 @@ These keybindings extend the default doom bindings, either because the defaults ;; Useful if default system shell is not bash (setq shell-file-name (executable-find "bash")) +;; This is where all org files are sourced from +(setq +user-org-path "~/Notes/Org") + ;; Display Line numbers (setq display-line-numbers-type t) #+end_src @@ -85,7 +84,6 @@ These keybindings extend the default doom bindings, either because the defaults * Appearance - #+begin_src emacs-lisp ;; Fonts (setq doom-font @@ -96,113 +94,67 @@ These keybindings extend the default doom bindings, either because the defaults (font-spec :family "IBM Plex Serif" :size 18 :weight 'medium)) ;; Dashboard -(defun my-weebery-is-always-greater () - (let* ((banner '("EMACS " - "███▄ ▄███▓ ▒█████ ▒█████ ▓█████▄ " - "▓██▒▀█▀ ██▒▒██▒ ██▒▒██▒ ██▒▒██▀ ██▌" - "▓██ ▓██░▒██░ ██▒▒██░ ██▒░██ █▌" - "▒██ ▒██ ▒██ ██░▒██ ██░░▓█▄ ▌" - "▒██▒ ░██▒░ ████▓▒░░ ████▓▒░░▒████▓ " - "░ ▒░ ░ ░░ ▒░▒░▒░ ░ ▒░▒░▒░ ▒▒▓ ▒ " - "░ ░ ░ ░ ▒ ▒░ ░ ▒ ▒░ ░ ▒ ▒ " - "░ ░ ░ ░ ░ ▒ ░ ░ ░ ▒ ░ ░ ░ " - " ░ ░ ░ ░ ░ ░ " - " ░ ")) - (longest-line (apply #'max (mapcar #'length banner)))) - (put-text-property - (point) - (dolist (line banner (point)) - (insert (+doom-dashboard--center - +doom-dashboard--width - (concat line (make-string (max 0 (- longest-line (length line))) 32))) - "\n")) - 'face 'doom-dashboard-banner))) (setq +doom-dashboard-ascii-banner-fn #'my-weebery-is-always-greater) - (remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-shortmenu) (remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-footer) (remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-loaded) ;; 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 (("" . heaven-and-hell-toggle-theme))) #+end_src * Org Mode -** General Settings -#+begin_src emacs-lisp -(setq +user-org-path "~/Notes/Org") -(defun org-path (filename) (expand-file-name filename +user-org-path)) -(after! org - (map! :map org-mode-map :localleader "g s" #'org-habit-stats-view-habit-at-point) - (setq org-directory +user-org-path - org-src-tab-acts-natively t - org-todo-keywords '((sequence "TODO(t)" "|" "DONE(d)") - (sequence "THIS(T)" "EXAMPLE")))) +Org Mode is a tool for note taking, habit tracking, writing, outlining and much much more. You might have heard of it already. -(add-hook! 'org-mode-hook '(olivetti-mode (lambda () (display-line-numbers-mode -1)))) +There are a few things to point out here: -(add-hook! 'org-after-todo-state-change-hook '(org-habit-stats-update-properties)) - - -(add-to-list 'org-modules 'org-habit) -#+end_src - -** Org Export +- org-drill items are excluded from the agenda +- toc headings are excluded from exports #+begin_src emacs-lisp +(use-package! org + :config + (setq ;; General + org-directory +user-org-path + org-src-tab-acts-natively t -(after! org (;; TOC Links will lead to errors when attempting - ;; to export to HTML - setq org-export-exclude-tags '("toc"))) + ;; Org Export + 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 - "\n"))))) + ;; Org Agenda + org-agenda-show-all-dates t + org-agenda-span 4 + org-agenda-start-day "+0d" + org-agenda-tag-filter-preset '("-drill") + 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) + ;; org-agenda-spillover-skip-function '(org-agenda-skip-entry-if 'todo 'done) -;; Org Export -(add-hook 'org-export-before-processing-functions 'my-org-inline-css-hook) + ;; Org Todo + org-todo-keywords + '((sequence "TODO(t)" "|" "DONE(d)") + (sequence "THIS(T)" "EXAMPLE")) -#+end_src + ;; Org Capture + +org-capture-notes-file (org-path "Notes.org") + +org-capture-todo-file (org-path "Todo.org") + +org-capture-journal-file (org-path "Journal.org") + +org-capture-cooking-file (org-path "Cooking.org") + +org-capture-nepali-file (org-path "Nepali.org") + org-capture-templates + '(("t" "Personal Todo" entry + (file +org-capture-todo-file) + "* TODO %?\n" :prepend t) -** Org Capture -#+begin_src emacs-lisp -(after! org (setq +org-capture-notes-file (org-path "Notes.org") - +org-capture-todo-file (org-path "Todo.org") - +org-capture-journal-file (org-path "Journal.org") - +org-capture-cooking-file (org-path "Cooking.org") - +org-capture-nepali-file (org-path "Nepali.org"))) - -(after! org (setq org-capture-templates - '(("t" "Personal Todo" entry - (file +org-capture-todo-file) - "* TODO %?\n" :prepend t) - - ("r" "Recipe" entry + ("r" "Recipe" entry (file+headline +org-capture-cooking-file "Unsorted") "* NEVERMADE %? :PROPERTIES: @@ -224,34 +176,23 @@ These keybindings extend the default doom bindings, either because the defaults 1. First Step") - ("n" "Nepali") + ("n" "Nepali") - ("nw" "Nepali Word" entry - (file+headline +org-capture-nepali-file "Nepali Words") - "* %^{Nepali Word} :drill:\n%\\1\n** Answer\n%^{Translation}" :prepend t :immediate-finish t) + ("nw" "Nepali Word" entry + (file+headline +org-capture-nepali-file "Nepali Words") + "* %^{Nepali Word} :drill:\n%\\1\n** Answer\n%^{Translation}" :prepend t :immediate-finish t) - ("j" "Daily Journal" entry - (file+olp+datetree +org-capture-journal-file) - "* %U %?\n" :prepend t)))) + ("j" "Daily Journal" entry + (file+olp+datetree +org-capture-journal-file) + "* %U %?\n" :prepend t))) + + + :bind (:map org-mode-map (" g s" . #'org-habit-stats-view-habit-at-point)) + :hook (org-after-todo-state-change . org-habit-stats-update-properties) + :init + (add-to-list 'org-modules 'org-habit) + (add-hook 'org-export-before-processing-functions 'my-org-inline-css-hook)) -#+end_src -** Org Agenda -#+begin_src emacs-lisp -(after! org (setq - ;; org-agenda-spillover-skip-function '(org-agenda-skip-entry-if 'todo 'done) - org-agenda-show-all-dates t - org-agenda-span 4 - org-agenda-start-day "+0d" - org-agenda-tag-filter-preset '("-drill") - 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))) #+end_src * Packages @@ -268,16 +209,39 @@ The doom modeline can be configured to show different information like time and (add-hook 'doom-after-init-hook #'display-time-mode) #+end_src +** drag-stuff + +With drag stuff you can use ~M-UP~ and ~M-DOWN~ to move lines. You can also mark a region and use ~M-LEFT~ and ~M-RIGHT~ to move it left and right. + +#+begin_src emacs-lisp +(drag-stuff-global-mode t) +#+end_src ** evil-snipe #+begin_src emacs-lisp (after! evil-snipe (setq evil-snipe-scope 'whole-visible)) +#+end_src +** heaven-and-hell + +Heaven and hell is a theme switcher, which allows you to select a dark and light theme and toggle between them using a key. + +#+begin_src emacs-lisp +(use-package! heaven-and-hell + :ensure t + :config + (setq heaven-and-hell-theme-type 'dark ;; Omit to use light by default + heaven-and-hell-themes + '((light . doom-gruvbox-light) + (dark . doom-gruvbox)) ;; Themes can be the list: (dark . (tsdh-dark wombat)) + heaven-and-hell-load-theme-no-confirm t) + :hook (after-init . heaven-and-hell-init-hook) + :bind (("" . heaven-and-hell-toggle-theme))) + #+end_src ** hl-todo #+begin_src emacs-lisp -(add-hook 'org-mode-hook #'hl-todo-mode) - -(after! hl-todo +(use-package! hl-todo + :config (setq hl-todo-keyword-faces '(("TODO" warning bold) ("EXAMPLE" font-lock-keyword-face bold) @@ -285,15 +249,10 @@ The doom modeline can be configured to show different information like time and ("DEPRECATED" font-lock-doc-face bold) ("NOTE" success bold) ("BUG" error bold) - ("THIS" font-lock-constant-face bold)))) + ("THIS" font-lock-constant-face bold))) + :hook (org-mode . hl-todo-mode)) #+end_src -** notmuch - -#+begin_src emacs-lisp -(setq +notmuch-home-function (lambda () (notmuch-search "folder:INBOX"))) -(setq +notmuch-sync-backend 'offlineimap) -#+end_src ** nov.el #+begin_src emacs-lisp @@ -310,7 +269,13 @@ The doom modeline can be configured to show different information like time and Centers the text. This is used for reading books in #+begin_src emacs-lisp -(after! olivetti (setq olivetti-body-width 70)) +;; (after! olivetti (setq olivetti-body-width 70)) + +(use-package! olivetti + :init + (add-hook! 'org-mode-hook '(olivetti-mode (lambda () (display-line-numbers-mode -1))))) + +;; (add-hook! 'org-mode-hook '(olivetti-mode (lambda () (display-line-numbers-mode -1)))) #+end_src ** org-auto-tangle @@ -335,6 +300,7 @@ A package for learning and memorizing using *spaced repetition*, inspired by app ** org-noter +A annotation tool for org-mode #+begin_src emacs-lisp (after! org-noter @@ -346,15 +312,60 @@ A package for learning and memorizing using *spaced repetition*, inspired by app #+end_src ** org-roam #+begin_src emacs-lisp +;; (use-package! roam +;; :config (setq org-roam-directory "~/Notes/Org/Roam" +;; org-roam-dailies-directory "Daily")) + (after! org-roam (setq org-roam-directory "~/Notes/Org/Roam") (setq org-roam-dailies-directory "Daily")) #+end_src -** drag-stuff - -With drag stuff you can use ~M-UP~ and ~M-DOWN~ to move lines. You can also mark a region and use ~M-LEFT~ and ~M-RIGHT~ to move it left and right. +* Functions #+begin_src emacs-lisp -(drag-stuff-global-mode t) + +(defun org-path (filename) + "Expand filename relative to the default org-path" + (expand-file-name filename +user-org-path)) + +(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 + "\n"))))) + +(defun my-weebery-is-always-greater () + (let* ((banner '("EMACS " + "███▄ ▄███▓ ▒█████ ▒█████ ▓█████▄ " + "▓██▒▀█▀ ██▒▒██▒ ██▒▒██▒ ██▒▒██▀ ██▌" + "▓██ ▓██░▒██░ ██▒▒██░ ██▒░██ █▌" + "▒██ ▒██ ▒██ ██░▒██ ██░░▓█▄ ▌" + "▒██▒ ░██▒░ ████▓▒░░ ████▓▒░░▒████▓ " + "░ ▒░ ░ ░░ ▒░▒░▒░ ░ ▒░▒░▒░ ▒▒▓ ▒ " + "░ ░ ░ ░ ▒ ▒░ ░ ▒ ▒░ ░ ▒ ▒ " + "░ ░ ░ ░ ░ ▒ ░ ░ ░ ▒ ░ ░ ░ " + " ░ ░ ░ ░ ░ ░ " + " ░ ")) + (longest-line (apply #'max (mapcar #'length banner)))) + (put-text-property + (point) + (dolist (line banner (point)) + (insert (+doom-dashboard--center + +doom-dashboard--width + (concat line (make-string (max 0 (- longest-line (length line))) 32))) + "\n")) + 'face 'doom-dashboard-banner))) + #+end_src