aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorJacob Janzen <jacob.a.s.janzen@gmail.com>2024-10-01 17:42:59 -0500
committerJacob Janzen <jacob.a.s.janzen@gmail.com>2024-10-01 17:42:59 -0500
commit7b0ea5cbdaaa5b8392777ad207c74cb27411eab1 (patch)
tree37a3438116ec3c84663133c820808ad9e2acf021 /common
parent7a347653dfad8c6c33791f7e72a4ec40b8230ac3 (diff)
the big refactor
Diffstat (limited to 'common')
-rw-r--r--common/.clang-format.org (renamed from common/clang-format.org)0
-rw-r--r--common/.config/alacritty/alacritty.toml.org55
-rw-r--r--common/.config/emacs/feed.org.org39
-rw-r--r--common/.config/emacs/force-custom-file.el.org8
-rw-r--r--common/.config/emacs/init.el.org10
-rw-r--r--common/.config/emacs/languages.el.org148
-rw-r--r--common/.config/emacs/package-setup.el.org25
-rw-r--r--common/.config/emacs/tools.el.org391
-rw-r--r--common/.config/emacs/user-interface.el.org131
-rw-r--r--common/.config/fastfetch/config.jsonc.org (renamed from common/.config/fastfetch/config.org)0
-rw-r--r--common/.config/nvim/init.lua.org (renamed from common/.config/nvim/init.org)0
-rw-r--r--common/.config/nvim/lua/appearance.lua.org (renamed from common/.config/nvim/lua/appearance.org)0
-rw-r--r--common/.config/nvim/lua/behaviour.lua.org (renamed from common/.config/nvim/lua/behaviour.org)0
-rw-r--r--common/.config/nvim/lua/plugins.lua.org (renamed from common/.config/nvim/lua/plugins.org)0
-rwxr-xr-xcommon/.config/sketchybar/plugins/battery.sh.org46
-rwxr-xr-xcommon/.config/sketchybar/plugins/clock.sh.org7
-rwxr-xr-xcommon/.config/sketchybar/plugins/cpu.sh.org7
-rwxr-xr-xcommon/.config/sketchybar/plugins/front_app.sh.org9
-rwxr-xr-xcommon/.config/sketchybar/plugins/mem.sh.org16
-rwxr-xr-xcommon/.config/sketchybar/plugins/space.sh.org7
-rwxr-xr-xcommon/.config/sketchybar/plugins/volume.sh.org21
-rwxr-xr-xcommon/.config/sketchybar/sketchybarrc.org77
-rw-r--r--common/.config/skhd/skhdrc.org80
-rw-r--r--common/.config/yabai/yabairc.org68
-rw-r--r--common/.gitconfig.org.gpg (renamed from common/gitconfig.org.gpg)bin929 -> 929 bytes
-rw-r--r--common/.local/share/fonts/NFM.tar.gzbin2150400 -> 0 bytes
-rw-r--r--common/.profile.org (renamed from common/profile.org)0
-rw-r--r--common/.zshrc.org (renamed from common/zshrc.org)0
28 files changed, 1145 insertions, 0 deletions
diff --git a/common/clang-format.org b/common/.clang-format.org
index 6c38b3b..6c38b3b 100644
--- a/common/clang-format.org
+++ b/common/.clang-format.org
diff --git a/common/.config/alacritty/alacritty.toml.org b/common/.config/alacritty/alacritty.toml.org
new file mode 100644
index 0000000..992ed63
--- /dev/null
+++ b/common/.config/alacritty/alacritty.toml.org
@@ -0,0 +1,55 @@
+#+title: Alacritty Configuration
+
+Remove window decorations.
+#+begin_src conf :tangle ~/.config/alacritty/alacritty.toml :mkdirp yes
+ [window]
+ decorations = "None"
+#+end_src
+
+Make the window slightly transparent.
+#+begin_src conf :tangle ~/.config/alacritty/alacritty.toml :mkdirp yes
+ opacity = 0.9
+#+end_src
+
+Add slight padding around the text.
+#+begin_src conf :tangle ~/.config/alacritty/alacritty.toml :mkdirp yes
+ padding = { x = 6, y = 6 }
+#+end_src
+
+Allow use of option as an alt key on Mac OS.
+#+begin_src conf :tangle ~/.config/alacritty/alacritty.toml :mkdirp yes
+ option_as_alt = "Both"
+#+end_src
+
+Use the same font as normal.
+#+begin_src conf :tangle ~/.config/alacritty/alacritty.toml :mkdirp yes
+ [font]
+ normal = { family = "SauceCodePro Nerd Font", style = "Regular" }
+ size = 14
+#+end_src
+
+#+begin_src conf :tangle ~/.config/alacritty/alacritty.toml :mkdirp yes
+ [colors.primary]
+ background = '#ece0c9'
+ foreground = '#191916'
+
+ [colors.normal]
+ black = '#191916'
+ red = '#ac4438'
+ green = '#354d52'
+ yellow = '#ba9151'
+ blue = '#465b91'
+ magenta = '#5b5489'
+ cyan = '#4e6062'
+ white = '#c9ad7a'
+
+ [colors.bright]
+ black = '#293c3c'
+ red = '#d8611c'
+ green = '#4b7b53'
+ yellow = '#d8974b'
+ blue = '#2f3d91'
+ magenta = '#735e82'
+ cyan = '#6b8f92'
+ white = '#ece0c9'
+#+end_src
diff --git a/common/.config/emacs/feed.org.org b/common/.config/emacs/feed.org.org
new file mode 100644
index 0000000..f0de605
--- /dev/null
+++ b/common/.config/emacs/feed.org.org
@@ -0,0 +1,39 @@
+#+title: Emacs RSS Feed
+
+#+begin_src org :tangle ~/.config/emacs/feed.org :mkdirp yes
+ ,* Blogs
+ :PROPERTIES:
+ :ID: elfeed
+ :END:
+ ,** Journalism :journalism:
+ ,*** [[https://waxy.org/feed/][Waxy.org]]
+ ,*** [[https://pluralistic.net/feed/][Cory Doctorow]] :technology:software:fiction:
+ ,** Computer Science :cs:
+ ,*** [[https://a.exozy.me/index.xml][Some Random Website]] :math:algorithms:fiction:
+ ,** Technology :technology:
+ ,*** [[https://ciechanow.ski/atom.xml][Bartosz Ciechanowshki]]
+ ,*** [[https://www.citationneeded.news/rss/][Citation Needed]]
+ ,*** [[https://www.lilysthings.org/blog/rss.xml][The Cool Blog]]
+ ,** Software :software:
+ ,*** [[https://eieio.games/feed.xml][eieio.games]]
+ ,*** [[https://ersei.net/en/blog.atom][Ersei]]
+ ,*** [[https://lilysthings.org/blog/rss.xml][Lily's Things]]
+ ,*** [[https://ntietz.com/atom.xml][Technically a Blog]]
+ ,*** [[https://alexwlchan.net/atom.xml][Alex Chan]]
+ ,*** [[https://eaton-works.com/feed.atom][Eaton Works]] :hacking:
+ ,*** [[https://computer.rip/rss.xml][Computer's Are Bad]] :technology:
+ ,*** [[https://mark.stosberg.com/rss/][Mark Stosberg]] :biking:
+ ,*** [[https://maia.crimew.gay/feed.xml][Maia Crimew]] :internet:hacking:
+ ,*** [[https://drewdevault.com/blog/index.xml][Drew DeVault]]
+ ,** Comics :comic:
+ ,*** [[https://xkcd.com/atom.xml][XKCD]]
+ ,** People I know
+ ,*** [[https://www.weavingwatersexpedition.com/news?format=rss][Weaving Waters Expedition]] :journalism:
+ ,*** [[https://pinkish.bearblog.dev/feed/][Pinkish]] :software:
+ ,*** [[https://jjanzen.ca/rss.xml][Me]] :software:review:
+ ,** Internet Infrastructure :internet:software:
+ ,*** [[https://daniel.haxx.se/blog/feed/][cURL]]
+ ,*** [[https://blog.archive.org/feed/][Archive.org]]
+ ,** Reviews :review:
+ ,*** [[https://mountainofink.com/?format=rss][Mountain of Ink]]
+#+end_src
diff --git a/common/.config/emacs/force-custom-file.el.org b/common/.config/emacs/force-custom-file.el.org
new file mode 100644
index 0000000..8b8a418
--- /dev/null
+++ b/common/.config/emacs/force-custom-file.el.org
@@ -0,0 +1,8 @@
+#+title: Emacs Force the Usage of a =custom.el= File
+
+Force the usage of a =custom.el= file for customizations instead of placing them in =init.el=.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/force-custom-file.el :mkdirp yes
+ (setq custom-file (concat user-emacs-directory "custom.el"))
+ (when (file-exists-p custom-file)
+ (load custom-file))
+#+end_src
diff --git a/common/.config/emacs/init.el.org b/common/.config/emacs/init.el.org
new file mode 100644
index 0000000..4f13b21
--- /dev/null
+++ b/common/.config/emacs/init.el.org
@@ -0,0 +1,10 @@
+#+title: Emacs Configuration
+
+Load files for config.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/init.el :mkdirp yes
+ (load "~/.config/emacs/force-custom-file.el")
+ (load "~/.config/emacs/package-setup.el")
+ (load "~/.config/emacs/user-interface.el")
+ (load "~/.config/emacs/tools.el")
+ (load "~/.config/emacs/languages.el")
+#+end_src
diff --git a/common/.config/emacs/languages.el.org b/common/.config/emacs/languages.el.org
new file mode 100644
index 0000000..3ee63e0
--- /dev/null
+++ b/common/.config/emacs/languages.el.org
@@ -0,0 +1,148 @@
+#+title: Emacs Programming Language Setup
+
+* Shell Script
+Run =eglot= on shell script files.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (add-hook 'sh-mode-hook 'jj/eglot-setup)
+#+end_src
+
+* C
+Run =eglot= on C and C++ files.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (add-hook 'c-mode-hook 'jj/eglot-setup)
+ (add-hook 'c++-mode-hook 'jj/eglot-setup)
+ (add-hook 'cc-mode-hook 'jj/eglot-setup)
+#+end_src
+
+Run =eglot= on CMake files.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (use-package cmake-mode
+ :init
+ (add-hook 'cmake-mode-hook 'jj/eglot-setup))
+#+end_src
+
+Turn off C mode in =lex= and =yacc= files.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (add-to-list 'auto-mode-alist '("\\.l$" . prog-mode))
+ (add-to-list 'auto-mode-alist '("\\.y$" . prog-mode))
+#+end_src
+
+* Web
+Run =eglot= on HTML files.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (add-hook 'html-mode-hook 'jj/eglot-setup)
+#+end_src
+
+Run =eglot= on CSS files.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (add-hook 'css-mode-hook 'jj/eglot-setup)
+#+end_src
+
+Run =eglot= on JavaScript files.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (add-hook 'js-json-mode-hook 'jj/eglot-setup)
+ (add-hook 'js-mode-hook 'jj/eglot-setup)
+#+end_src
+
+* Python
+Run =eglot= on Python files.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (add-hook 'python-mode-hook 'jj/eglot-setup)
+#+end_src
+
+* Go
+Install Go support and run =eglot= on Go files.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (use-package go-mode
+ :init
+ (add-hook 'go-mode-hook 'jj/eglot-setup))
+#+end_src
+
+Get documentation for Go variables, functions, and arguments.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (use-package go-eldoc
+ :init
+ (add-hook 'go-mode-hook 'go-eldoc-setup))
+#+end_src
+
+Automatically generate tests in Go.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (use-package go-gen-test)
+#+end_src
+
+Get refactoring tools from =go-guru=.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (use-package go-guru
+ :hook (go-mode . go-guru-hl-identifier-mode))
+#+end_src
+
+* Lua
+Install Lua support and run =eglot= on Lua files.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (use-package lua-mode
+ :init
+ (add-hook 'lua-mode-hook 'jj/eglot-setup))
+#+end_src
+
+Better Lisp editing with =lispy=.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (use-package lispy
+ :hook (emacs-lisp-mode . lispy-mode))
+ (use-package lispyville
+ :after lispy
+ :hook (lispy-mode . lispyville-mode))
+#+end_src
+
+Better parentheses handling in lisp with =parinfer-rust-mode=.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (use-package parinfer-rust-mode
+ :hook (emacs-lisp-mode . parinfer-rust-mode)
+ :init
+ (setq parinfer-rust-auto-download t))
+#+end_src
+
+* Markdown
+Install Markdown support and run =eglot= on Markdown files.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (use-package markdown-mode
+ :init
+ (add-hook 'markdown-mode-hook 'jj/eglot-setup))
+#+end_src
+
+* LaTeX
+Run =eglot= on TeX files.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (add-hook 'tex-mode-hook 'jj/eglot-setup)
+#+end_src
+
+Use AUCTeX for extra LaTeX integration.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (use-package auctex
+ :config
+ (add-hook 'LaTeX-mode-hook 'jj/eglot-setup)
+ (add-hook 'LaTeX-mode-hook
+ (lambda ()
+ (put 'LaTeX-mode 'eglot-language-id "latex"))))
+#+end_src
+
+Use CDLaTeX for environment and macro insertion.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (use-package cdlatex
+ :config
+ (add-hook 'LaTeX-mode-hook #'turn-on-cdlatex))
+#+end_src
+
+* YAML
+Install YAML support and run =eglot= on YAML files.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (use-package yaml-mode
+ :init
+ (add-hook 'yaml-mode-hook 'jj/eglot-setup))
+#+end_src
+
+* Nix
+Install =nix= support and run =eglot= on =nix= files.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/languages.el :mkdirp yes
+ (use-package nix-mode
+ :mode "\\.nix\\'")
+#+end_src
diff --git a/common/.config/emacs/package-setup.el.org b/common/.config/emacs/package-setup.el.org
new file mode 100644
index 0000000..6ed238c
--- /dev/null
+++ b/common/.config/emacs/package-setup.el.org
@@ -0,0 +1,25 @@
+#+title: Emacs Package Setup
+Install =straight= for better package management.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/package-setup.el :mkdirp yes
+ (defvar bootstrap-version)
+ (let ((bootstrap-file
+ (expand-file-name
+ "straight/repos/straight.el/bootstrap.el"
+ (or (bound-and-true-p straight-base-dir)
+ user-emacs-directory)))
+ (bootstrap-version 7))
+ (unless (file-exists-p bootstrap-file)
+ (with-current-buffer
+ (url-retrieve-synchronously
+ "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el"
+ 'silent 'inhibit-cookies)
+ (goto-char (point-max))
+ (eval-print-last-sexp)))
+ (load bootstrap-file nil 'nomessage))
+#+end_src
+
+Install =use-package= for declarative package installation. Make =use-package= default to =ensure t= so that packages are enabled if they are declared.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/package-setup.el :mkdirp yes
+ (straight-use-package 'use-package)
+ (setq straight-use-package-by-default t)
+#+end_src
diff --git a/common/.config/emacs/tools.el.org b/common/.config/emacs/tools.el.org
new file mode 100644
index 0000000..d52c1b6
--- /dev/null
+++ b/common/.config/emacs/tools.el.org
@@ -0,0 +1,391 @@
+#+title: Emacs Tool Setup
+
+* Vi Keybindings
+Use =vi= keybindings with =evil=. Set the undo system to =undo-fu=. Wrapped lines can be moved between with =j= and =k=.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package evil
+ :init
+ (setq evil-want-keybinding nil)
+ :config
+ (evil-mode)
+ (evil-global-set-key 'motion "j" 'evil-next-visual-line)
+ (evil-global-set-key 'motion "k" 'evil-previous-visual-line)
+ (evil-global-set-key 'motion (kbd "RET") nil)
+ :custom
+ (evil-undo-system 'undo-fu))
+#+end_src
+
+Use =evil-collection= to include =vi= keybindings in extra modes.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package evil-collection
+ :after evil
+ :config
+ (evil-collection-init))
+#+end_src
+
+* Undo
+Better undo with =undo-fu=.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package undo-fu)
+#+end_src
+
+Make undo persistent when closing Emacs with =undo-fu-session=.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package undo-fu-session
+ :init (undo-fu-session-global-mode 1))
+#+end_src
+
+* Lookup
+Better lookup with =dumb-jump=.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package dumb-jump
+ :init (add-hook 'xref-backend-functions #'dumb-jump-xref-activate))
+#+end_src
+
+* Version Control
+Install Magit for Git integration.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package magit)
+#+end_src
+
+* Remote Editing
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+(setq tramp-default-method "ssh")
+#+end_src
+
+* Document Viewing
+Replace =DocView= with a better document viewer from =pdf-tools=.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package pdf-tools
+ :config
+ (pdf-tools-install)
+ :init
+ (add-hook 'pdf-view-mode-hook #'(lambda () (display-line-numbers-mode -1)))
+ (add-hook 'TeX-after-compilation-finished-functions
+ #'TeX-revert-document-buffer)
+ :config
+ (setq TeX-view-program-selection '((output-pdf "PDF Tools"))
+ TeX-view-program-list '(("PDF Tools" TeX-pdf-tools-sync-view))
+ TeX-source-correlate-start-server t))
+#+end_src
+
+Save place in PDFs with =saveplace-pdf-view=.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package saveplace-pdf-view
+ :config (save-place-mode 1))
+#+end_src
+
+* Org-Mode
+Ensure that =org= is set up before any of this.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package org)
+#+end_src
+Set my =org-mode= directory.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (setq org-directory "~/org")
+#+end_src
+
+Hide emphasis markers because I can see if something is *bold*, /italic/, or =monospace= without needing to see the markers.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (setq org-hide-emphasis-markers t)
+#+end_src
+
+Set up nicer looking bullet points.
+- they look like circles
+- instead of hyphens
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (font-lock-add-keywords 'org-mode
+ '(("^ *\\([-]\\) "
+ (0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•"))))))
+#+end_src
+
+Set up fonts. Don't use =monospace= by default. Do use it where necessary though. Also, make different heading levels different sizes.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (add-hook 'org-mode-hook 'variable-pitch-mode)
+ (custom-set-faces
+ `(variable-pitch ((t :font ,jj/var-font)))
+ `(fixed-pitch ((t :font ,jj/mono-font)))
+ '(org-block ((t (:inherit fixed-pitch))))
+ '(org-code ((t (:inherit (shadow fixed-pitch)))))
+ '(org-document-info-keyword ((t (:inherit (shadow fixed-pitch)))))
+ '(org-meta-line ((t (:inherit (font-lock-comment-face fixed-pitch)))))
+ '(org-verbatim ((t (:inherit (shadow fixed-pitch)))))
+ '(org-table ((t (:inherit (shadow fixed-pitch)))))
+ '(org-document-title ((t (:inherit title :height 2.0 :underline nil))))
+ '(org-level-1 ((t (:inherit outline-1 :weight: bold :height 1.75))))
+ '(org-level-2 ((t (:inherit outline-2 :weight: bold :height 1.5))))
+ '(org-level-2 ((t (:inherit outline-3 :weight: bold :height 1.25))))
+ '(org-level-2 ((t (:inherit outline-4 :weight: bold :height 1.1))))
+ '(org-level-4 ((t (:inherit outline-4 :height 1.1))))
+ '(org-level-5 ((t (:inherit outline-5 :height 1.0))))
+ )
+#+end_src
+
+Wrap lines and centre the view to make for a nicer reading experience.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package visual-fill-column)
+ (add-hook 'org-mode-hook 'visual-line-mode)
+ (add-hook 'org-mode-hook #'(lambda () (display-line-numbers-mode -1)))
+ (defun jj/org-mode-visual-fill ()
+ (setq visual-fill-column-width 100
+ visual-fill-column-center-text t)
+ (visual-fill-column-mode 1))
+ (add-hook 'org-mode-hook #'jj/org-mode-visual-fill)
+#+end_src
+
+Increase the size of LaTeX previews.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (setq org-format-latex-options (plist-put org-format-latex-options :scale 2.0))
+#+end_src
+
+Follow links with the return key.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (setq org-return-follows-link t)
+#+end_src
+
+Tangle on save.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (defun org-babel-tangle-config ()
+ (when (string-suffix-p ".org" (buffer-file-name))
+ (org-babel-tangle)))
+ (add-hook 'org-mode-hook
+ (lambda ()
+ (add-hook 'after-save-hook #'org-babel-tangle-config)))
+#+end_src
+
+Enable Org Crypt.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (org-crypt-use-before-save-magic)
+ (setq org-tags-exclude-from-inheritance '("crypt"))
+ (setq org-crypt-key nil)
+ (setq auto-save-default nil)
+#+end_src
+
+* Shell
+Use =eshell= as an integrated shell.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package eshell)
+ (global-set-key (kbd "C-c e") 'eshell)
+#+end_src
+
+* Language Servers
+Add =eglot= keybindings.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (global-set-key (kbd "C-c r") 'eglot-rename)
+ (global-set-key (kbd "C-c a") 'eglot-code-actions)
+#+end_src
+
+Install =tree-sitter=.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package tree-sitter)
+ (use-package tree-sitter-langs)
+#+end_src
+
+Define function to set up =eglot= automatically.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (defun jj/eglot-setup ()
+ (eglot-ensure)
+ (tree-sitter-mode 1)
+ (tree-sitter-hl-mode 1))
+#+end_src
+
+* Completions
+Use company for completions with no delay, starting immediately after first character is typed.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package company
+ :config
+ (add-hook 'after-init-hook 'global-company-mode)
+ (setq company-idle-delay 0
+ company-minimum-prefix-length 1
+ company-selection-wrap-around t))
+#+end_src
+
+Use =vertico= as a completion user interface.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package vertico
+ :custom
+ (vertico-cycle t)
+ :init
+ (vertico-mode))
+#+end_src
+
+Use =orderless= to allow typing any portion of a word that you want to search for.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package orderless
+ :ensure t
+ :custom
+ (completion-styles '(orderless basic))
+ (completion-category-overrides '((file (styles basic partial-completion)))))
+#+end_src
+
+Get descriptions of items in =vertico= with =marginalia=.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package marginalia
+ :bind (:map minibuffer-local-map
+ ("M-A" . marginalia-cycle))
+ :init
+ (marginalia-mode))
+#+end_src
+
+Get nerd font icons in completions.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package nerd-icons-completion
+ :config
+ (nerd-icons-completion-mode))
+#+end_src
+
+Use consult with =vertico= for extra functionality to various functions.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package consult
+ :bind (
+ ("C-c M-x" . consult-mode-command)
+ ("C-c h" . consult-history)
+ ("C-c k" . consult-kmacro)
+ ("C-c m" . consult-man)
+ ("C-c i" . consult-info)
+ ([remap Info-search] . consult-info)
+ ("C-x M-:" . consult-complex-command)
+ ("C-x b" . consult-buffer)
+ ("C-x 4 b" . consult-buffer-other-window)
+ ("C-x 5 b" . consult-buffer-other-frame)
+ ("C-x t b" . consult-buffer-other-tab)
+ ("C-x r b" . consult-bookmark)
+ ("C-x p b" . consult-project-buffer)
+ ("M-#" . consult-register-load)
+ ("M-'" . consult-register-store)
+ ("C-M-#" . consult-register)
+ ("M-y" . consult-yank-pop)
+ ("M-g e" . consult-compile-error)
+ ("M-g f" . consult-flycheck)
+ ("M-g g" . consult-goto-line)
+ ("M-g M-g" . consult-goto-line)
+ ("M-g o" . consult-outline)
+ ("M-g m" . consult-mark)
+ ("M-g k" . consult-global-mark)
+ ("M-g i" . consult-imenu)
+ ("M-g I" . consult-imenu-multi)
+ ("M-s d" . consult-fd)
+ ("M-s c" . consult-locate)
+ ("M-s g" . consult-grep)
+ ("M-s G" . consult-git-grep)
+ ("M-s r" . consult-ripgrep)
+ ("M-s l" . consult-line)
+ ("M-s L" . consult-line-multi)
+ ("M-s k" . consult-keep-lines)
+ ("M-s u" . consult-focus-lines)
+ ("M-s e" . consult-isearch-history)
+ :map isearch-mode-map
+ ("M-e" . consult-isearch-history)
+ ("M-s e" . consult-isearch-history)
+ ("M-s l" . consult-line)
+ ("M-s L" . consult-line-multi)
+ :map minibuffer-local-map
+ ("M-s" . consult-history)
+ ("M-r" . consult-history))
+ :hook (completion-list-mode . consult-preview-at-point-mode)
+ :init
+ (setq register-preview-delay 0.5
+ register-preview-function #'consult-register-format)
+ (advice-add #'register-preview :override #'consult-register-window)
+ (setq xref-show-xrefs-function #'consult-xref
+ xref-show-definitions-function #'consult-xref)
+ :config
+ (consult-customize
+ consult-theme :preview-key '(:debounce 0.2 any)
+ consult-ripgrep consult-git-grep consult-grep
+ consult-bookmark consult-recent-file consult-xref
+ consult--source-bookmark consult--source-file-register
+ consult--source-recent-file consult--source-project-recent-file
+ :preview-key '(:debounce 0.4 any))
+ (setq consult-narrow-key "<"))
+#+end_src
+
+Use Flycheck for syntax checking.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package flycheck
+ :config
+ (add-hook 'after-init-hook #'global-flycheck-mode))
+#+end_src
+
+Use Flyspell for spell checking.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (dolist (hook '(text-mode-hook))
+ (add-hook hook (lambda () (flyspell-mode 1))))
+ (use-package flyspell-correct
+ :after flyspell
+ :bind (:map flyspell-mode-map ("C-;" . flyspell-correct-wrapper)))
+#+end_src
+
+* Snippets
+Use =yasnippet= for snippets so I don't need to type as much.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package yasnippet
+ :init
+ (yas-global-mode 1)
+ :config
+ (global-set-key (kbd "C-c s") 'yas-insert-snippet))
+#+end_src
+
+Install snippet collection for =yasnippet=.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package yasnippet-snippets)
+#+end_src
+
+* Formatting
+Automatically format with Apheleia and =clang-format=.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package apheleia
+ :init (apheleia-global-mode +1))
+ (use-package clang-format)
+#+end_src
+
+* RSS
+Use Emacs as an RSS feed with =elfeed=.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package elfeed
+ :config
+ (global-set-key (kbd "C-c f") 'elfeed)
+ (global-set-key (kbd "C-c M-f") 'elfeed-update))
+#+end_src
+
+Make =elfeed= more powerful with =elfeed-goodies=.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package elfeed-goodies
+ :after elfeed
+ :config
+ (elfeed-goodies/setup))
+#+end_src
+
+Store my feed in Org-mode [[./feed.org][here]].
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package elfeed-org
+ :config
+ (elfeed-org)
+ (setq rmh-elfeed-org-files (list "~/.config/emacs/feed.org")))
+#+end_src
+
+* Deft
+Use the Deft package to manage notes.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package deft
+ :config
+ (global-set-key (kbd "C-c d") 'deft)
+ (setq deft-directory "~/notes/"
+ deft-default-extension "org"))
+#+end_src
+
+* Reference Management
+Use Biblio and Citar to manage citations.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/tools.el :mkdirp yes
+ (use-package biblio)
+ (use-package citar
+ :custom
+ (citar-bibliography '("~/bib/references.bib"))
+ :hook
+ (LaTeX-mode . citar-capf-setup)
+ (org-mode . citar-capf-setup))
+ (use-package citar-embark
+ :after citar embark
+ :no-require
+ :config (citar-embark-mode))
+#+end_src
diff --git a/common/.config/emacs/user-interface.el.org b/common/.config/emacs/user-interface.el.org
new file mode 100644
index 0000000..ff4bd34
--- /dev/null
+++ b/common/.config/emacs/user-interface.el.org
@@ -0,0 +1,131 @@
+#+title: Emacs User Interface
+
+* Theming
+Set up Source Code Pro with Nerd Font patches as default font and Computer Modern as a variable pitch font.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/user-interface.el :mkdirp yes
+ (defvar jj/mono-font)
+ (defvar jj/var-font)
+ (pcase system-type
+ (`gnu/linux
+ (when (eq (system-name) "gentoo"))
+ (setq jj/mono-font "SauceCodePro Nerd Font-11")
+ (setq jj/var-font "CMU Serif-14"))
+ (`darwin
+ (setq jj/mono-font "SauceCodePro Nerd Font-14:weight=thin")
+ (setq jj/var-font "CMU Serif-18")))
+ (add-to-list 'default-frame-alist
+ `(font . ,jj/mono-font))
+#+end_src
+
+Use my custom Doom Disco light theme.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/user-interface.el :mkdirp yes
+ (use-package doom-themes
+ :straight (doom-themes :type git :host github :repo "doomemacs/themes"
+ :fork (:host github
+ :repo "JacobJanzen/emacs-doom-themes"))
+ :config
+ (setq doom-themes-enable-bold t
+ doom-themes-enable-italic t)
+ (load-theme 'doom-disco t)
+ (doom-themes-org-config))
+
+(add-to-list 'default-frame-alist '(alpha-background . 90))
+#+end_src
+
+Use =doom-modeline= for a nicer modeline.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/user-interface.el :mkdirp yes
+ (use-package doom-modeline
+ :init (doom-modeline-mode 1))
+#+end_src
+
+Remove the title bar.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/user-interface.el :mkdirp yes
+ (add-to-list 'default-frame-alist '(undecorated . t))
+#+end_src
+
+
+* Clean UI
+Disable the Emacs start screen and make the =scratch= buffer default to empty.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/user-interface.el :mkdirp yes
+ (setq inhibit-startup-screen t)
+ (setq initial-scratch-message nil)
+#+end_src
+
+Disable scroll bar, tool bar, and menu bar.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/user-interface.el :mkdirp yes
+ (scroll-bar-mode -1)
+ (tool-bar-mode -1)
+ (menu-bar-mode -1)
+#+end_src
+
+* Fancy Stuff
+Use line numbers by default.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/user-interface.el :mkdirp yes
+ (global-display-line-numbers-mode 1)
+#+end_src
+
+Highlight changes for an operation with =evil-goggles=.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/user-interface.el :mkdirp yes
+ (use-package evil-goggles
+ :after evil
+ :config
+ (evil-goggles-mode)
+ (evil-goggles-use-diff-faces))
+#+end_src
+
+Install nerd font icons.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/user-interface.el :mkdirp yes
+ (use-package nerd-icons)
+#+end_src
+
+Scroll one line at a time.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/user-interface.el :mkdirp yes
+ (setq scroll-conservatively most-positive-fixnum)
+#+end_src
+
+Create parent directories when they don't yet exist.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/user-interface.el :mkdirp yes
+ (defun jj/create-non-existent-directory ()
+ (let ((parent-directory (file-name-directory buffer-file-name)))
+ (when (and (not (file-exists-p parent-directory))
+ (y-or-n-p (format "Directory `%s' does not exist! Create it?" parent-directory)))
+ (make-directory parent-directory t))))
+ (add-to-list 'find-file-not-found-functions #'jj/create-non-existent-directory)
+#+end_src
+
+
+* Whitespace Management
+Use spaces over tabs and set tab width to 4.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/user-interface.el :mkdirp yes
+ (setq-default indent-tabs-mode nil)
+ (setq tab-width 4
+ c-basic-offset tab-width)
+#+end_src
+
+Delete trailing whitespace on save.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/user-interface.el :mkdirp yes
+ (defun jj/before-save-hook ()
+ (unless (eql (with-current-buffer (current-buffer) major-mode)
+ 'markdown-mode)
+ (delete-trailing-whitespace)))
+ (add-hook 'before-save-hook #'jj/before-save-hook)
+#+end_src
+
+* Backup Management
+Don't create backup files.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/user-interface.el :mkdirp yes
+ (setq make-backup-files nil)
+#+end_src
+
+* Customize =dired=
+Use nerd font icons in =dired=.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/user-interface.el :mkdirp yes
+ (use-package nerd-icons-dired
+ :hook (dired-mode . nerd-icons-dired-mode))
+#+end_src
+
+Use colours in =dired= with =diredfl=.
+#+begin_src emacs-lisp :tangle ~/.config/emacs/user-interface.el :mkdirp yes
+ (use-package diredfl
+ :init (diredfl-global-mode 1))
+#+end_src
diff --git a/common/.config/fastfetch/config.org b/common/.config/fastfetch/config.jsonc.org
index 7a2d099..7a2d099 100644
--- a/common/.config/fastfetch/config.org
+++ b/common/.config/fastfetch/config.jsonc.org
diff --git a/common/.config/nvim/init.org b/common/.config/nvim/init.lua.org
index 0f7dffa..0f7dffa 100644
--- a/common/.config/nvim/init.org
+++ b/common/.config/nvim/init.lua.org
diff --git a/common/.config/nvim/lua/appearance.org b/common/.config/nvim/lua/appearance.lua.org
index 1f1d534..1f1d534 100644
--- a/common/.config/nvim/lua/appearance.org
+++ b/common/.config/nvim/lua/appearance.lua.org
diff --git a/common/.config/nvim/lua/behaviour.org b/common/.config/nvim/lua/behaviour.lua.org
index 871b65e..871b65e 100644
--- a/common/.config/nvim/lua/behaviour.org
+++ b/common/.config/nvim/lua/behaviour.lua.org
diff --git a/common/.config/nvim/lua/plugins.org b/common/.config/nvim/lua/plugins.lua.org
index f3027f9..f3027f9 100644
--- a/common/.config/nvim/lua/plugins.org
+++ b/common/.config/nvim/lua/plugins.lua.org
diff --git a/common/.config/sketchybar/plugins/battery.sh.org b/common/.config/sketchybar/plugins/battery.sh.org
new file mode 100755
index 0000000..d3918e2
--- /dev/null
+++ b/common/.config/sketchybar/plugins/battery.sh.org
@@ -0,0 +1,46 @@
+#+title: SketchyBar Battery Plugin
+
+Get the percentage and charging status.
+#+begin_src sh :tangle ~/.config/sketchybar/plugins/battery.sh :mkdirp yes :tangle-mode o755
+ #!/bin/sh
+ PERCENTAGE="$(pmset -g batt | grep -Eo "\d+%" | cut -d% -f1)"
+ CHARGING="$(pmset -g batt | grep 'AC Power')"
+#+end_src
+
+Exit if no percentage was reported.
+#+begin_src sh :tangle ~/.config/sketchybar/plugins/battery.sh :mkdirp yes :tangle-mode o755
+ if [ "$PERCENTAGE" = "" ]; then
+ exit 0
+ fi
+#+end_src
+
+Choose the icon based on the percentage.
+#+begin_src sh :tangle ~/.config/sketchybar/plugins/battery.sh :mkdirp yes :tangle-mode o755
+ if [[ "$CHARGING" != "" ]]; then
+ case "${PERCENTAGE}" in
+ 9[0-9]|100) ICON="󰂅"
+ ;;
+ [6-8][0-9]) ICON="󰂉"
+ ;;
+ [3-5][0-9]) ICON="󰂇"
+ ;;
+ [1-2][0-9]) ICON="󰢜"
+ ;;
+ ,*) ICON="󰁺"
+ esac
+ else
+ case "${PERCENTAGE}" in
+ 9[0-9]|100) ICON="󰁹"
+ ;;
+ [6-8][0-9]) ICON="󰁿"
+ ;;
+ [3-5][0-9]) ICON="󰁼"
+ ;;
+ [1-2][0-9]) ICON="󰁺"
+ ;;
+ ,*) ICON=""
+ esac
+ fi
+
+ sketchybar --set "$NAME" icon="$ICON" label="${PERCENTAGE}%"
+#+end_src
diff --git a/common/.config/sketchybar/plugins/clock.sh.org b/common/.config/sketchybar/plugins/clock.sh.org
new file mode 100755
index 0000000..1ab5ec3
--- /dev/null
+++ b/common/.config/sketchybar/plugins/clock.sh.org
@@ -0,0 +1,7 @@
+#+title: SketchyBar Clock Plugin
+
+Get the date and set it as the label.
+#+begin_src sh :tangle ~/.config/sketchybar/plugins/clock.sh :mkdirp yes :tangle-mode o755
+ #!/bin/sh
+ sketchybar --set "$NAME" label="$(date '+%Y-%m-%d %H:%M')"
+#+end_src
diff --git a/common/.config/sketchybar/plugins/cpu.sh.org b/common/.config/sketchybar/plugins/cpu.sh.org
new file mode 100755
index 0000000..199d89b
--- /dev/null
+++ b/common/.config/sketchybar/plugins/cpu.sh.org
@@ -0,0 +1,7 @@
+#+title: SketchyBar CPU Plugin
+
+Get the CPU percentage and display it.
+#+begin_src sh :tangle ~/.config/sketchybar/plugins/cpu.sh :mkdirp yes :tangle-mode o755
+ #!/bin/sh
+ sketchybar --set "$NAME" icon='󰍛' label="$(top -l 2 | grep -E "^CPU" | tail -1 | awk '{ print $3 + $5"%" }')"
+#+end_src
diff --git a/common/.config/sketchybar/plugins/front_app.sh.org b/common/.config/sketchybar/plugins/front_app.sh.org
new file mode 100755
index 0000000..44917e4
--- /dev/null
+++ b/common/.config/sketchybar/plugins/front_app.sh.org
@@ -0,0 +1,9 @@
+#+title: SketchyBar Front App Plugin
+
+Get the name of the focused application.
+#+begin_src sh :tangle ~/.config/sketchybar/plugins/front_app.sh :mkdirp yes :tangle-mode o755
+ #!/bin/sh
+ if [ "$SENDER" = "front_app_switched" ]; then
+ sketchybar --set "$NAME" label="$INFO"
+ fi
+#+end_src
diff --git a/common/.config/sketchybar/plugins/mem.sh.org b/common/.config/sketchybar/plugins/mem.sh.org
new file mode 100755
index 0000000..ef3feef
--- /dev/null
+++ b/common/.config/sketchybar/plugins/mem.sh.org
@@ -0,0 +1,16 @@
+#+title: SketchyBar Memory Plugin
+
+Get the memory in use and return that as a percent.
+#+begin_src sh :tangle ~/.config/sketchybar/plugins/mem.sh :mkdirp yes :tangle-mode o755
+ #!/bin/sh
+ hw_pagesize="$(sysctl -n hw.pagesize)"
+ mem_total="$(($(sysctl -n hw.memsize) / 1024))"
+ pages_app="$(($(sysctl -n vm.page_pageable_internal_count) - $(sysctl -n vm.page_purgeable_count)))"
+ pages_wired="$(vm_stat | awk '/ wired/ { print $4 }')"
+ pages_compressed="$(vm_stat | awk '/ occupied/ { printf $5 }')"
+ pages_compressed="${pages_compressed:-0}"
+ mem_used="$(((pages_app + ${pages_wired//.} + ${pages_compressed//.}) * hw_pagesize / 1024))"
+
+ mem_percent=$((mem_perc=$mem_used * 100 / $mem_total))
+ sketchybar --set "$NAME" icon="󰆼" label="$mem_percent%"
+#+end_src
diff --git a/common/.config/sketchybar/plugins/space.sh.org b/common/.config/sketchybar/plugins/space.sh.org
new file mode 100755
index 0000000..97581aa
--- /dev/null
+++ b/common/.config/sketchybar/plugins/space.sh.org
@@ -0,0 +1,7 @@
+#+title: SketchyBar Space Plugin
+
+Get the current space.
+#+begin_src sh :tangle ~/.config/sketchybar/plugins/space.sh :mkdirp yes :tangle-mode o755
+ #!/bin/sh
+ sketchybar --set "$NAME" background.drawing="$SELECTED"
+#+end_src
diff --git a/common/.config/sketchybar/plugins/volume.sh.org b/common/.config/sketchybar/plugins/volume.sh.org
new file mode 100755
index 0000000..c53b2a1
--- /dev/null
+++ b/common/.config/sketchybar/plugins/volume.sh.org
@@ -0,0 +1,21 @@
+#+title: SketchyBar Volume Plugin
+
+Set an icon based on the current volume and return the volume and the icon.
+#+begin_src sh :tangle ~/.config/sketchybar/plugins/volume.sh :mkdirp yes :tangle-mode o755
+ #!/bin/sh
+ if [ "$SENDER" = "volume_change" ]; then
+ VOLUME="$INFO"
+
+ case "$VOLUME" in
+ [6-9][0-9]|100) ICON="󰕾"
+ ;;
+ [3-5][0-9]) ICON="󰖀"
+ ;;
+ [1-9]|[1-2][0-9]) ICON="󰕿"
+ ;;
+ ,*) ICON="󰖁"
+ esac
+
+ sketchybar --set "$NAME" icon="$ICON" label="$VOLUME%"
+ fi
+#+end_src
diff --git a/common/.config/sketchybar/sketchybarrc.org b/common/.config/sketchybar/sketchybarrc.org
new file mode 100755
index 0000000..316eaf3
--- /dev/null
+++ b/common/.config/sketchybar/sketchybarrc.org
@@ -0,0 +1,77 @@
+#+title: SketchyBar Configuration
+
+Set the plugin directory.
+#+begin_src sh :tangle ~/.config/sketchybar/sketchybarrc :mkdirp yes :tangle-mode o755
+ PLUGIN_DIR="$CONFIG_DIR/plugins"
+#+end_src
+
+Place the bar at the of the screen with full transparency.
+#+begin_src sh :tangle ~/.config/sketchybar/sketchybarrc :mkdirp yes :tangle-mode o755
+ sketchybar --bar position=top height=40 blur_radius=30 color=0x00000000
+#+end_src
+
+Add small padding to left and right, use Symbols font for icons and Source Code Pro for text. Make all text white and add padding on left and right for labels and icons.
+#+begin_src sh :tangle ~/.config/sketchybar/sketchybarrc :mkdirp yes :tangle-mode o755
+ default=(
+ padding_left=5
+ padding_right=5
+ icon.font="Symbols Nerd Font:Bold:17.0"
+ label.font="Sauce Code Pro Nerd Font:Bold:14.0"
+ icon.color=0xffffffff
+ label.color=0xffffffff
+ icon.padding_left=4
+ icon.padding_right=4
+ label.padding_left=4
+ label.padding_right=4
+ )
+ sketchybar --default "${default[@]}"
+#+end_src
+
+Add clickable space icons for 10 spaces.
+#+begin_src sh :tangle ~/.config/sketchybar/sketchybarrc :mkdirp yes :tangle-mode o755
+ SPACE_ICONS=("1" "2" "3" "4" "5" "6" "7" "8" "9" "10")
+ for i in "${!SPACE_ICONS[@]}"
+ do
+ sid="$(($i+1))"
+ space=(
+ space="$sid"
+ icon="${SPACE_ICONS[i]}"
+ icon.padding_left=7
+ icon.padding_right=7
+ background.color=0x40ffffff
+ background.corner_radius=5
+ background.height=25
+ label.drawing=off
+ script="$PLUGIN_DIR/space.sh"
+ click_script="yabai -m space --focus $sid"
+ )
+ sketchybar --add space space."$sid" left --set space."$sid" "${space[@]}"
+ done
+#+end_src
+
+Add a chevron before listing the open application.
+#+begin_src sh :tangle ~/.config/sketchybar/sketchybarrc :mkdirp yes :tangle-mode o755
+ sketchybar --add item chevron left \
+ --set chevron icon=󰅂 label.drawing=off \
+ --add item front_app left \
+ --set front_app icon.drawing=off script="$PLUGIN_DIR/front_app.sh" \
+ --subscribe front_app front_app_switched
+#+end_src
+
+Display a clock, volume, battery, CPU usage, and memory usage on the right.
+#+begin_src sh :tangle ~/.config/sketchybar/sketchybarrc :mkdirp yes :tangle-mode o755
+ sketchybar --add item clock right \
+ --set clock update_freq=10 icon=󰥔 script="$PLUGIN_DIR/clock.sh" \
+ --add item volume right \
+ --set volume script="$PLUGIN_DIR/volume.sh" \
+ --subscribe volume volume_change \
+ --add item battery right \
+ --set battery update_freq=120 script="$PLUGIN_DIR/battery.sh" \
+ --subscribe battery system_woke power_source_change \
+ --add item cpu right \
+ --set cpu update_freq=10 script="$PLUGIN_DIR/cpu.sh" \
+ --add item mem right \
+ --set mem update_freq=10 script="$PLUGIN_DIR/mem.sh"
+
+ sketchybar --update
+#+end_src
diff --git a/common/.config/skhd/skhdrc.org b/common/.config/skhd/skhdrc.org
new file mode 100644
index 0000000..e628cd4
--- /dev/null
+++ b/common/.config/skhd/skhdrc.org
@@ -0,0 +1,80 @@
+#+title: =skhd= Configuration
+
+Add keybinding to open a terminal emulator.
+#+begin_src conf :tangle ~/.config/skhd/skhdrc :mkdirp yes
+ cmd - return : /opt/homebrew/bin/alacritty
+#+end_src
+
+Add keybinding for killing a window.
+#+begin_src conf :tangle ~/.config/skhd/skhdrc :mkdirp yes
+ cmd + shift - q : yabai -m window --close
+#+end_src
+
+Add keybinding for opening an app launcher.
+#+begin_src conf :tangle ~/.config/skhd/skhdrc :mkdirp yes
+ cmd - d : ~/.local/bin/launcher
+#+end_src
+
+Add keybinding for reloading the configuration.
+#+begin_src conf :tangle ~/.config/skhd/skhdrc :mkdirp yes
+ cmd + shift - c : yabai --restart-service && skhd --restart-service && brew services restart sketchybar
+#+end_src
+
+Change focus keybindings.
+#+begin_src conf :tangle ~/.config/skhd/skhdrc :mkdirp yes
+ cmd - h : yabai -m window --focus west || yabai -m display --focus west
+ cmd - j : yabai -m window --focus south || yabai -m display --focus south
+ cmd - k : yabai -m window --focus north || yabai -m display --focus north
+ cmd - l : yabai -m window --focus east || yabai -m display --focus east
+#+end_src
+
+Move window keybindings.
+#+begin_src conf :tangle ~/.config/skhd/skhdrc :mkdirp yes
+ shift + cmd - h : yabai -m window --warp west
+ shift + cmd - j : yabai -m window --warp south
+ shift + cmd - k : yabai -m window --warp north
+ shift + cmd - l : yabai -m window --warp east
+#+end_src
+
+Change workspace keybindings.
+#+begin_src conf :tangle ~/.config/skhd/skhdrc :mkdirp yes
+ cmd - 1 : yabai -m space --focus 1
+ cmd - 2 : yabai -m space --focus 2
+ cmd - 3 : yabai -m space --focus 3
+ cmd - 4 : yabai -m space --focus 4
+ cmd - 5 : yabai -m space --focus 5
+ cmd - 6 : yabai -m space --focus 6
+ cmd - 7 : yabai -m space --focus 7
+ cmd - 8 : yabai -m space --focus 8
+ cmd - 9 : yabai -m space --focus 9
+ cmd - 0 : yabai -m space --focus 10
+#+end_src
+
+Move window to workspace keybindings.
+#+begin_src conf :tangle ~/.config/skhd/skhdrc :mkdirp yes
+ cmd + shift - 1 : yabai -m window --space 1
+ cmd + shift - 2 : yabai -m window --space 2
+ cmd + shift - 3 : yabai -m window --space 3
+ cmd + shift - 4 : yabai -m window --space 4
+ cmd + shift - 5 : yabai -m window --space 5
+ cmd + shift - 6 : yabai -m window --space 6
+ cmd + shift - 7 : yabai -m window --space 7
+ cmd + shift - 8 : yabai -m window --space 8
+ cmd + shift - 9 : yabai -m window --space 9
+ cmd + shift - 0 : yabai -m window --space 10
+#+end_src
+
+Define full screen keybinding.
+#+begin_src conf :tangle ~/.config/skhd/skhdrc :mkdirp yes
+ cmd + shift - f : yabai -m window --toggle zoom-fullscreen
+#+end_src
+
+Define toggle floating keybinding.
+#+begin_src conf :tangle ~/.config/skhd/skhdrc :mkdirp yes
+ cmd + shift - space : yabai -m window --toggle float
+#+end_src
+
+Add screenshot keybinding.
+#+begin_src conf :tangle ~/.config/skhd/skhdrc :mkdirp yes
+ shift + ctrl - s : open /System/Applications/Utilities/Screenshot.app
+#+end_src
diff --git a/common/.config/yabai/yabairc.org b/common/.config/yabai/yabairc.org
new file mode 100644
index 0000000..4307c1f
--- /dev/null
+++ b/common/.config/yabai/yabairc.org
@@ -0,0 +1,68 @@
+#+title: Yabai Configuration
+
+Load script additions automatically.
+#+begin_src sh :tangle ~/.config/yabai/yabairc :mkdirp yes
+ yabai -m signal --add event=dock_did_restart action="sudo /opt/homebrew/bin/yabai --load-sa"
+ sudo /opt/homebrew/bin/yabai --load-sa
+#+end_src
+
+Tile the windows.
+#+begin_src sh :tangle ~/.config/yabai/yabairc :mkdirp yes
+ yabai -m config layout bsp
+#+end_src
+
+Automatically balance window sizes.
+#+begin_src sh :tangle ~/.config/yabai/yabairc :mkdirp yes
+ yabai -m config auto_balance on
+#+end_src
+
+Use 10 pixel gaps.
+#+begin_src sh :tangle ~/.config/yabai/yabairc :mkdirp yes
+ yabai -m config top_padding 10
+ yabai -m config bottom_padding 10
+ yabai -m config left_padding 10
+ yabai -m config right_padding 10
+ yabai -m config window_gap 10
+#+end_src
+
+Remove window shadows unless the window is floating.
+#+begin_src sh :tangle ~/.config/yabai/yabairc :mkdirp yes
+ yabai -m config window_shadow float
+#+end_src
+
+Move mouse to focused window anad focus on the window that the mouse is on.
+#+begin_src sh :tangle ~/.config/yabai/yabairc :mkdirp yes
+ yabai -m config focus_follows_mouse autoraise
+ yabai -m config mouse_follows_focus on
+#+end_src
+
+Control windows if =cmd= is held.
+#+begin_src sh :tangle ~/.config/yabai/yabairc :mkdirp yes
+ yabai -m config mouse_modifier cmd
+#+end_src
+
+Move windows with left click.
+#+begin_src sh :tangle ~/.config/yabai/yabairc :mkdirp yes
+ yabai -m config mouse_action1 move
+#+end_src
+
+Resize windows with right click.
+#+begin_src sh :tangle ~/.config/yabai/yabairc :mkdirp yes
+ yabai -m config mouse_action2 resize
+#+end_src
+
+Update Positions when the window is dropped.
+#+begin_src sh :tangle ~/.config/yabai/yabairc :mkdirp yes
+ yabai -m mouse_drop_action swap
+#+end_src
+
+Don't manage some apps.
+#+begin_src sh :tangle ~/.config/yabai/yabairc :mkdirp yes
+ yabai -m rule --add app="^System Settings$" manage=off
+ yabai -m rule --add app="^Calculator$" manage=off
+#+end_src
+
+Make windows management aware of SketchyBar.
+#+begin_src sh :tangle ~/.config/yabai/yabairc :mkdirp yes
+ yabai -m config external_bar all:$(sketchybar --query bar | jq .height):0
+#+end_src
diff --git a/common/gitconfig.org.gpg b/common/.gitconfig.org.gpg
index 12954b7..12954b7 100644
--- a/common/gitconfig.org.gpg
+++ b/common/.gitconfig.org.gpg
Binary files differ
diff --git a/common/.local/share/fonts/NFM.tar.gz b/common/.local/share/fonts/NFM.tar.gz
deleted file mode 100644
index b862584..0000000
--- a/common/.local/share/fonts/NFM.tar.gz
+++ /dev/null
Binary files differ
diff --git a/common/profile.org b/common/.profile.org
index 99c0908..99c0908 100644
--- a/common/profile.org
+++ b/common/.profile.org
diff --git a/common/zshrc.org b/common/.zshrc.org
index 02601e5..02601e5 100644
--- a/common/zshrc.org
+++ b/common/.zshrc.org