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

Joel Grunbaum
2020-10-15 c8124c3efb9c68bd4a3310da1422af9fa92e61f1
config.org
@@ -1,5 +1,5 @@
#+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.
@@ -54,6 +54,13 @@
           (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
@@ -82,6 +89,7 @@
* 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
@@ -102,6 +110,7 @@
  ;; (add-hook 'latex-mode-hook 'flyspell-buffer)
  (add-hook 'org-mode-hook 'flyspell-mode)
  ;; (add-hook 'org-mode-hook 'flyspell-buffer)
  (diminish 'flyspell-mode)
#+END_SRC
@@ -488,7 +497,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)
@@ -668,6 +677,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
@@ -689,6 +720,15 @@
Slightly nicer separator.
#+BEGIN_SRC emacs-lisp
(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
@@ -738,6 +778,33 @@
    (setq company-minimum-prefix-length 3))
#+END_SRC
** LSP Mode
Use LSP for completion suggestions
#+BEGIN_SRC emacs-lisp
  (use-package lsp-mode
    :ensure t
    :hook ((lsp-mode . lsp-enable-which-key-integration))
    :init
    (setq lsp-keymap-prefix "C-c l")
    :commands lsp
    :config
    (setq read-process-output-max (* 1024 1024))
    (setq lsp-completion-provider :capf))
  (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
Emacs git client.
Pretty good and offers fairly decent features.
@@ -891,6 +958,12 @@
                                     company-irony)))
#+END_SRC
**** LSP
Allow completion with LSP.
#+BEGIN_SRC emacs-lisp
(add-hook 'c-mode-hook 'lsp)
(add-hook 'cpp-mode-hook 'lsp)
#+END_SRC
*** emacs-lisp
**** COMMENT yasnippet
Enable yasnippet.
@@ -981,7 +1054,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 ()
@@ -1015,7 +1088,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
@@ -1051,54 +1125,55 @@
**** 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
    :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")
    :config
    (autoload 'verilog-mode "verilog-mode" "Verilog mode" t )
    (add-to-list 'auto-mode-alist '("\\.[ds]?vh?\\'" . verilog-mode)))
#+END_SRC
*** COMMENT MATLAB
@@ -1131,6 +1206,54 @@
    :ensure t)
#+END_SRC
*** Rust
**** Major mode
Get the major mode for rust files.
#+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)))
    (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
*** Bash
**** LSP
Completion with LSP
#+BEGIN_SRC emacs-lisp
(add-hook 'sh-mode-hook 'lsp)
#+END_SRC
* Org mode
** Up to date org
Pull the latest org mode from the repository, rather than the org which comes with emacs.
@@ -1199,6 +1322,14 @@
Org uses its own path for some reason.
#+BEGIN_SRC emacs-lisp
  (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
@@ -1379,17 +1510,3 @@
                 :sitemap-filename "index.html"
                 :sitemap-function org-publish-sitemap)))
#+END_SRC
** COMMENT Daily
Using Org-Journal for daily journaling.
Package provides journaling support files for org mode.
#+BEGIN_SRC emacs-lisp
  (use-package org-journal
    :ensure t
    :custom
    (org-journal-dir "~/Documents/Journal/daily")
    (org-journal-date-format "%A, %d %B %Y")
    (org-journal-time-format "%I:%M %p")
    (org-journal-file-type "daily"))
#+END_SRC