mirror of https://github.com/Chizi123/.emacs.d.git

Joel Grunbaum
2022-01-06 ea0e9caa6f1a34a1257b86ffe0d3ab3627d1d8e4
config.org
@@ -8,11 +8,10 @@
  (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")
         (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 "~/")))
@@ -26,19 +25,17 @@
  (setq emacs-theme 'zenburn)
  (defun disable-all-themes ()
      (dolist (i custom-enabled-themes)
           (disable-theme i)))
    (dolist (i custom-enabled-themes)
      (disable-theme i)))
  (cond ((eq emacs-theme 'zenburn)
         (use-package zenburn-theme
           :ensure t
           :init
           (disable-all-themes)
           :config
           (load-theme 'zenburn t)))
        ((eq emacs-theme 'doom-one)
         (use-package doom-themes
           :ensure t
           :init
           (disable-all-themes)
           :config
@@ -49,21 +46,18 @@
           (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
@@ -86,12 +80,12 @@
  (set-face-italic 'font-lock-keyword-face t)
#+END_SRC
** Remove menu bar, toolbar, but keep scroll bar
** Remove menu bar, toolbar, and scroll bar
Make the emacs interface slightly nicer.
#+BEGIN_SRC emacs-lisp
  (menu-bar-mode 0)
  (tool-bar-mode 0)
  (scroll-bar-mode 1)
  (scroll-bar-mode 0)
#+END_SRC
* COMMENT EXWM
Emacs window manager.
@@ -99,7 +93,6 @@
Open external applications with =s-&=
#+BEGIN_SRC emacs-lisp
  (use-package exwm
    :ensure t
    :defer t
    :config
    (require 'exwm-config)
@@ -111,40 +104,30 @@
Use aspell for spellchecking. 
Auto-enable in latex and org as they're the main writing modes.
#+BEGIN_SRC emacs-lisp
  (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)
  (diminish 'flyspell-mode)
  (use-package flyspell
    :hook (tex-mode latex-mode TeX-mode LaTeX-mode org-mode)
    :diminish flyspell-mode
    :init (require 'ispell)
    :config
    (setq-default ispell-program-name "aspell")
    (setq-default ispell-local-dictionary "en_AU"))
#+END_SRC
** Language Tool
** COMMENT 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
(use-package switch-window
  :ensure t
  :config
    (setq switch-window-input-style 'minibuffer)
    (setq switch-window-increase 4)
  (use-package switch-window
    :config
    ;; (setq switch-window-input-style 'minibuffer)
    (setq switch-window-threshold 2)
    (setq switch-window-shortcut-style 'qwerty)
    (setq switch-window-qwerty-shortcuts
        '("a" "s" "d" "f" "j" "k" "l" "i" "o"))
  :bind
    :bind
    ([remap other-window] . switch-window))
#+END_SRC
@@ -170,7 +153,6 @@
Helpful pdf viewer.
#+BEGIN_SRC emacs-lisp
  (use-package pdf-tools
    :ensure t
    :config
    (pdf-tools-install 1))
#+END_SRC
@@ -179,7 +161,6 @@
Supposedly should provide insight to writing quality.
#+BEGIN_SRC emacs-lisp
  (use-package writegood-mode
    :ensure t
    :hook (text-mode . writegood-mode))
#+END_SRC
@@ -223,29 +204,27 @@
Helps in navigation and management of projects.
Identifies project layout from git.
*** Enable it
 #+BEGIN_SRC emacs-lisp
   (use-package projectile
     :ensure t
     :bind ("C-c p" . projectile-command-map)
     :diminish projectile-mode
     :config
     (projectile-global-mode)
     (setq projectile-completion-system 'helm)
     (when (eq system-type 'windows-nt)
       (setq projectile-indexing-method 'alien)))
 #+END_SRC
#+BEGIN_SRC emacs-lisp
  (use-package projectile
    :bind ("C-c p" . projectile-command-map)
    :diminish projectile-mode
    :config
    (projectile-global-mode)
    (setq projectile-completion-system 'helm)
    (when (eq system-type 'windows-nt)
      (setq projectile-indexing-method 'alien)))
#+END_SRC
*** Let it compile things
Shortcut for compilation.
 #+BEGIN_SRC emacs-lisp
   (global-set-key (kbd "<f5>") 'projectile-compile-project)
 #+END_SRC
#+BEGIN_SRC emacs-lisp
  (global-set-key (kbd "<f5>") 'projectile-compile-project)
#+END_SRC
*** Enable communication with helm
Use helm to manage project.
#+BEGIN_SRC emacs-lisp
  (use-package helm-projectile
    :ensure t
    :config
    (helm-projectile-on))
#+END_SRC
@@ -253,45 +232,43 @@
** COMMENT ggtags
Use GNU Global Tags. Can be useful for large projects.
#+BEGIN_SRC emacs-lisp
    (use-package ggtags
      :ensure t
      :bind (("C-c g s" . ggtags-find-other-symbol)
  (use-package ggtags
    :bind (("C-c g s" . ggtags-find-other-symbol)
           ("C-c g h" . ggtags-view-tag-history)
           ("C-c g r" . ggtags-find-reference)
           ("C-c g f" . ggtags-find-file)
           ("C-c g c" . ggtags-create-tags)
           ("C-c g u" . ggtags-update-tags))
      :config
      (add-hook 'c-mode-common-hook
    :config
    (add-hook 'c-mode-common-hook
              (lambda ()
                (when (derived-mode-p 'c-mode 'c++-mode 'java-mode)
                  (ggtags-mode 1))))
      )
    )
    (setq
     helm-gtags-ignore-case t
     helm-gtags-auto-update t
     helm-gtags-use-input-at-cursor t
     helm-gtags-pulse-at-cursor t
     helm-gtags-prefix-key "\C-c g"
     helm-gtags-suggested-key-mapping t
     )
  (setq
   helm-gtags-ignore-case t
   helm-gtags-auto-update t
   helm-gtags-use-input-at-cursor t
   helm-gtags-pulse-at-cursor t
   helm-gtags-prefix-key "\C-c g"
   helm-gtags-suggested-key-mapping t
   )
    (use-package helm-gtags
      :ensure t
      :config
      (add-hook 'dired-mode-hook 'helm-gtags-mode)
      (add-hook 'eshell-mode-hook 'helm-gtags-mode)
      (add-hook 'c-mode-hook 'helm-gtags-mode)
      (add-hook 'c++-mode-hook 'helm-gtags-mode)
      (add-hook 'asm-mode-hook 'helm-gtags-mode)
      (define-key helm-gtags-mode-map (kbd "C-c g a") 'helm-gtags-tags-in-this-function)
      (define-key helm-gtags-mode-map (kbd "C-j") 'helm-gtags-select)
      (define-key helm-gtags-mode-map (kbd "M-.") 'helm-gtags-dwim)
      (define-key helm-gtags-mode-map (kbd "M-,") 'helm-gtags-pop-stack)
      (define-key helm-gtags-mode-map (kbd "C-c <") 'helm-gtags-previous-history)
      (define-key helm-gtags-mode-map (kbd "C-c >") 'helm-gtags-next-history))
  (use-package helm-gtags
    :config
    (add-hook 'dired-mode-hook 'helm-gtags-mode)
    (add-hook 'eshell-mode-hook 'helm-gtags-mode)
    (add-hook 'c-mode-hook 'helm-gtags-mode)
    (add-hook 'c++-mode-hook 'helm-gtags-mode)
    (add-hook 'asm-mode-hook 'helm-gtags-mode)
    (define-key helm-gtags-mode-map (kbd "C-c g a") 'helm-gtags-tags-in-this-function)
    (define-key helm-gtags-mode-map (kbd "C-j") 'helm-gtags-select)
    (define-key helm-gtags-mode-map (kbd "M-.") 'helm-gtags-dwim)
    (define-key helm-gtags-mode-map (kbd "M-,") 'helm-gtags-pop-stack)
    (define-key helm-gtags-mode-map (kbd "C-c <") 'helm-gtags-previous-history)
    (define-key helm-gtags-mode-map (kbd "C-c >") 'helm-gtags-next-history))
#+END_SRC
** COMMENT Ctags
@@ -380,20 +357,19 @@
** Remove startup screen
Start on scratch buffer instead.
#+BEGIN_SRC emacs-lisp
(setq inhibit-startup-message t)
  (setq inhibit-startup-message t)
#+END_SRC
** Disable bell
Bloody bell dings every time you hit a key too much.
#+BEGIN_SRC emacs-lisp
(setq ring-bell-function 'ignore)
  (setq ring-bell-function 'ignore)
#+END_SRC
** Pretty symbols
Why not? They make it look nice.
#+BEGIN_SRC emacs-lisp
  (use-package pretty-mode
    :ensure t
    :diminish t
    :if window-system
    :config
@@ -403,17 +379,16 @@
** COMMENT Find file other window
Lets it accept more than one file. Works recursively.
#+BEGIN_SRC emacs-lisp
(defadvice find-file-other-window (around find-files activate)
  (if (listp filename)
      (loop for f in filename do (find-file-other-window f wildcards))
    ad-do-it))
  (defadvice find-file-other-window (around find-files activate)
    (if (listp filename)
        (loop for f in filename do (find-file-other-window f wildcards))
      ad-do-it))
#+END_SRC
** Which key
Helps to explain keybindings if you get lost.
#+BEGIN_SRC emacs-lisp
  (use-package which-key
    :ensure t
    :diminish which-key-mode
    :config
    (which-key-mode))
@@ -422,10 +397,10 @@
** Config shortcuts
*** Go to this file
#+BEGIN_SRC emacs-lisp
(defun config-visit ()
  (interactive)
  (find-file "~/.emacs.d/config.org"))
(global-set-key (kbd "C-c e d") 'config-visit)
  (defun config-visit ()
    (interactive)
    (find-file "~/.emacs.d/config.org"))
  (global-set-key (kbd "C-c e d") 'config-visit)
#+END_SRC
*** Go to init.el
@@ -438,18 +413,17 @@
*** Reload configuration
#+BEGIN_SRC emacs-lisp
(defun config-reload ()
  "Reloads ~/.emacs.d/config.org at run time"
  (interactive)
  (org-babel-load-file (expand-file-name "~/.emacs.d/config.org")))
(global-set-key (kbd "C-c e r") 'config-reload)
  (defun config-reload ()
    "Reloads ~/.emacs.d/config.org at run time"
    (interactive)
    (org-babel-load-file (expand-file-name "~/.emacs.d/config.org")))
  (global-set-key (kbd "C-c e r") 'config-reload)
#+END_SRC
** Smartparens
Matches brackets automatically. Added "$" for latex in org mode.
#+BEGIN_SRC emacs-lisp
  (use-package smartparens
    :ensure t
    :diminish smartparens-mode
    :config
    (progn
@@ -464,7 +438,6 @@
Colours according to code after a "#", works with 3 and 6 character hex codes.
#+BEGIN_SRC emacs-lisp
  (use-package rainbow-mode
    :ensure t
    :diminish rainbow-mode
    :init
    (add-hook 'prog-mode-hook 'rainbow-mode))
@@ -475,7 +448,6 @@
Colours the brackets so that they stand out more.
#+BEGIN_SRC emacs-lisp
  (use-package rainbow-delimiters
    :ensure t
    :hook (prog-mode . rainbow-delimiters-mode))
#+END_SRC
@@ -483,31 +455,30 @@
Removes unnecessary white space
#+BEGIN_SRC emacs-lisp
  (use-package clean-aindent-mode
    :ensure t
    :hook prog-mode)
#+END_SRC
Shows trailing white space
#+BEGIN_SRC emacs-lisp
(add-hook 'prog-mode-hook (lambda () (interactive) (setq show-trailing-whitespace 1)))
  (add-hook 'prog-mode-hook (lambda () (interactive) (setq show-trailing-whitespace 1)))
#+END_SRC
** Whitespace mode
Reveals whitespace characters
#+BEGIN_SRC emacs-lisp
(global-set-key (kbd "C-c w") 'whitespace-mode)
(add-hook 'diff-mode-hook (lambda ()
                            (setq-local whitespace-style
                                        '(face
                                          tabs
                                          tab-mark
                                          spaces
                                          space-mark
                                          trailing
                                          indentation::space
                                          indentation::tab
                                          newline
                                          newline-mark))
                            (whitespace-mode 1)))
  (global-set-key (kbd "C-c w") 'whitespace-mode)
  (add-hook 'diff-mode-hook (lambda ()
                              (setq-local whitespace-style
                                          '(face
                                            tabs
                                            tab-mark
                                            spaces
                                            space-mark
                                            trailing
                                            indentation::space
                                            indentation::tab
                                            newline
                                            newline-mark))
                              (whitespace-mode 1)))
#+END_SRC
@@ -524,11 +495,10 @@
Collects interesting statistics about key presses.
Use M-x keyfreq-show to show in emacs or M-x keyfreq-html to output
#+BEGIN_SRC emacs-lisp
(use-package keyfreq
  :ensure t
  :config
  (keyfreq-mode 1)
  (keyfreq-autosave-mode 1))
  (use-package keyfreq
    :config
    (keyfreq-mode 1)
    (keyfreq-autosave-mode 1))
#+END_SRC
** Undo tree
@@ -536,76 +506,74 @@
Supports branched undo history (thus the tree).
Pretty neat, if seldom used.
#+BEGIN_SRC emacs-lisp
(use-package undo-tree
  :ensure t
  :diminish undo-tree-mode
  :config
  (global-undo-tree-mode))
  (use-package undo-tree
    :diminish undo-tree-mode
    :config
    (global-undo-tree-mode))
#+END_SRC
** Volatile highlights
Colour the material just copied
#+BEGIN_SRC emacs-lisp
(use-package volatile-highlights
  :ensure t
  :diminish volatile-highlights-mode
  :config
  (volatile-highlights-mode t))
  (use-package volatile-highlights
    :diminish volatile-highlights-mode
    :config
    (volatile-highlights-mode t))
#+END_SRC
** ibuffer
View all open buffers in their own buffer rather in the temporary mini buffer.
#+BEGIN_SRC emacs-lisp
(global-set-key (kbd "C-x C-b") 'ibuffer)
(setq ibuffer-use-other-window t)
  (global-set-key (kbd "C-x C-b") 'ibuffer)
  (setq ibuffer-use-other-window t)
#+END_SRC
** Hippie expand
Seems cool, but I don't think I ever use this.
Meant to suggest completions to beginning of a word.
#+BEGIN_SRC emacs-lisp
(global-set-key (kbd "M-/") 'hippie-expand) ;; replace dabbrev-expand
(setq
 hippie-expand-try-functions-list
 '(try-expand-dabbrev ;; Try to expand word "dynamically", searching the current buffer.
   try-expand-dabbrev-all-buffers ;; Try to expand word "dynamically", searching all other buffers.
   try-expand-dabbrev-from-kill ;; Try to expand word "dynamically", searching the kill ring.
   try-complete-file-name-partially ;; Try to complete text as a file name, as many characters as unique.
   try-complete-file-name ;; Try to complete text as a file name.
   try-expand-all-abbrevs ;; Try to expand word before point according to all abbrev tables.
   try-expand-list ;; Try to complete the current line to an entire line in the buffer.
   try-expand-line ;; Try to complete the current line to an entire line in the buffer.
   try-complete-lisp-symbol-partially ;; Try to complete as an Emacs Lisp symbol, as many characters as unique.
   try-complete-lisp-symbol) ;; Try to complete word as an Emacs Lisp symbol.
 )
  (global-set-key (kbd "M-/") 'hippie-expand) ;; replace dabbrev-expand
  (setq
   hippie-expand-try-functions-list
   '(try-expand-dabbrev ;; Try to expand word "dynamically", searching the current buffer.
     try-expand-dabbrev-all-buffers ;; Try to expand word "dynamically", searching all other buffers.
     try-expand-dabbrev-from-kill ;; Try to expand word "dynamically", searching the kill ring.
     try-complete-file-name-partially ;; Try to complete text as a file name, as many characters as unique.
     try-complete-file-name ;; Try to complete text as a file name.
     try-expand-all-abbrevs ;; Try to expand word before point according to all abbrev tables.
     try-expand-list ;; Try to complete the current line to an entire line in the buffer.
     try-expand-line ;; Try to complete the current line to an entire line in the buffer.
     try-complete-lisp-symbol-partially ;; Try to complete as an Emacs Lisp symbol, as many characters as unique.
     try-complete-lisp-symbol) ;; Try to complete word as an Emacs Lisp symbol.
   )
#+END_SRC
** Highlight line
Very useful for finding where you are.
#+BEGIN_SRC emacs-lisp
(global-hl-line-mode)
  (global-hl-line-mode)
#+END_SRC
** Line numbers
Everyone needs line numbers when programming.
#+BEGIN_SRC emacs-lisp
(add-hook 'prog-mode-hook 'linum-mode)
  (add-hook 'prog-mode-hook 'linum-mode)
#+END_SRC
** Garbage collection
Starts garbage collection every 100MB.
#+BEGIN_SRC emacs-lisp
(setq gc-cons-threshold 100000000)
  (setq gc-cons-threshold (* 1024 1024 100))
#+END_SRC
** Kill ring
Changes the kill ring size to 5000.
#+BEGIN_SRC emacs-lisp
  (setq global-mark-ring-max 5000
   mark-ring-max 5000
   mode-require-final-newline t
   kill-ring-max 5000
   kill-whole-line t)
        mark-ring-max 5000
        mode-require-final-newline t
        kill-ring-max 5000
        kill-whole-line t)
#+END_SRC
** Coding style
@@ -613,8 +581,8 @@
K&R uses 4 space tabs.
#+BEGIN_SRC emacs-lisp
  (setq c-default-style '((java-mode . "java")
                         (awk-mode . "awk")
                         (other . "linux")))
                          (awk-mode . "awk")
                          (other . "k&r")))
#+END_SRC
** Coding system
@@ -624,12 +592,21 @@
  (set-keyboard-coding-system 'utf-8)
  (set-language-environment "UTF-8")
  (prefer-coding-system 'utf-8)
  (setq-default indent-tabs-mode t
                tab-width 8
  (setq-default indent-tabs-mode nil
                tab-width 4
                c-basic-offset tab-width
                cperl-indent-level tab-width)
  (c-set-offset 'inline-open '0)
  (delete-selection-mode)
  (global-set-key (kbd "RET") 'newline-and-indent)
#+END_SRC
*** Smart tabs
Tabs for indentation, spaces for alignment
#+BEGIN_SRC emacs-lisp
  (use-package smart-tabs-mode
    :config
    (smart-tabs-insinuate 'c 'c++ 'java 'javascript 'cperl 'python 'ruby
                          'nxml))
#+END_SRC
** Move to beginning of line ignoring whitespace
@@ -644,50 +621,55 @@
If ARG is not nil or 1, move forward ARG - 1 lines first. If
point reaches the beginning or end of the buffer, stop there.
#+BEGIN_SRC emacs-lisp
(defun prelude-move-beginning-of-line (arg)
  (interactive "^p")
  (setq arg (or arg 1))
  (defun prelude-move-beginning-of-line (arg)
    (interactive "^p")
    (setq arg (or arg 1))
  ;; Move lines first
  (when (/= arg 1)
    (let ((line-move-visual nil))
      (forward-line (1- arg))))
    ;; Move lines first
    (when (/= arg 1)
      (let ((line-move-visual nil))
        (forward-line (1- arg))))
  (let ((orig-point (point)))
    (back-to-indentation)
    (when (= orig-point (point))
      (move-beginning-of-line 1))))
    (let ((orig-point (point)))
      (back-to-indentation)
      (when (= orig-point (point))
        (move-beginning-of-line 1))))
(global-set-key (kbd "C-a") 'prelude-move-beginning-of-line)
  (global-set-key (kbd "C-a") 'prelude-move-beginning-of-line)
#+END_SRC
** Indent region or buffer
Indent, slightly different to standard tab or C-M-\.
#+BEGIN_SRC emacs-lisp
(defun indent-region-or-buffer ()
  "Indent a region if selected, otherwise the whole buffer."
  (interactive)
  (unless (member major-mode prelude-indent-sensitive-modes)
    (save-excursion
      (if (region-active-p)
  (defun indent-region-or-buffer ()
    "Indent a region if selected, otherwise the whole buffer."
    (interactive)
    (unless (member major-mode prelude-indent-sensitive-modes)
      (save-excursion
        (if (region-active-p)
            (progn
              (indent-region (region-beginning) (region-end))
              (message "Indented selected region."))
          (progn
            (indent-region (region-beginning) (region-end))
            (message "Indented selected region."))
        (progn
          (indent-buffer)
          (message "Indented buffer.")))
      (whitespace-cleanup))))
            (indent-buffer)
            (message "Indented buffer.")))
        (whitespace-cleanup))))
(global-set-key (kbd "C-c i") 'indent-region-or-buffer)
  (global-set-key (kbd "C-c i") 'indent-region-or-buffer)
#+END_SRC
** Tramp
Remote editing mode.
Hate having to re-input passwords.
#+BEGIN_SRC emacs-lisp
  (when (eq system-type 'windows-nt)
    (setq tramp-default-method "pscp"))
  (setq password-cache-expiry nil)
  (use-package tramp
    :pin gnu
    :config
    ;; (setq tramp-default-method "ssh")
    (when (eq system-type 'windows-nt)
      (setq tramp-default-method "pscp"))
    (setq password-cache-expiry nil)
    (add-to-list 'tramp-remote-path 'tramp-own-remote-path))
#+END_SRC
** COMMENT Y or N instead of yes or no
@@ -701,7 +683,6 @@
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
@@ -713,39 +694,48 @@
    (sublimity-mode 1))
  (use-package minimap
    :ensure t
    :config
    (minimap-mode))
#+END_SRC
** Highlight indentation
Vertical demarcations for indent levels
#+BEGIN_SRC emacs-lisp
  (use-package highlight-indentation
    :hook (prog-mode . highlight-indentation-mode))
#+END_SRC
** Auto revert mode
Update unchanged buffers if underlying file changes.
#+BEGIN_SRC emacs-lisp
  (global-auto-revert-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
A little easier to read than the default emacs mode line.
#+BEGIN_SRC emacs-lisp
    (use-package spaceline
      :ensure t
      :config
      (require 'spaceline-config)
      (setq spaceline-buffer-encoding-abbrev-p t)
      (setq spaceline-line-column-p t)
      (setq spaceline-line-p t)
      (setq powerline-default-separator (quote arrow))
      (spaceline-spacemacs-theme)
      (spaceline-helm-mode))
  (use-package spaceline
    :config
    (require 'spaceline-config)
    (setq spaceline-buffer-encoding-abbrev-p t)
    (setq spaceline-line-column-p t)
    (setq spaceline-line-p t)
    (setq powerline-default-separator (quote arrow))
    (spaceline-spacemacs-theme)
    (spaceline-helm-mode))
#+END_SRC
*** Separator
Slightly nicer separator.
#+BEGIN_SRC emacs-lisp
(setq powerline-default-separator nil)
  (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
@@ -756,79 +746,72 @@
Manually added snippets are in ~/.emacs.d/snippets/{mode}.
#+BEGIN_SRC emacs-lisp
  (use-package yasnippet
    :ensure t
    :diminish yas-minor-mode
    :config
    (yas-global-mode 1))
  (use-package yasnippet-snippets
    :ensure t
    :after yasnippet)
#+END_SRC
** Flycheck
Basic linter. Works pretty well.
#+BEGIN_SRC emacs-lisp
  (use-package flycheck
    :ensure t
    :diminish flycheck-mode
    :hook (prog-mode . flycheck-mode)
    :config
    (global-flycheck-mode))
#+END_SRC
*** flycheck-pos-tip
Add suggestions at the cursor.
#+BEGIN_SRC emacs-lisp
(use-package flycheck-pos-tip
  :ensure t
  :after flycheck
  :config
  (flycheck-pos-tip-mode))
  (use-package flycheck-pos-tip
    :after flycheck
    :config
    (flycheck-pos-tip-mode))
#+END_SRC
** Company
Company is auto-complete for Emacs.
Uses various backends, more of which are added later.
#+BEGIN_SRC emacs-lisp
  (use-package company
    :ensure t
    :diminish company-mode
    :config
    (global-company-mode)
    (setq company-idle-delay 0)
    (setq company-minimum-prefix-length 3))
    (setq company-minimum-prefix-length 1))
#+END_SRC
** LSP Mode
Use LSP for completion suggestions.
Causes too much memory usage, need to debug.
Need to generate ~compile_flags~ for c/c++, can use ~bear~ but may need other tools.
#+BEGIN_SRC emacs-lisp
  (use-package lsp-mode
    :ensure t
    :hook (((c-mode
             cpp-mode
             c++-mode
             tex-mode
             latex-mode
             TeX-mode
             LaTeX-mode
             rust-mode
             sh-mode
             verilog-mode) . lsp))
             ;; verilog-mode
             go-mode
             python-mode) . lsp))
    :init
    (setq lsp-keymap-prefix "C-c l")
    :commands lsp
    :config
    (add-hook lsp-mode-hook lsp-enable-which-key-integration)
    (add-hook 'lsp-mode-hook 'lsp-enable-which-key-integration)
    (setq read-process-output-max (* 1024 1024))
    (setq lsp-completion-provider :capf)
    (setq lsp-keep-workspace-alive 'nil)
    (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
@@ -844,7 +827,6 @@
Pretty good and offers fairly decent features.
#+BEGIN_SRC emacs-lisp
  (use-package magit
    :ensure t
    :commands magit-get-top-dir
    :bind ("C-x g" . magit-status)
    :init
@@ -893,11 +875,42 @@
       magit-process-popup-time 10
       ;; ask me if I want a tracking upstream
       magit-set-upstream-on-push 'askifnotset
       )))
       ))
    )
#+END_SRC
*** More general yes and no prompt
The default setting can miss some.
Don't redefine the regex in case this is too general.
#+BEGIN_SRC emacs-lisp
  ;;(when-let ((regex "[\[\(]]?\\([Yy]\\(es\\)?\\)[/|]\\([Nn]o?\\)[\]\)]")
  (defun magit-process-general-yn-prompt-hook (proc str)
    "Handle [y/n] prompts"
    (when-let ((beg (string-match "[\[\(]]?\\([Yy]\\(es\\)?\\)[/|]\\([Nn]o?\\)[\]\)]" str)))
      (let ;; ((max-mini-window-height 30))
          (process-send-string
           proc
           (downcase
            (concat
             (match-string
              (if (save-match-data
                    (magit-process-kill-on-abort proc
                      (y-or-n-p (substring str 0 beg)))) 1 2)
              str)
             "\n"))))))
  (add-hook 'magit-process-prompt-functions
            #'magit-process-general-yn-prompt-hook)
#+END_SRC
*** COMMENT Gerrit integration
Gerrit takes ~origin:refs/for/master~ as a destination.
Enable magit to work with its oddities.
#+BEGIN_SRC emacs-lisp
  (use-package magit-gerrit)
#+END_SRC
** CEDET
*** Semantic
*** COMMENT Semantic
Parser library for code, supports many other packages.
Allows emacs to be more aware of what is being written.
#+BEGIN_SRC emacs-lisp
@@ -914,9 +927,9 @@
Emacs Development Environment.
Can be used to manage and create build files for a project.
#+BEGIN_SRC emacs-lisp
(use-package ede
  :config
  (global-ede-mode t))
  (use-package ede
    :config
    (global-ede-mode t))
#+END_SRC
*** gdb-many-windows
@@ -924,9 +937,9 @@
Shows register contents, variable contents and others in addition to GDB shell.
Also shows source code while debugging.
#+BEGIN_SRC emacs-lisp
(setq
 gdb-many-windows t
 gdb-show-main t)
  (setq
   gdb-many-windows t
   gdb-show-main t)
#+END_SRC
*** COMMENT Semantic refactor
@@ -934,43 +947,58 @@
Should help to refactor file.
#+BEGIN_SRC emacs-lisp
  (use-package srefactor
    :ensure t
    :bind (("M-RET o" . 'srefactor-lisp-one-line)
       ("M-RET m" . 'srefactor-lisp-format-sexp)
       ("M-RET d" . 'srefactor-lisp-format-defun)
       ("M-RET b" . 'srefactor-lisp-format-buffer)
       :map c-mode-base-map
            ("M-RET" . 'srefactor-refactor-at-point)
            :map c++-mode-map
            ("M-RET" . 'srefactor-refactor-at-point)))
           ("M-RET m" . 'srefactor-lisp-format-sexp)
           ("M-RET d" . 'srefactor-lisp-format-defun)
           ("M-RET b" . 'srefactor-lisp-format-buffer)
           :map c-mode-base-map
           ("M-RET" . 'srefactor-refactor-at-point)
           :map c++-mode-map
           ("M-RET" . 'srefactor-refactor-at-point)))
#+END_SRC
** Language specific configs
*** C/C++
**** Flycheck clang
**** Flycheck
***** Flycheck clang
Add the clang backend for linting.
#+BEGIN_SRC emacs-lisp
  (use-package flycheck-clang-analyzer
    :ensure t
    :after flycheck
    :config
    (with-eval-after-load 'flycheck
      (require 'flycheck-clang-analyzer)
       (flycheck-clang-analyzer-setup)))
      (flycheck-clang-analyzer-setup)))
#+END_SRC
***** Flycheck project root
Flycheck tends to fail finding the project root, giving errors about missing files.
This should remove them.
#+BEGIN_SRC emacs-lisp
  (defun setup-flycheck-project-path ()
    (let ((root (ignore-errors (projectile-project-root))))
      (when root
        (add-to-list
         (make-variable-buffer-local 'flycheck-clang-include-path)
         root)
        (add-to-list
         (make-variable-buffer-local 'flycheck-gcc-include-path)
         root))))
**** Company
  (add-hook 'c-mode-hook 'setup-flycheck-project-path)
  (add-hook 'c++-mode-hook 'setup-flycheck-project-path)
#+END_SRC
**** COMMENT Company
Add header completion as well as Irony, which uses clang for suggestions.
#+BEGIN_SRC emacs-lisp
  (use-package company-c-headers
      :ensure t
      :after company
      :config
      (add-hook 'c++-mode-hook 'company-mode)
      (add-hook 'c-mode-hook 'company-mode))
    :after company
    :config
    (add-hook 'c++-mode-hook 'company-mode)
    (add-hook 'c-mode-hook 'company-mode))
#+END_SRC
**** COMMENT Irony
#+BEGIN_SRC emacs-lisp
  (use-package irony
    :ensure t
    :init
    (setq w32-pipe-read-delay 0)
    (setq irony-server-w32-pipe-buffer-size (* 64 1024))
@@ -980,45 +1008,51 @@
    (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options))
  (use-package company-irony
    :ensure t
    :after irony
    :config
    (add-to-list 'company-backends '(company-c-headers
                                     company-dabbrev-code
                                     company-irony)))
#+END_SRC
**** COMMENT Clang-format
**** Clang-format
Automatically format buffer on save.
#+BEGIN_SRC emacs-lisp
  (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))
  (defun set-clang-format-style ()
    (if (file-exists-p (concat
                        (projectile-project-root)
                        ".clang-format"))
        (setq-local clang-format-style nil)
      (setq-local clang-format-style (concat "{BasedOnStyle: LLVM,"
                                             "IndentWidth: " (format "%s" tab-width) ","
                                             "UseTab: " (if (eq indent-tabs-mode nil)
                                                            "Never"
                                                          "AlignWithSpaces")
                                             ","
                                             "BreakBeforeBraces: Linux,"
                                             "AllowShortIfStatementsOnASingleLine: false,"
                                             "IndentCaseLabels: false}"))))
  (add-hook 'c-mode-common-hook 'set-clang-format-style)
  (use-package clang-format)
  ;;   (defun clang-format-on-save ()
  ;;     (add-hook 'before-save-hook 'clang-format-buffer nil t))
  ;;   (add-hook 'c-mode-hook 'clang-format-on-save nil t)
  ;;   (add-hook 'c++-mode-hook 'clang-format-on-save nil t))
#+END_SRC
*** emacs-lisp
**** COMMENT company
**** COMMENT Company
Add slime backend.
#+BEGIN_SRC emacs-lisp
(add-hook 'emacs-lisp-mode-hook 'company-mode)
  (add-hook 'emacs-lisp-mode-hook 'company-mode)
(use-package slime
  :ensure t
  :config
  (setq inferior-lisp-program "/usr/bin/sbcl")
  (setq slime-contribs '(slime-fancy)))
  (use-package slime
    :config
    (setq inferior-lisp-program "/usr/bin/sbcl")
    (setq slime-contribs '(slime-fancy)))
(use-package slime-company
  :ensure t
  :init
  (use-package slime-company
    :init
    (require 'company)
    (slime-setup '(slime-fancy slime-company)))
#+END_SRC
@@ -1027,11 +1061,10 @@
**** x86-lookup
Look up reference PDF. Use Intel manual.
#+BEGIN_SRC emacs-lisp
(use-package x86-lookup
  :ensure t
  :init
  (setq x86-lookup-pdf "D:/Coding/x86-instructions.pdf")
  :bind ("C-h x" . x86-lookup))
  (use-package x86-lookup
    :init
    (setq x86-lookup-pdf "D:/Coding/x86-instructions.pdf")
    :bind ("C-h x" . x86-lookup))
#+END_SRC
*** Latex
@@ -1052,27 +1085,23 @@
Help company complete tex math and references.
#+BEGIN_SRC emacs-lisp
  (use-package company-math
    :ensure t
    :after company
    :config
    (add-to-list 'company-backends '(company-math-symbols-unicode company-math-symbols-latex
                                     company-latex-commands))
                                                                  company-latex-commands))
    (setq company-math-allow-latex-symbols-in-faces t))
  (use-package company-reftex
    :ensure t
    :after company
    :config
    (add-to-list 'company-backends 'company-reftex-citations))
  (use-package company-auctex
    :ensure t
    :after company
    :config
    (company-auctex-init))
  (use-package company-bibtex
    :ensure t
    :after company
    (add-to-list 'company-backends 'company-bibtex))
#+END_SRC
@@ -1117,13 +1146,15 @@
Sets the PlantUML path for the mode to generate models.
#+BEGIN_SRC emacs-lisp
  (use-package plantuml-mode
    :ensure t
    :init
    (cond ((eq system-type 'windows-nt)
           (setq plantuml-jar-path "c:/ProgramData/chocolatey/lib/plantuml/tools/plantuml.jar"))
           (when (file-exists-p "c:/ProgramData/chocolatey/lib/plantuml/tools/plantuml.jar")
             (setq plantuml-jar-path "c:/ProgramData/chocolatey/lib/plantuml/tools/plantuml.jar")
             (setq planuml-default-exec-mode 'jar)))
          ((eq system-type 'gnu/linux)
           (setq plantuml-jar-path "/usr/share/java/plantuml/plantuml.jar")))
    (setq planuml-default-exec-mode 'jar))
           (when (file-exists-p "/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
@@ -1135,80 +1166,44 @@
    (setenv "PATH" (mapconcat #'identity exec-path path-separator)))
  (use-package racket-mode
      :ensure t
      :config
      (autoload 'racket-mode "Racket" "Racket Editing Mode" t)
      (add-to-list
       'auto-mode-alist
       '("\\.rkt$" . racket-mode))
      (setq matlab-indent-function t))
    :config
    (autoload 'racket-mode "Racket" "Racket Editing Mode" t)
    (add-to-list
     'auto-mode-alist
     '("\\.rkt$" . racket-mode)))
#+END_SRC
*** COMMENT Verilog
*** Verilog
**** Get latest version
Pull the latest version from the web.
Use latest version from repositories.
#+BEGIN_SRC emacs-lisp
  (defun get-verilog-latest()
    (if (not(file-directory-p "~/.emacs.d/elpa/verilog-mode"))
        (make-directory "~/.emacs.d/elpa/verilog-mode"))
    (if (file-exists-p "~/.emacs.d/elpa/verilog-mode/verilog-mode.el")
        (delete-file "~/.emacs.d/elpa/verilog-mode/verilog-mode.el"))
    (url-copy-file "https://www.veripool.org/ftp/verilog-mode.el" "~/.emacs.d/elpa/verilog-mode/verilog-mode.el" 1))
#+END_SRC
**** 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."
    (with-temp-buffer
      (insert string)
      (when (file-writable-p file)
        (write-region (point-min)
                      (point-max)
                      file))))
  (defun verilog-today-day ()
    (time-to-days (current-time)))
  (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-read-last-update-day ()
    "Read last update day."
    (string-to-number
     (verilog-read-file-as-string "~/.emacs.d/.last-verilog-update-day")))
  (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")
    :pin gnu
    :config
    (autoload 'verilog-mode "verilog-mode" "Verilog mode" t )
    (add-to-list 'auto-mode-alist '("\\.[ds]?vh?\\'" . verilog-mode)))
    (add-to-list 'auto-mode-alist '("\\.[ds]?va?h?\\'" . verilog-mode))
    (setq-default verilog-align-ifelse t
                  verilog-auto-delete-trailing-whitespace t
                  verilog-auto-inst-param-value t
                  verilog-auto-lineup 'all
                  verilog-auto-newline nil
                  verilog-auto-save-policy nil
                  verilog-auto-template-warn-unused t
                  verilog-auto-endcomments nil
                  verilog-highlight-grouping-keywords t
                  verilog-highlight-modules t
                  verilog-tab-to-comment t
                  verilog-indent-begin-after-if nil
                  verilog-indent-lists nil
                  verilog-case-indent 4
                  verilog-cexp-indent 0
                  verilog-indent-level 4
                  verilog-indent-level-behavioral 4
                  verilog-indent-level-declaration 4
                  verilog-indent-level-directive 4
                  verilog-indent-level-module 4))
#+END_SRC
#+END_SRC
*** COMMENT MATLAB
Mode for editing MATLAB m-files.
#+BEGIN_SRC emacs-lisp
@@ -1228,15 +1223,13 @@
For editing MIPS assembly.
#+BEGIN_SRC emacs-lisp
  (use-package mips-mode
    :ensure t
    :mode "\\.mips$")
#+END_SRC
*** COMMENT IPython notebooks
Allow emacs to view and use IPython notebooks
#+BEGIN_SRC emacs-lisp
  (use-package ein
    :ensure t)
  (use-package ein)
#+END_SRC
*** Rust
@@ -1244,20 +1237,17 @@
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)
  (use-package toml-mode)
#+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
@@ -1265,41 +1255,55 @@
Linting with flycheck.
#+BEGIN_SRC emacs-lisp
  (use-package flycheck-rust
    :ensure t
    :config
    (add-hook 'flyckeck-mode-hook #'flycheck-rust-setup))
    (add-hook 'flycheck-mode-hook #'flycheck-rust-setup))
#+END_SRC
*** Go
**** Major mode
#+BEGIN_SRC emacs-lisp
  (use-package go-mode
    :config
    (add-hook 'before-save-hook #'gofmt-before-save))
#+END_SRC
**** COMMENT Completion
Code completion with racer.
**** Flycheck
#+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"))
  (use-package flycheck-golangci-lint
    :config
    (add-hook 'flycheck-mode-hook #'flycheck-golangci-lint-setup))
#+END_SRC
**** Company
#+BEGIN_SRC emacs-lisp
  (use-package company-go)
#+END_SRC
*** Python
**** COMMENT LSP server
Use jedi, idk why.
#+BEGIN_SRC emacs-lisp
  (use-package lsp-jedi
    :config
    (add-to-list 'lsp-disabled-clients 'pyls)
    (add-to-list 'lsp-enabled-clients 'jedi))
#+END_SRC
* Org mode
** Up to date org
Pull the latest org mode from the repository, rather than the org which comes with emacs.
#+BEGIN_SRC emacs-lisp
    (use-package org
      :ensure org-plus-contrib
      :pin org)
  (use-package org
    :ensure org-contrib)
#+END_SRC
** Small tweaks
Small quality of life changes to org-mode.
#+BEGIN_SRC emacs-lisp
(setq org-src-fontify-natively t)
(setq org-src-tab-acts-natively t)
(setq org-confirm-babel-evaluate nil)
(setq org-export-with-smart-quotes t)
(setq org-src-window-setup 'current-window)
(add-hook 'org-mode-hook 'org-indent-mode)
(diminish 'org-indent-mode)
(diminish 'visual-line-mode)
  (setq org-src-fontify-natively t
        org-src-tab-acts-natively t
        org-confirm-babel-evaluate nil
        org-export-with-smart-quotes t
        org-src-window-setup 'current-window)
  (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
@@ -1316,13 +1320,12 @@
               (visual-line-mode 1)))
#+END_SRC
** org-bullets
** Fancy org points
Use bullets of different colours and styles instead of the "\*\*\*" to denote indentation levels.
#+BEGIN_SRC emacs-lisp
  (use-package org-bullets
    :ensure t
  (use-package org-superstar
    :config
    (add-hook 'org-mode-hook (lambda () (org-bullets-mode))))
    (add-hook 'org-mode-hook (lambda () (org-superstar-mode 1))))
#+END_SRC
** Org Babel
@@ -1331,17 +1334,16 @@
*** Languages
Add a bunch of languages to org babel supported languages
#+BEGIN_SRC emacs-lisp
    (org-babel-do-load-languages 'org-babel-load-languages '((emacs-lisp . t)
                                                             (C . t)
                                                             (python . t)
                                                             (latex . t)
                                                             (scheme . t)
                                                             (gnuplot . t)
                                                             (matlab . t)
                                                             (plantuml . t)
                                                             (fortran . t)
                                                             (java . t)
                                                             (plantuml . t)))
  (org-babel-do-load-languages 'org-babel-load-languages '((emacs-lisp . t)
                                                           (C . t)
                                                           (python . t)
                                                           (latex . t)
                                                           (scheme . t)
                                                           (gnuplot . t)
                                                           (matlab . t)
                                                           (fortran . t)
                                                           (java . t)
                                                           (plantuml . t)))
#+END_SRC
**** PlantUML path
@@ -1354,8 +1356,7 @@
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)
  (use-package ob-async)
#+END_SRC
** Latex preview fragments match colour
@@ -1368,18 +1369,18 @@
#+END_SRC
** Org export additions
*** COMMENT Pandoc
*** Pandoc
Call pandoc on org buffer from org export.
Need to add ~#+OPTIONS: H:99~ to enable large level header exports.
#+BEGIN_SRC emacs-lisp
  (use-package ox-pandoc
    :ensure t)
  (when (executable-find "pandoc")
    (use-package ox-pandoc))
#+END_SRC
*** COMMENT Dokuwiki Wiki
Allow export to dokuwiki markup from org.
#+BEGIN_SRC emacs-lisp
  (use-package ox-wk
    :ensure t)
  (use-package ox-wk)
#+END_SRC
* COMMENT EMMS
@@ -1403,7 +1404,6 @@
Copied and modified from the example configuration.
#+BEGIN_SRC emacs-lisp
  (use-package org-static-blog
    :ensure t
    :config
    (setq org-static-blog-publish-title "Joel's Site")
    (setq org-static-blog-publish-url "https://blog.joelg.cf/")
@@ -1494,18 +1494,17 @@
Allow org features to be exported to HTML for site.
#+BEGIN_SRC emacs-lisp
  (use-package htmlize
    :ensure t
    :defer t)
#+END_SRC
* Journaling
* COMMENT 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"
    "Create a new entry, prompt for title and insert header"
    (interactive)
    (let ((title (read-string "Title: ")))
      (find-file (concat "~/Documents/Journal/entry/"
@@ -1521,19 +1520,19 @@
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
        '(("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)))
           :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