#+options: ':nil *:t -:t ::t <:t H:3 \n:nil ^:t arch:headline #+options: author:t broken-links:nil c:nil creator:nil #+options: d:(not "LOGBOOK") date:t e:t email:nil f:t inline:t num:t #+options: p:nil pri:nil prop:nil stat:t tags:t tasks:t tex:t #+options: timestamp:t title:t toc:t todo:t |:t #+title: Universe Emacs Config #+author: #+language: en * Intialization We must initialize =leaf.el=, which we use as a use-package replacement for defining configs for different things. #+begin_src elisp ;; (eval-and-compile (customize-set-variable 'package-archives '(("org" . "https://orgmode.org/elpa/") ("melpa" . "https://melpa.org/packages/") ("gnu" . "https://elpa.gnu.org/packages/"))) (package-initialize) (unless (package-installed-p 'leaf) (package-refresh-contents) (package-install 'leaf)) (leaf leaf-keywords :ensure t :init (leaf el-get :ensure t) (leaf hydra :ensure t) (leaf blackout :ensure t) :config ;; initialize leaf-keywords.el (leaf-keywords-init))) ;; (leaf leaf-tree :ensure t) (leaf leaf-convert :ensure t) (leaf transient-dwim :ensure t :bind (("M-=" . transient-dwim-dispatch))) #+end_src #+begin_src elisp (leaf custom-el :config ;; Ensure custom writes to specific file (setq custom-file (expand-file-name "custom.el" user-emacs-directory)) (load custom-file 'noerror 'nomessage)) #+end_src #+begin_src elisp (leaf backup :config ;; Change the location of file backups/locks into the emacs.d/backups/ (setq backup-directory-alist `(("." . ,(concat user-emacs-directory "backups"))))) #+end_src * Visual Customization #+begin_src elisp (leaf visual :doc "Visual Changes to Emacs" :tag "builtin" "internal" :custom ((menu-bar-mode . nil) (tool-bar-mode . nil) (scroll-bar-mode . nil)) :custom-face ((default . '((t (:family "JuliaMono" :height 150 :weight normal))))) :config (prog1 'visual ;; Set location of custom theme dir (setq custom-theme-directory (concat user-emacs-directory "themes")) (load-theme 'UniverseHighContrast))) #+end_src * Package Configuration ** Path Preservation Exec-path-from-shell ensures that path variable is preserved from shell. #+begin_src elisp (leaf exec-path-from-shell :ensure t :config (exec-path-from-shell-initialize)) #+end_src ** Font Related *** Ligature Font related ligatures, combining multiple characters into "one". #+begin_src elisp (leaf ligature :ensure t :config ;; Enable the "www" ligature in every possible major mode (ligature-set-ligatures 't '("www")) ;; Enable traditional ligature support in eww-mode, if the ;; `variable-pitch' face supports it (ligature-set-ligatures 'eww-mode '("ff" "fi" "ffi")) ;; Enable all Cascadia Code ligatures in programming modes (ligature-set-ligatures 'prog-mode '("|||>" "<|||" "<==>" "" "---" "-<<" "<~~" "<~>" "<*>" "<||" "<|>" "<$>" "<==" "<=>" "<=<" "<->" "<--" "<-<" "<<=" "<<-" "<<<" "<+>" "" "###" "#_(" "..<" "..." "+++" "/==" "///" "_|_" "www" "&&" "^=" "~~" "~@" "~=" "~>" "~-" "**" "*>" "*/" "||" "|}" "|]" "|=" "|>" "|-" "{|" "[|" "]#" "::" ":=" ":>" ":<" "$>" "==" "=>" "!=" "!!" ">:" ">=" ">>" ">-" "-~" "-|" "->" "--" "-<" "<~" "<*" "<|" "<:" "<$" "<=" "<>" "<-" "<<" "<+" "" "++" "?:" "?=" "?." "??" ";;" "/*" "/=" "/>" "//" "__" "~~" "(*" "*)" "\\\\" "://")) ;; Enables ligature checks globally in all buffers. You can also do it ;; per mode with `ligature-mode'. (global-ligature-mode t)) #+end_src ** Profiling #+begin_src elisp (leaf esup :disabled nil :ensure t) #+end_src ** Version Control #+begin_src elisp (leaf magit :ensure t :require t) #+end_src ** Nix Related *** Direnv In order to support direnv (loading =nix-shell= / =nix develop=) #+begin_src elisp (leaf direnv :ensure t :hook (direnv-mode)) #+end_src *** Nix-mode =.nix= file mode #+begin_src elisp (leaf nix-mode :ensure t) #+end_src ** WEB We all know the web is the future, obviously, of course. #+begin_src elisp (leaf web-mode :ensure t :mode "\\.p?html?\\'" "\\.djtml\\'" "\\.jsx?\\'" "\\.tsx?\\'") (leaf php-mode :ensure t) #+end_src ** D2 #+begin_src elisp (leaf d2-mode :ensure t) #+end_src ** YAML #+begin_src elisp (leaf yaml-mode :ensure t) #+end_src ** IDE Like Things *** Company Completion! We like autocomplete, it... is nice, okay? #+begin_src elisp (leaf company :ensure t :bind (("C-" . company-complete)) :hook after-init-hook :config (global-company-mode)) #+end_src *** Language Server Protocol We love language features that make languages nice #+begin_src elisp (leaf lsp-mode :ensure t :init (setq lsp-keymap-prefix "C-c l") :hook ((dart-mode-hook . lsp) (python-mode-hook . lsp) (c-mode-hook . lsp) (c++-mode-hook . lsp) (haskell-mode-hook . lsp) (java-mode-hook . lsp) (rust-mode-hook . lsp) ;; which key support v v v (lsp-mode-hook . lsp-enable-which-key-integration)) :commands lsp :config (leaf lsp-ui :ensure t :commands lsp-ui-mode) (leaf flycheck :ensure t) (leaf lsp-treemacs :ensure t :commands lsp-treemacs-errors-list) (leaf helm-lsp :ensure t :commands helm-lsp-workspace-symbol) (leaf dap-mode :ensure t) (leaf which-key :ensure t :config (which-key-mode))) #+end_src **** Projectile (Projects) #+begin_src elisp (leaf projectile :commands projectile-mode :config (projectile-mode +1)) #+end_src ** Python Things *** Python-mode Using python-mode is to have more up to date features (and highlighting) compared to builtin python-mode. #+begin_src elisp (leaf python-mode :ensure t :config (setq python-shell-interpreter "ipython" python-shell-interpreter-args "-i --simple-prompt --InteractiveShell.display_page=True")) #+end_src *** Poetry For when we aren't nix'ing things, and want some nice poetry. #+begin_src elisp (leaf poetry :ensure t) #+end_src ** Java LSP for java is /nice/. #+begin_src elisp (leaf lsp-java :hook (java-mode-hook . lsp)) #+end_src ** C Who even needs C++, not me, no way, no how. #+begin_src elisp (leaf company-ctags :ensure t) (leaf company-c-headers :ensure t) (leaf meson-mode :ensure t) #+end_src ** Haskell #+begin_src elisp (leaf haskell-mode :ensure t :config (leaf lsp-haskell :ensure t) (leaf company-ghci :ensure t)) #+end_src ** Rust #+begin_src elisp (leaf rust-mode :ensure t) #+end_src ** Minecraft?? Minecraft =mcfunction= support, because, it can be annoying to type this stuff otherwise. #+begin_src elisp (leaf mcf-mode :el-get rasensuihei/mcf) #+end_src ** Lisps Gonna need to have pretty brackets #+begin_src elisp (leaf rainbow-delimiters :ensure t :commands rainbow-delimiters-mode :config (leaf rainbow :hook (emacs-lisp-mode-hook . rainbow-delimiters-mode) (geiser-mode-hook . rainbow-delimiters-mode))) #+end_src *** Racket Makes using racket so much nicer #+begin_src elisp (leaf geiser-racket :ensure t) #+end_src ** Org We use org-ref because it provides some niceties, like doi-utils for updating our bibliography. #+begin_src elisp (leaf ivy-bibtex :ensure t) (leaf helm-bibtex :ensure t) (leaf org-ref :ensure t :after org :init (leaf pdf-tools :ensure t) :config :require org-ref org-ref-ivy org-ref-helm doi-utils) #+end_src For more export formats we use pandoc: #+begin_src elisp (leaf ox-pandoc :ensure t :after org) #+end_src Nicer LaTeX editing (AuCTeX): #+begin_src elisp (leaf auctex :ensure t :after org) #+end_src We also ma(k|d)e use of org-tempo for templating things, which can be nice. Should use the export based templating probably. Eventually. #+begin_src elisp (leaf org-cfg :after org :require org-ref oc-csl org-tempo ox-latex ox-pandoc :init :bind ("C-c ]" . org-ref-insert-link) ("s-[" . org-ref-insert-link-hydra/body) :hook (org-mode-hook . auto-fill-mode) :config (set-fill-column 100) (setq org-src-fontify-natively t org-confirm-babel-evaluate nil org-src-preserve-indentation t) (setq bibtex-completion-bibliography (list (expand-file-name "~/Documents/Bibliography/references.bib"))) (setq org-ref-bibliography-notes "~/Documents/Bibliography/notes.org" org-ref-default-bibliography '("~/Documents/Bibliography/references.bib") org-ref-pdf-directory "~/Documents/Bibliography/bibtex-pdfs/") (setq org-ref-insert-link-function 'org-ref-insert-link-hydra/body org-ref-insert-cite-function 'org-ref-cite-insert-helm org-ref-insert-label-function 'org-ref-insert-label-link org-ref-insert-ref-function 'org-ref-insert-ref-link org-ref-cite-onclick-function (lambda (_) (org-ref-citation-hydra/body))) (tempo-define-template "Lab Template" '("#+TITLE: PHY324: LAB TITLE"n "#+AUTHOR: ***REMOVED*** | ***REMOVED***"n "#+DATE: \\today"n "#+LATEX_HEADER: \\usepackage{natbib}"n "#+LATEX_HEADER: \\usepackage{float}"n "#+LATEX_CLASS: labtemplate"n "#+OPTIONS: toc:nil"n ""n "* Abstract:"n "* Introduction:"n > p "* Methods:"n "* Results:"n "* Discussion:"n "bibliographystyle:ieeetr"n "bibliography:~/Documents/Bibliography/references.bib" >) " n > "#+NAME: fig:" (s name) > n > "#+ATTR_LaTeX: :placement [H]" > n > "[[" (s image) "]]" > n > p >) "