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

Joel Grunbaum
2021-12-22 5324d5fcbf8e365dc774795ceeedf1cac9d0b4bb
config.org
@@ -8,7 +8,7 @@
  (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
@@ -86,12 +86,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.
@@ -100,6 +100,7 @@
#+BEGIN_SRC emacs-lisp
  (use-package exwm
    :ensure t
    :defer t
    :config
    (require 'exwm-config)
    (exwm-config-default))
@@ -123,7 +124,14 @@
  (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
@@ -162,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
@@ -384,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
@@ -468,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
@@ -611,18 +618,28 @@
#+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
  (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
      :ensure t
      :config
      (smart-tabs-insinuate 'c 'c++ 'java 'javascript 'cperl 'python 'ruby
                            'nxml))
#+END_SRC
** Move to beginning of line ignoring whitespace
@@ -678,9 +695,15 @@
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
    :ensure t
    :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
@@ -711,6 +734,13 @@
    (minimap-mode))
#+END_SRC
** Highlight indentation
Vertical demarcations for indent levels
#+BEGIN_SRC emacs-lisp
  (use-package highlight-indentation
    :ensure t
    :hook (prog-mode . highlight-indentation-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
@@ -752,10 +782,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
@@ -776,7 +807,6 @@
  :config
  (flycheck-pos-tip-mode))
#+END_SRC
** Company
Company is auto-complete for Emacs.
Uses various backends, more of which are added later.
@@ -787,21 +817,34 @@
    :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
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 ((lsp-mode . lsp-enable-which-key-integration))
    :hook (((c-mode
             c++-mode
             tex-mode
             latex-mode
             TeX-mode
             LaTeX-mode
             rust-mode
             sh-mode
             ;; verilog-mode
             go-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)
    (setq lsp-keep-workspace-alive 'nil)
    (add-to-list 'exec-path "~/.cargo/bin"))
  (use-package lsp-ui
@@ -812,75 +855,110 @@
    :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
Emacs git client.
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
    (progn
      ;; make magit status go full-screen but remember previous window
      ;; settings
      ;; from: http://whattheemacsd.com/setup-magit.el-01.html
      (defadvice magit-status (around magit-fullscreen activate)
        (window-configuration-to-register :magit-fullscreen)
        ad-do-it
        (delete-other-windows))
      ;; Close popup when committing - this stops the commit window
      ;; hanging around
      ;; From: http://git.io/rPBE0Q
      (defadvice git-commit-commit (after delete-window activate)
        (delete-window))
      (defadvice git-commit-abort (after delete-window activate)
        (delete-window))
      :config
    (use-package magit
      :ensure t
      :commands magit-get-top-dir
      :bind ("C-x g" . magit-status)
      :init
      (progn
        ;; restore previously hidden windows
        (defadvice magit-quit-window (around magit-restore-screen activate)
          (let ((current-mode major-mode))
            ad-do-it
            ;; we only want to jump to register when the last seen buffer
            ;; was a magit-status buffer.
            (when (eq 'magit-status-mode current-mode)
              (jump-to-register :magit-fullscreen)))))
        ;; make magit status go full-screen but remember previous window
        ;; settings
        ;; from: http://whattheemacsd.com/setup-magit.el-01.html
        (defadvice magit-status (around magit-fullscreen activate)
          (window-configuration-to-register :magit-fullscreen)
          ad-do-it
          (delete-other-windows))
      ;; magit settings
      (setq
       ;; don't put "origin-" in front of new branch names by default
       magit-default-tracking-name-function 'magit-default-tracking-name-branch-only
       ;; open magit status in same window as current buffer
       magit-status-buffer-switch-function 'switch-to-buffer
       ;; highlight word/letter changes in hunk diffs
       magit-diff-refine-hunk t
       ;; ask me if I want to include a revision when rewriting
       magit-rewrite-inclusive 'ask
       ;; ask me to save buffers
       magit-save-some-buffers t
       ;; pop the process buffer if we're taking a while to complete
       magit-process-popup-time 10
       ;; ask me if I want a tracking upstream
       magit-set-upstream-on-push 'askifnotset
       )))
        ;; Close popup when committing - this stops the commit window
        ;; hanging around
        ;; From: http://git.io/rPBE0Q
        (defadvice git-commit-commit (after delete-window activate)
          (delete-window))
        (defadvice git-commit-abort (after delete-window activate)
          (delete-window))
        :config
        (progn
          ;; restore previously hidden windows
          (defadvice magit-quit-window (around magit-restore-screen activate)
            (let ((current-mode major-mode))
              ad-do-it
              ;; we only want to jump to register when the last seen buffer
              ;; was a magit-status buffer.
              (when (eq 'magit-status-mode current-mode)
                (jump-to-register :magit-fullscreen)))))
        ;; magit settings
        (setq
         ;; don't put "origin-" in front of new branch names by default
         magit-default-tracking-name-function 'magit-default-tracking-name-branch-only
         ;; open magit status in same window as current buffer
         magit-status-buffer-switch-function 'switch-to-buffer
         ;; highlight word/letter changes in hunk diffs
         magit-diff-refine-hunk t
         ;; ask me if I want to include a revision when rewriting
         magit-rewrite-inclusive 'ask
         ;; ask me to save buffers
         magit-save-some-buffers t
         ;; pop the process buffer if we're taking a while to complete
         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
*** 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
    :ensure t)
#+END_SRC
** 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)
@@ -925,25 +1003,37 @@
** 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
**** Flycheck
***** 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
***** 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))))
  (add-hook 'c-mode-hook 'setup-flycheck-project-path)
  (add-hook 'c++-mode-hook 'setup-flycheck-project-path)
#+END_SRC
**** Company
**** COMMENT Company
Add header completion as well as Irony, which uses clang for suggestions.
#+BEGIN_SRC emacs-lisp
  (use-package company-c-headers
@@ -953,38 +1043,53 @@
      (add-hook 'c++-mode-hook 'company-mode)
      (add-hook 'c-mode-hook 'company-mode))
  (use-package irony
    :ensure t
    :init
    (setq w32-pipe-read-delay 0)
    (setq irony-server-w32-pipe-buffer-size (* 64 1024))
    (add-hook 'c++-mode-hook 'irony-mode)
    (add-hook 'c-mode-hook 'irony-mode)
    (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options)
    (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options))
  ;; (use-package irony
  ;;   :ensure t
  ;;   :init
  ;;   (setq w32-pipe-read-delay 0)
  ;;   (setq irony-server-w32-pipe-buffer-size (* 64 1024))
  ;;   (add-hook 'c++-mode-hook 'irony-mode)
  ;;   (add-hook 'c-mode-hook 'irony-mode)
  ;;   (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options)
  ;;   (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options))
  (use-package company-irony
    :ensure t
    :config
    (add-to-list 'company-backends '(company-c-headers
                                     company-dabbrev-code
                                     company-irony)))
  ;; (use-package company-irony
  ;;   :ensure t
  ;;   :after irony
  ;;   :config
  ;;   (add-to-list 'company-backends '(company-c-headers
  ;;                                    company-dabbrev-code
  ;;                                    company-irony)))
#+END_SRC
**** LSP
Allow completion with LSP.
**** Clang-format
Automatically format buffer on save.
#+BEGIN_SRC emacs-lisp
(add-hook 'c-mode-hook 'lsp)
(add-hook 'cpp-mode-hook 'lsp)
      (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}"))))
      (use-package clang-format
        :ensure t
        :hook (c-mode-common . (set-clang-format-style)))
      ;;   (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 yasnippet
Enable yasnippet.
#+BEGIN_SRC emacs-lisp
(add-hook 'emacs-lisp-mode-hook 'yas-minor-mode)
#+END_SRC
**** COMMENT company
**** COMMENT Company
Add slime backend.
#+BEGIN_SRC emacs-lisp
(add-hook 'emacs-lisp-mode-hook 'company-mode)
@@ -1020,9 +1125,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
@@ -1063,7 +1168,7 @@
  (defun get-texcount-latest()
    (if (not(file-directory-p "~/.texcount"))
        (make-directory "~/.texcount"))
    (url-copy-file "https://app.uio.no/ifi/texcount/download.php?file=texcount_3_1_1.zip" "~/.texcount/texcount.zip" 1)
    (url-copy-file "https://app.uio.no/ifi/texcount/download.php?file=texcount_3_2_0_41.zip" "~/.texcount/texcount.zip" 1)
    (shell-command "unzip -o ~/.texcount/texcount.zip -d ~/.texcount")
    (add-to-list 'exec-path "~/.texcount/texcount.pl"))
@@ -1092,14 +1197,6 @@
  (add-hook 'latex-mode-hook (lambda () (define-key latex-mode-map (kbd "C-c c") 'texcount)))
#+END_SRC
**** LSP
Allow LSP completion
#+BEGIN_SRC emacs-lisp
  (add-hook 'tex-mode-hook 'lsp)
  (add-hook 'latex-mode-hook 'lsp)
  (add-hook 'TeX-mode-hook 'lsp)
  (add-hook 'LaTeX-mode-hook 'lsp)
#+END_SRC
*** PlantUML
Sets the PlantUML path for the mode to generate models.
#+BEGIN_SRC emacs-lisp
@@ -1107,10 +1204,13 @@
    :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
@@ -1127,76 +1227,41 @@
      (autoload 'racket-mode "Racket" "Racket Editing Mode" t)
      (add-to-list
       'auto-mode-alist
       '("\\.rkt$" . racket-mode))
      (setq matlab-indent-function t))
       '("\\.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
    :hook (verilog-mode . lsp)
    :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")
    :ensure t
    :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
@@ -1233,7 +1298,6 @@
#+BEGIN_SRC emacs-lisp
  (use-package rust-mode
    :ensure t
    :hook (rust-mode . lsp)
    :config
    ;; style guide suggests spaces not tabs
    (add-hook 'rust-mode-hook (lambda () (setq indent-tabs-mode nil)))
@@ -1256,32 +1320,38 @@
  (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
    :ensure t
    :config
    (add-hook 'before-save-hook #'gofmt-before-save))
#+END_SRC
**** COMMENT Completion
Code completion with racer.
#+RESULTS:
: t
**** Flycheck
#+BEGIN_SRC emacs-lisp
  (use-package racer
  (use-package flycheck-golangci-lint
    :ensure t
    :hook ((rust-mode . racer-mode)
           (racer-mode . (eldoc-mode company-mode)))
    :init
    (setq racer-command "~/.cargo/bin/racer"))
    :config
    (add-hook 'flycheck-mode-hook #'flycheck-golangci-lint-setup))
#+END_SRC
*** Bash
**** LSP
Completion with LSP
**** Company
#+BEGIN_SRC emacs-lisp
(add-hook 'sh-mode-hook 'lsp)
  (use-package company-go
    :ensure t)
#+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
@@ -1311,13 +1381,13 @@
               (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
  (use-package org-superstar
    :ensure t
    :config
    (add-hook 'org-mode-hook (lambda () (org-bullets-mode))))
    (add-hook 'org-mode-hook (lambda () (org-superstar-mode 1))))
#+END_SRC
** Org Babel
@@ -1333,7 +1403,6 @@
                                                             (scheme . t)
                                                             (gnuplot . t)
                                                             (matlab . t)
                                                             (plantuml . t)
                                                             (fortran . t)
                                                             (java . t)
                                                             (plantuml . t)))
@@ -1365,6 +1434,7 @@
** Org export additions
*** 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)
@@ -1489,7 +1559,8 @@
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