From af0806f06cc98353b09254da5c023e9b321f3997 Mon Sep 17 00:00:00 2001
From: Joel Grunbaum <joelgrun@gmail.com>
Date: Wed, 27 Jan 2021 11:30:03 +0000
Subject: [PATCH] Added langtool grammar checking

---
 config.org |  436 +++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 334 insertions(+), 102 deletions(-)

diff --git a/config.org b/config.org
index ae1c587..e1c2237 100644
--- a/config.org
+++ b/config.org
@@ -1,14 +1,21 @@
 #+TITLE: My Emacs configuration
-#  LocalWords:  poppler mingw emacs eq nt gnuplot setenv mapconcat el cond minibuffer pdf color Smartparens smartparens yas aindent whitespace eldoc ielm ibuffer hippie pscp pos Spaceline spaceline powerline spacemacs seperator dir Yasnippet yasnippet flycheck magit fullscreen CEDET askifnotset semanticdb EDE ede gdb srefactor analyzer eval cdb autosetup ghostscript math unicode reftex bibtex TeXcount texcount str latin rkt PlantUML plantuml autoload alist matlab verilog ds vh src fontify natively fortran dvipng plist xcolor EXWM Zenburn setq zenburn defun dolist init config DejaVu ispell aspell flyspell kbd recentf sexp ov bg listp defadvice progn prog keyfreq autosave dabbrev hl gc linum linux utf RET ARG arg configs backends contribs AucTex tex auctex LaTeX url htmlize linter backend writegood ggtags gtags dired eshell asm cd dwim VHDL defvar ctags vhdl concat sp html awk defalias cedet mips IPython ein contrib pandoc dokuwiki EMMS MPD emms toc favicon href css stylesheet async dataLayer gtag js UA sitelinks br Github postamble isso center disqus onclick Disqus javascript dsq createElement getElementsByTagName xml urlset xmlns curr loc
+#  LocalWords:  poppler mingw emacs eq nt gnuplot setenv mapconcat el cond minibuffer pdf color Smartparens smartparens yas aindent whitespace eldoc ielm ibuffer hippie pscp pos Spaceline spaceline powerline spacemacs seperator dir Yasnippet yasnippet flycheck magit fullscreen CEDET askifnotset semanticdb EDE ede gdb srefactor analyzer eval cdb autosetup ghostscript math unicode reftex bibtex TeXcount texcount str latin rkt PlantUML plantuml autoload alist matlab verilog ds vh src fontify natively fortran dvipng plist xcolor EXWM Zenburn setq zenburn defun dolist init config DejaVu ispell aspell flyspell kbd recentf sexp ov bg listp defadvice progn prog keyfreq autosave dabbrev hl gc linum linux utf RET ARG arg configs backends contribs AucTex tex auctex LaTeX url htmlize linter backend writegood ggtags gtags dired eshell asm cd dwim VHDL defvar ctags vhdl concat sp html awk defalias cedet mips IPython ein contrib pandoc dokuwiki EMMS MPD emms toc favicon href css stylesheet async dataLayer gtag js UA sitelinks br Github postamble isso center disqus onclick Disqus javascript dsq createElement getElementsByTagName xml urlset xmlns curr loc RSS elfeed
 
-* COMMENT Windows dependencies
-Dependencies needed for Aspell, poppler PDF-tools, compilers and ghost-script provided by mingw64 in windows.
+* OS dependencies
+Windows and Mac have some interesting paths when starting emacs which needs to be fixed.
+Using mingw64 in windows and general path in mac.
 #+BEGIN_SRC emacs-lisp
-  (when (eq system-type 'windows-nt)
-    (add-to-list 'exec-path "C:/msys64/usr/bin")
-    (add-to-list 'exec-path "C:/msys64/mingw64/bin")
-    (add-to-list 'exec-path "c:/Program Files/gnuplot")
-    (setenv "PATH" (mapconcat #'identity exec-path path-separator)))
+  (cond ((eq system-type 'windows-nt)
+         (add-to-list 'exec-path "C:/msys64/usr/bin")
+         (add-to-list 'exec-path "C:/msys64/mingw64/bin")
+         (add-to-list 'exec-path "c:/Program Files/gnuplot")
+         (setenv "PATH" (mapconcat #'identity exec-path path-separator)))
+        ((eq system-type 'darwin)
+         (use-package exec-path-from-shell
+           :ensure t
+           :config
+           (exec-path-from-shell-initialize))
+         (setq default-directory "~/")))
 #+END_SRC
 
 * Aesthetic changes
@@ -40,6 +47,27 @@
            (load-theme 'doom-one t)
            (doom-themes-visual-bell-config)
            (doom-themes-org-config)))
+        ((eq emacs-theme 'nord)
+         (use-package nord-theme
+           :ensure t
+           :init
+           (disable-all-themes)
+           :config
+           (load-theme 'nord t)))
+        ((eq emacs-theme 'solarized)
+         (use-package solarized-theme
+           :ensure t
+           :init
+           (disable-all-themes)
+           :config
+           (load-theme 'solarized-dark t)))
+        ((eq emacs-theme 'jetbrains-darcula)
+         (use-package jetbrains-darcula-theme
+           :ensure t
+           :init
+           (disable-all-themes)
+           :config
+           (load-theme 'jetbrains-darcula t)))
         ((eq emacs-theme 'none)
          (disable-all-themes)))
 #+END_SRC
@@ -47,9 +75,13 @@
 ** Default font
 Set default font and faces.
 #+BEGIN_SRC emacs-lisp 
-  ;; (set-frame-font "DejaVu Sans Mono" nil t)
-  (set-frame-font "Dank Mono-11" nil t)
-  ;; (set-frame-font "Source Code Pro-10" nil t)
+  (cond ((member "Dank Mono" (font-family-list))
+         (set-frame-font "Dank Mono-11" nil t))
+        ((member "DejaVu Sans Mono" (font-family-list))
+         (set-frame-font "DejaVu Sans Mono" nil t))
+        ((member "Source Code Pro" (font-family-list))
+         (set-frame-font "Source Code Pro-10" nil t)))
+
   (set-face-italic 'font-lock-comment-face t)
   (set-face-italic 'font-lock-keyword-face t)
 #+END_SRC
@@ -61,6 +93,18 @@
   (tool-bar-mode 0)
   (scroll-bar-mode 1)
 #+END_SRC
+* COMMENT EXWM
+Emacs window manager.
+Tiling window manager that runs in emacs.
+Open external applications with =s-&=
+#+BEGIN_SRC emacs-lisp
+  (use-package exwm
+    :ensure t
+    :defer t
+    :config
+    (require 'exwm-config)
+    (exwm-config-default))
+#+END_SRC
 
 * Writing requirements
 ** Spellchecking
@@ -70,12 +114,24 @@
   (require 'ispell)
   (setq-default ispell-program-name "aspell")
   (setq-default ispell-local-dictionary "en_AU")
+  (add-hook 'tex-mode-hook 'flyspell-mode)
   (add-hook 'latex-mode-hook 'flyspell-mode)
+  (add-hook 'TeX-mode-hook 'flyspell-mode)
+  (add-hook 'LaTeX-mode-hook 'flyspell-mode)
   ;; (add-hook 'latex-mode-hook 'flyspell-buffer)
   (add-hook 'org-mode-hook 'flyspell-mode)
   ;; (add-hook 'org-mode-hook 'flyspell-buffer)
-#+END_SRC
+  (diminish 'flyspell-mode)
 
+#+END_SRC
+** Language Tool
+Language tool is an open source grammar checker.
+#+BEGIN_SRC emacs-lisp
+  (use-package langtool
+    :ensure t
+    :init
+    (setq langtool-java-classpath "/usr/share/languagetool:/usr/share/java/languagetool/*"))
+#+END_SRC
 ** Switch-window
 Helps to change windows easily when many are open at once.
 #+BEGIN_SRC emacs-lisp
@@ -114,9 +170,9 @@
 Helpful pdf viewer.
 #+BEGIN_SRC emacs-lisp
   (use-package pdf-tools
-	:ensure t
-	:config
-	(pdf-tools-install 1))
+    :ensure t
+    :config
+    (pdf-tools-install 1))
 #+END_SRC
 
 ** COMMENT Writegood-mode
@@ -336,12 +392,12 @@
 ** Pretty symbols
 Why not? They make it look nice.
 #+BEGIN_SRC emacs-lisp
-  (when window-system
-    (use-package pretty-mode
-      :ensure t
-      :diminish t
-      :config
-      (global-pretty-mode)))
+  (use-package pretty-mode
+    :ensure t
+    :diminish t
+    :if window-system
+    :config
+    (global-pretty-mode))
 #+END_SRC
 
 ** COMMENT Find file other window
@@ -420,8 +476,7 @@
 #+BEGIN_SRC emacs-lisp
   (use-package rainbow-delimiters
     :ensure t
-    :init
-      (add-hook 'prog-mode-hook #'rainbow-delimiters-mode))
+    :hook (prog-mode . rainbow-delimiters-mode))
 #+END_SRC
 
 ** Following whitespace
@@ -459,7 +514,7 @@
 ** eldoc
 Shows function arguments in echo area below mode line.
 #+BEGIN_SRC emacs-lisp
-  (diminish eldoc-mode)
+  (diminish 'eldoc-mode)
   (add-hook 'emacs-lisp-mode-hook 'eldoc-mode)
   (add-hook 'lisp-interaction-mode-hook 'eldoc-mode)
   (add-hook 'ielm-mode-hook 'eldoc-mode)
@@ -559,18 +614,20 @@
 #+BEGIN_SRC emacs-lisp
   (setq c-default-style '((java-mode . "java")
                          (awk-mode . "awk")
-                         (other . "k&r")))
+                         (other . "linux")))
 #+END_SRC
 
 ** Coding system
-Cause we all love UTF8
+Cause we all love UTF8.
 #+BEGIN_SRC emacs-lisp
   (set-terminal-coding-system 'utf-8)
   (set-keyboard-coding-system 'utf-8)
   (set-language-environment "UTF-8")
   (prefer-coding-system 'utf-8)
   (setq-default indent-tabs-mode t
-            tab-width 4)
+                tab-width 8
+                c-basic-offset tab-width
+                cperl-indent-level tab-width)
   (delete-selection-mode)
   (global-set-key (kbd "RET") 'newline-and-indent)
 #+END_SRC
@@ -639,6 +696,28 @@
   (defalias 'yes-or-no-p 'y-or-n-p)
 #+END_SRC
 
+** COMMENT Sublime-like minimap
+Get a minimap preview of the file on the side like sublime text.
+Want to make work but need to find a good way of doing so.
+#+BEGIN_SRC emacs-lisp
+  (use-package sublimity
+    :ensure t
+    :config
+    (require 'sublimity-scroll)
+    (setq sublimity-scroll-weight 4
+          sublimity-scroll-drift-length 3)
+    (require 'sublimity-map)
+    (setq sublimity-map-size 20
+          sublimity-map-scale 0.3)
+    (sublimity-map-set-delay nil)
+    (sublimity-mode 1))
+
+  (use-package minimap
+    :ensure t
+    :config
+    (minimap-mode))
+#+END_SRC
+
 * Mode line tweaks
 Diminish is used but is included in init.el such that it can be used throughout this document
 ** Spaceline
@@ -662,6 +741,15 @@
 (setq powerline-default-separator nil)
 #+END_SRC
 
+** Nyan mode
+Use nyan cat as a reference for buffer progression.
+#+BEGIN_SRC emacs-lisp
+  (use-package nyan-mode
+    :ensure t
+    :config
+    (nyan-mode 1))
+#+END_SRC
+
 * Programming tweaks
 ** Yasnippet
 Add snippets, pretty useful.
@@ -671,10 +759,11 @@
     :ensure t
     :diminish yas-minor-mode
     :config
-    (use-package yasnippet-snippets
-      :ensure t)
-    (yas-reload-all)
     (yas-global-mode 1))
+
+  (use-package yasnippet-snippets
+    :ensure t
+    :after yasnippet)
 #+END_SRC
 
 ** Flycheck
@@ -683,6 +772,7 @@
   (use-package flycheck
     :ensure t
     :diminish flycheck-mode
+    :hook (prog-mode . flycheck-mode)
     :config
     (global-flycheck-mode))
 #+END_SRC
@@ -707,6 +797,46 @@
     (global-company-mode)
     (setq company-idle-delay 0)
     (setq company-minimum-prefix-length 3))
+#+END_SRC
+
+** COMMENT LSP Mode
+Use LSP for completion suggestions.
+Causes too much memory usage, need to debug.
+#+BEGIN_SRC emacs-lisp
+  (use-package lsp-mode
+    :ensure t
+    :hook (((c-mode
+             cpp-mode
+             tex-mode
+             latex-mode
+             TeX-mode
+             LaTeX-mode
+             rust-mode
+             sh-mode
+             verilog-mode) . lsp))
+    :init
+    (setq lsp-keymap-prefix "C-c l")
+    :commands lsp
+    :config
+    (add-hook lsp-mode-hook lsp-enable-which-key-integration)
+    (setq read-process-output-max (* 1024 1024))
+    (setq lsp-completion-provider :capf)
+    (add-to-list 'exec-path "~/.cargo/bin"))
+
+  (use-package lsp-ui
+    :ensure t
+    :commands lsp-ui-mode)
+
+  (use-package helm-lsp
+    :ensure t
+    :commands helm-lsp-workspace-symbol)
+#+END_SRC
+
+** Version control
+Settings for emacs' own version control system.
+*** Enable version control on the mode line
+#+BEGIN_SRC emacs-lisp
+  (vc-mode)
 #+END_SRC
 
 ** Magit
@@ -769,9 +899,10 @@
 ** CEDET
 *** Semantic
 Parser library for code, supports many other packages.
-Allows emacs to be mode aware of what is being written.
+Allows emacs to be more aware of what is being written.
 #+BEGIN_SRC emacs-lisp
   (use-package semantic
+    :hook (prog-mode . semantic-mode)
     :config
     (global-semanticdb-minor-mode 1)
     (global-semantic-idle-scheduler-mode 1)
@@ -779,7 +910,7 @@
     (semantic-mode 1))
 #+END_SRC
 
-*** EDE
+*** COMMENT EDE
 Emacs Development Environment.
 Can be used to manage and create build files for a project.
 #+BEGIN_SRC emacs-lisp
@@ -816,22 +947,16 @@
 
 ** Language specific configs
 *** C/C++
-**** COMMENT yasnippet
-Enable yasnippet for C/C++.
-#+BEGIN_SRC emacs-lisp
-(add-hook 'c++-mode-hook 'yas-minor-mode)
-(add-hook 'c-mode-hook 'yas-minor-mode)
-#+END_SRC
-
 **** Flycheck clang
 Add the clang backend for linting.
 #+BEGIN_SRC emacs-lisp
-(use-package flycheck-clang-analyzer
-  :ensure t
-  :config
-  (with-eval-after-load 'flycheck
-    (require 'flycheck-clang-analyzer)
-     (flycheck-clang-analyzer-setup)))
+  (use-package flycheck-clang-analyzer
+    :ensure t
+    :after flycheck
+    :config
+    (with-eval-after-load 'flycheck
+      (require 'flycheck-clang-analyzer)
+       (flycheck-clang-analyzer-setup)))
 #+END_SRC
 
 **** Company
@@ -856,19 +981,30 @@
 
   (use-package company-irony
     :ensure t
+    :after irony
     :config
     (add-to-list 'company-backends '(company-c-headers
                                      company-dabbrev-code
                                      company-irony)))
 #+END_SRC
-
-*** emacs-lisp
-**** COMMENT yasnippet
-Enable yasnippet.
+**** Clang-format
+Automatically format buffer on save.
 #+BEGIN_SRC emacs-lisp
-(add-hook 'emacs-lisp-mode-hook 'yas-minor-mode)
+  (when (file-exists-p "/usr/share/clang/clang-format.el")
+    (load "/usr/share/clang/clang-format.el")
+    (setq clang-format-linux-style (concat "{BasedOnStyle: LLVM,"
+                                           "IndentWidth: 8,"
+                                           "UseTab: Always,"
+                                           "BreakBeforeBraces: Linux,"
+                                           "AllowShortIfStatementsOnASingleLine: false,"
+                                           "IndentCaseLabels: false}"))
+    (setq-default clang-format-style clang-format-linux-style)
+    (defun clang-format-on-save ()
+      (add-hook 'before-save-hook 'clang-format-buffer))
+    (add-hook 'c-mode-hook 'clang-format-on-save)
+    (add-hook 'c++-mode-hook 'clang-format-on-save))
 #+END_SRC
-
+*** emacs-lisp
 **** COMMENT company
 Add slime backend.
 #+BEGIN_SRC emacs-lisp
@@ -905,9 +1041,9 @@
   (use-package tex
     :ensure auctex
     :config
-    (setq TeX-auto-save t)
-    (setq TeX-parse-self t)
-    (setq TeX-view-program-selection '((output-pdf "PDF Tools"))
+    (setq TeX-auto-save t
+          TeX-parse-self t
+          TeX-view-program-selection '((output-pdf "PDF Tools"))
           TeX-source-correlate-start-server t)
     (add-hook 'TeX-after-compilation-finished-functions #'TeX-revert-document-buffer))
 #+END_SRC
@@ -920,7 +1056,7 @@
     :after company
     :config
     (add-to-list 'company-backends '(company-math-symbols-unicode company-math-symbols-latex
-                                     compant-latex-commands))
+                                     company-latex-commands))
     (setq company-math-allow-latex-symbols-in-faces t))
 
   (use-package company-reftex
@@ -952,7 +1088,7 @@
     (shell-command "unzip -o ~/.texcount/texcount.zip -d ~/.texcount")
     (add-to-list 'exec-path "~/.texcount/texcount.pl"))
 
-  (if (not(file-exists-p "~/.texcount/texcount.pl"))
+  (if (not(or (file-exists-p "~/.texcount/texcount.pl") (file-exists-p "/usr/bin/texcount")))
       (get-texcount-latest))
 
   (defun texcount ()
@@ -986,7 +1122,8 @@
     (cond ((eq system-type 'windows-nt)
            (setq plantuml-jar-path "c:/ProgramData/chocolatey/lib/plantuml/tools/plantuml.jar"))
           ((eq system-type 'gnu/linux)
-           (setq plantuml-jar-path "/usr/share/java/plantuml/plantuml.jar"))))
+           (setq plantuml-jar-path "/usr/share/java/plantuml/plantuml.jar")))
+    (setq planuml-default-exec-mode 'jar))
 #+END_SRC
 
 *** COMMENT Racket
@@ -1022,54 +1159,54 @@
 **** Integrate into emacs
 Add updated version (based off auto-package-update) and integrate it with Emacs.
 #+BEGIN_SRC emacs-lisp
-    (defun verilog-read-file-as-string (file)
-      "Read FILE contents."
-      (when (file-exists-p file)
-        (with-temp-buffer
-          (insert-file-contents file)
-          (buffer-string))))
-
-    (defun verilog-write-string-to-file (file string)
-      "Substitute FILE contents with STRING."
+  (defun verilog-read-file-as-string (file)
+    "Read FILE contents."
+    (when (file-exists-p file)
       (with-temp-buffer
-        (insert string)
-        (when (file-writable-p file)
-          (write-region (point-min)
-                        (point-max)
-                        file))))
+        (insert-file-contents file)
+        (buffer-string))))
 
-    (defun verilog-today-day ()
-      (time-to-days (current-time)))
+  (defun verilog-write-string-to-file (file string)
+    "Substitute FILE contents with STRING."
+    (with-temp-buffer
+      (insert string)
+      (when (file-writable-p file)
+        (write-region (point-min)
+                      (point-max)
+                      file))))
 
-    (defun should-update-verilog-p ()
-      "Return non-nil when an update is due."
-      (and
-       (or
-        (not (file-exists-p "~/.emacs.d/.last-verilog-update-day"))
-        (if (>= (/ (- (verilog-today-day) (verilog-read-last-update-day)) 7) 1)
-            t
-          nil))))
+  (defun verilog-today-day ()
+    (time-to-days (current-time)))
 
-    (defun verilog-read-last-update-day ()
-      "Read last update day."
-      (string-to-number
-       (verilog-read-file-as-string "~/.emacs.d/.last-verilog-update-day")))
+  (defun should-update-verilog-p ()
+    "Return non-nil when an update is due."
+    (and
+     (or
+      (not (file-exists-p "~/.emacs.d/.last-verilog-update-day"))
+      (if (>= (/ (- (verilog-today-day) (verilog-read-last-update-day)) 7) 1)
+          t
+        nil))))
 
-    (defun verilog-write-current-day ()
-      "Store current day."
-      (verilog-write-string-to-file
-       "~/.emacs.d/.last-verilog-update-day"
-       (int-to-string (verilog-today-day))))
+  (defun verilog-read-last-update-day ()
+    "Read last update day."
+    (string-to-number
+     (verilog-read-file-as-string "~/.emacs.d/.last-verilog-update-day")))
 
-    (use-package verilog-mode
-      :init
-      (when (should-update-verilog-p)
-          (get-verilog-latest)
-          (verilog-write-current-day))
-      (add-to-list 'load-path "~/.emacs.d/elpa/verilog-mode/verilog-mode.el")
-      :config
-      (autoload 'verilog-mode "verilog-mode" "Verilog mode" t )
-      (add-to-list 'auto-mode-alist '("\\.[ds]?vh?\\'" . verilog-mode)))
+  (defun verilog-write-current-day ()
+    "Store current day."
+    (verilog-write-string-to-file
+     "~/.emacs.d/.last-verilog-update-day"
+     (int-to-string (verilog-today-day))))
+
+  (use-package verilog-mode
+    :init
+    (when (should-update-verilog-p)
+        (get-verilog-latest)
+        (verilog-write-current-day))
+    (add-to-list 'load-path "~/.emacs.d/elpa/verilog-mode/verilog-mode.el")
+    :config
+    (autoload 'verilog-mode "verilog-mode" "Verilog mode" t )
+    (add-to-list 'auto-mode-alist '("\\.[ds]?vh?\\'" . verilog-mode)))
 #+END_SRC
 
 *** COMMENT MATLAB
@@ -1102,6 +1239,47 @@
     :ensure t)
 #+END_SRC
 
+*** Rust
+**** Major mode
+Get the major mode for rust files.
+#+BEGIN_SRC emacs-lisp
+  (use-package rust-mode
+    :ensure t
+    :config
+    ;; style guide suggests spaces not tabs
+    (add-hook 'rust-mode-hook (lambda () (setq indent-tabs-mode nil)))
+    (setq rust-format-on-save t))
+
+  (use-package toml-mode
+    :ensure t)
+#+END_SRC
+**** Cargo integration
+Integrate Cargo, rust's package manager.
+#+BEGIN_SRC emacs-lisp
+  (use-package cargo
+    :ensure t
+    :hook
+    (rust-mode . cargo-minor-mode))
+#+END_SRC
+**** Flycheck
+Linting with flycheck.
+#+BEGIN_SRC emacs-lisp
+  (use-package flycheck-rust
+    :ensure t
+    :config
+    (add-hook 'flyckeck-mode-hook #'flycheck-rust-setup))
+#+END_SRC
+
+**** COMMENT Completion
+Code completion with racer.
+#+BEGIN_SRC emacs-lisp
+  (use-package racer
+    :ensure t
+    :hook ((rust-mode . racer-mode)
+           (racer-mode . (eldoc-mode company-mode)))
+    :init
+    (setq racer-command "~/.cargo/bin/racer"))
+#+END_SRC
 * Org mode
 ** Up to date org
 Pull the latest org mode from the repository, rather than the org which comes with emacs.
@@ -1122,6 +1300,12 @@
 (add-hook 'org-mode-hook 'org-indent-mode)
 (diminish 'org-indent-mode)
 (diminish 'visual-line-mode)
+#+END_SRC
+*** Spell checking for code and latex
+#+BEGIN_SRC emacs-lisp
+  (add-to-list 'ispell-skip-region-alist '("#\\+BEGIN_SRC" . "#\\+END_SRC"))
+  (add-to-list 'ispell-skip-region-alist '("\\$" . "\\$"))
+  (add-to-list 'ispell-skip-region-alist '("\\$\\$" . "\\$\\$"))
 #+END_SRC
 
 ** Line wrapping
@@ -1166,6 +1350,14 @@
   (setq org-plantuml-jar-path plantuml-jar-path)
 #+END_SRC
 
+*** Async export
+Allow the editing of files while execution of blocks is occurring.
+Needs :async tag in src header.
+#+BEGIN_SRC emacs-lisp
+  (use-package ob-async
+    :ensure t)
+#+END_SRC
+
 ** Latex preview fragments match colour
 Make the previews match theme colour of Emacs.
 Gets very annoying very quickly without it.
@@ -1176,7 +1368,7 @@
 #+END_SRC
 
 ** Org export additions
-*** Pandoc
+*** COMMENT Pandoc
 Call pandoc on org buffer from org export.
 #+BEGIN_SRC emacs-lisp
   (use-package ox-pandoc
@@ -1204,7 +1396,7 @@
     (setq emms-source-file-directory "~/Music/"))
 #+END_SRC
 
-* Org Blog
+* COMMENT Org Blog
 I use org to write my blog and use org-static-blog to generate the HTML.
 ** Org static blog config
 Basic configuration for site.
@@ -1302,6 +1494,46 @@
 Allow org features to be exported to HTML for site.
 #+BEGIN_SRC emacs-lisp
   (use-package htmlize
-    :ensure t)
+    :ensure t
+    :defer t)
 #+END_SRC
 
+* Journaling
+** Noteworthy entries
+I write weekly journal entries recapping my week.
+These files are in org mode.
+This is inspired by org-static-blog.
+#+BEGIN_SRC emacs-lisp
+  (defun journal-create-new-post ()
+      "Create a new entry, prompt for title and insert header"
+    (interactive)
+    (let ((title (read-string "Title: ")))
+      (find-file (concat "~/Documents/Journal/entry/"
+                         (read-string "Filename: "
+                                      (concat (format-time-string "%Y-%m-%d-" (current-time))
+                                              (replace-regexp-in-string "\s" "-" (downcase title))
+                                              ".org"))))
+      (insert "#+title: " title "\n"
+              "#+date: " (format-time-string "<%Y-%m-%d %H:%M>") "\n"
+              "#+filetags: ")))
+#+END_SRC
+*** Publish entries
+Use org-publish to collate entries into a single unit.
+#+BEGIN_SRC emacs-lisp
+  (setq org-publish-project-alist
+               '(("Journal"
+                 :base-directory "~/Documents/Journal/entry/"
+                 :publishing-directory "~/Documents/Journal/out/"
+                 :publishing-function org-html-publish-to-html
+                 ;;:htmlized-source t
+                 :section-numbers nil
+                 :html-preamble t
+                 :html-validation-link nil
+
+                 :auto-sitemap t
+                 :sitemap-sort-files anti-chronologically
+                 :sitemap-file-entry-format "%d - %t"
+                 :sitemap-title "Home"
+                 :sitemap-filename "index.html"
+                 :sitemap-function org-publish-sitemap)))
+#+END_SRC

--
Gitblit v1.9.3