diff options
author | Jacob Janzen <jacob.a.s.janzen@gmail.com> | 2024-10-01 17:42:59 -0500 |
---|---|---|
committer | Jacob Janzen <jacob.a.s.janzen@gmail.com> | 2024-10-01 17:42:59 -0500 |
commit | 7b0ea5cbdaaa5b8392777ad207c74cb27411eab1 (patch) | |
tree | 37a3438116ec3c84663133c820808ad9e2acf021 | |
parent | 7a347653dfad8c6c33791f7e72a4ec40b8230ac3 (diff) |
the big refactor
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | Makefile | 61 | ||||
-rw-r--r-- | common/.clang-format.org (renamed from common/clang-format.org) | 0 | ||||
-rw-r--r-- | common/.config/alacritty/alacritty.toml.org (renamed from macos/.config/alacritty/alacritty.org) | 0 | ||||
-rw-r--r-- | common/.config/emacs/feed.org.org | 39 | ||||
-rw-r--r-- | common/.config/emacs/force-custom-file.el.org | 8 | ||||
-rw-r--r-- | common/.config/emacs/init.el.org | 10 | ||||
-rw-r--r-- | common/.config/emacs/languages.el.org | 148 | ||||
-rw-r--r-- | common/.config/emacs/package-setup.el.org | 25 | ||||
-rw-r--r-- | common/.config/emacs/tools.el.org | 391 | ||||
-rw-r--r-- | common/.config/emacs/user-interface.el.org | 131 | ||||
-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-x[-rw-r--r--] | common/.config/sketchybar/plugins/battery.sh.org (renamed from macos/.config/sketchybar/plugins/battery.org) | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | common/.config/sketchybar/plugins/clock.sh.org (renamed from macos/.config/sketchybar/plugins/clock.org) | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | common/.config/sketchybar/plugins/cpu.sh.org (renamed from macos/.config/sketchybar/plugins/cpu.org) | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | common/.config/sketchybar/plugins/front_app.sh.org (renamed from macos/.config/sketchybar/plugins/front_app.org) | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | common/.config/sketchybar/plugins/mem.sh.org (renamed from macos/.config/sketchybar/plugins/mem.org) | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | common/.config/sketchybar/plugins/space.sh.org (renamed from macos/.config/sketchybar/plugins/space.org) | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | common/.config/sketchybar/plugins/volume.sh.org (renamed from macos/.config/sketchybar/plugins/volume.org) | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | common/.config/sketchybar/sketchybarrc.org (renamed from macos/.config/sketchybar/sketchybarrc.org) | 0 | ||||
-rw-r--r-- | common/.config/skhd/skhdrc.org (renamed from macos/.config/skhd/skhdrc.org) | 0 | ||||
-rw-r--r-- | common/.config/yabai/yabairc.org (renamed from macos/.config/yabai/yabairc.org) | 0 | ||||
-rw-r--r-- | common/.gitconfig.org.gpg (renamed from common/gitconfig.org.gpg) | bin | 929 -> 929 bytes | |||
-rw-r--r-- | common/.local/share/fonts/NFM.tar.gz | bin | 2150400 -> 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 | ||||
-rwxr-xr-x[-rw-r--r--] | extract_src.py | 4 | ||||
-rwxr-xr-x | install | 83 | ||||
l--------- | macos.local/.clang-format.org | 1 | ||||
l--------- | macos.local/.config/alacritty | 1 | ||||
l--------- | macos.local/.config/emacs (renamed from macos/.config/emacs) | 0 | ||||
l--------- | macos.local/.config/fastfetch (renamed from macos/.config/fastfetch) | 0 | ||||
l--------- | macos.local/.config/nvim (renamed from macos/.config/nvim) | 0 | ||||
l--------- | macos.local/.config/sketchybar | 1 | ||||
l--------- | macos.local/.config/skhd | 1 | ||||
l--------- | macos.local/.config/yabai | 1 | ||||
l--------- | macos.local/.gitconfig.org.gpg | 1 | ||||
-rw-r--r-- | macos.local/.gnupg/gpg-agent.org (renamed from macos/.gnupg/gpg-agent.org) | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | macos.local/.local/bin/launcher.org (renamed from macos/.local/bin/launcher.org) | 0 | ||||
l--------- | macos.local/.local/share/fonts (renamed from macos/.local/share/fonts) | 0 | ||||
l--------- | macos.local/.profile.org | 1 | ||||
-rw-r--r-- | macos.local/.ssh/config.org (renamed from macos/.ssh/config.org) | 0 | ||||
l--------- | macos.local/.wallpaper (renamed from macos/.wallpaper) | 0 | ||||
l--------- | macos.local/.zshrc.org | 1 | ||||
-rwxr-xr-x[-rw-r--r--] | macos.local/Applications/Emacs.app/Contents/MacOS/Emacs.org (renamed from macos/Applications/Emacs.app/Contents/MacOS/Emacs.org) | 0 | ||||
l--------- | macos/clang-format.org | 1 | ||||
l--------- | macos/gitconfig.org.gpg | 1 | ||||
l--------- | macos/profile.org | 1 | ||||
l--------- | macos/zshrc.org | 1 | ||||
l---------[-rw-r--r--] | nixos/.flake/home/programs/emacs/feed.org.org | 40 | ||||
l---------[-rw-r--r--] | nixos/.flake/home/programs/emacs/force-custom-file.el.org | 9 | ||||
l---------[-rw-r--r--] | nixos/.flake/home/programs/emacs/languages.el.org | 149 | ||||
l---------[-rw-r--r--] | nixos/.flake/home/programs/emacs/package-setup.el.org | 26 | ||||
l---------[-rw-r--r--] | nixos/.flake/home/programs/emacs/tools.el.org | 392 | ||||
l---------[-rw-r--r--] | nixos/.flake/home/programs/emacs/user-interface.el.org | 132 |
59 files changed, 827 insertions, 834 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..90c47da --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +tmp.org @@ -1,38 +1,89 @@ -.PHONY: install update nixos-update nixos-install +.PHONY: install update macos-update macos-install nixos-update nixos-install fonts -SYSTEM = $(shell uname -n) +# Determine the current system from its hostname. +# My university network changes my hostname on my laptop. I use the disgusting system_profiler pipeline to get the real hostname +# if the uname command fails +SYSTEM := $(shell uname -n) +ifeq ($(wildcard src/$(project)/*),) + SYSTEM = $(shell system_profiler SPSoftwareDataType | grep "Computer Name" | xargs | sed 's/Computer Name: //' | sed 's/$$/.local/') +endif + +# Set directories SRCDIR = ./$(SYSTEM) DSTDIR = $(HOME) +FONTSDIR = .local/share/fonts +# Get the list of files that need to be generated SOURCES := $(shell find -L $(SRCDIR)/ -type f) -CONFIGS := $(subst $(SRCDIR)/,$(DSTDIR)/,$(SOURCES:%.org=%)) +NOGPG := $(SOURCES:%.gpg=%) +NOORG := $(NOGPG:%.org=%) +CONFIGS := $(subst $(SRCDIR)/,$(DSTDIR)/,$(NOORG)) +# Set any extra targets based on the hostname UPDATE_TARGET := INSTALL_TARGET := - ifeq ($(SYSTEM), nixos) UPDATE_TARGET += nixos-update INSTALL_TARGET += nixos-install +else ifeq ($(SYSTEM), macos.local) + UPDATE_TARGET += macos-update + INSTALL_TARGET += macos-install endif +# update by default, install first all: update - update: install $(UPDATE_TARGET) +# install configs and any additional targets install: $(CONFIGS) $(INSTALL_TARGET) +# ignored files +%.tar.gz: + : + +# install encrypted org configs +$(DSTDIR)/%: $(SRCDIR)/%.org.gpg + mkdir -p $(dir $@) + gpg -d --batch $< 1> tmp.org + python3 ./extract_src.py tmp.org $@ + rm tmp.org + +# install org configs $(DSTDIR)/%: $(SRCDIR)/%.org mkdir -p $(dir $@) python3 ./extract_src.py $< $@ +# install generic files $(DSTDIR)/%: $(SRCDIR)/% mkdir -p $(dir $@) cp $< $@ +# install fonts +fonts: $(DSTDIR)/$(FONTSDIR)/.ComputerModern $(DSTDIR)/$(FONTSDIR)/.SauceCodePro + -fc-cache -f +$(DSTDIR)/$(FONTSDIR)/.ComputerModern: $(SRCDIR)/$(FONTSDIR)/ComputerModern.tar.gz + mkdir -p $(DSTDIR)/$(FONTSDIR) + tar xf $(SRCDIR)/$(FONTSDIR)/ComputerModern.tar.gz -C $(DSTDIR)/$(FONTSDIR) + touch $(DSTDIR)/$(FONTSDIR)/.ComputerModern +$(DSTDIR)/$(FONTSDIR)/.SauceCodePro: $(SRCDIR)/$(FONTSDIR)/SauceCodePro.tar.gz + mkdir -p $(DSTDIR)/$(FONTSDIR) + tar xf $(SRCDIR)/$(FONTSDIR)/SauceCodePro.tar.gz -C $(DSTDIR)/$(FONTSDIR) + touch $(DSTDIR)/$(FONTSDIR)/.SauceCodePro + +# macos update just runs brew upgrade +macos-update: install + brew upgrade + +# macos install also install fonts and tells System Events to update the wallpaper +macos-install: $(CONFIGS) fonts + osascript -e "tell application \"System Events\" to tell every desktop to set picture to \"/$$HOME/.wallpaper\" as POSIX file" + +# nixos update backs up the flake lock file nixos-update: install nix flake update $(DSTDIR)/.flake cp $(DSTDIR)/.flake/flake.lock $(SRCDIR)/.flake sudo nixos-rebuild switch --flake $(DSTDIR)/.flake +# nixos install runs nixos-rebuild switch to install everything declaratively nixos-install: $(CONFIGS) sudo nixos-rebuild switch --flake $(DSTDIR)/.flake 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/macos/.config/alacritty/alacritty.org b/common/.config/alacritty/alacritty.toml.org index 992ed63..992ed63 100644 --- a/macos/.config/alacritty/alacritty.org +++ b/common/.config/alacritty/alacritty.toml.org 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/macos/.config/sketchybar/plugins/battery.org b/common/.config/sketchybar/plugins/battery.sh.org index d3918e2..d3918e2 100644..100755 --- a/macos/.config/sketchybar/plugins/battery.org +++ b/common/.config/sketchybar/plugins/battery.sh.org diff --git a/macos/.config/sketchybar/plugins/clock.org b/common/.config/sketchybar/plugins/clock.sh.org index 1ab5ec3..1ab5ec3 100644..100755 --- a/macos/.config/sketchybar/plugins/clock.org +++ b/common/.config/sketchybar/plugins/clock.sh.org diff --git a/macos/.config/sketchybar/plugins/cpu.org b/common/.config/sketchybar/plugins/cpu.sh.org index 199d89b..199d89b 100644..100755 --- a/macos/.config/sketchybar/plugins/cpu.org +++ b/common/.config/sketchybar/plugins/cpu.sh.org diff --git a/macos/.config/sketchybar/plugins/front_app.org b/common/.config/sketchybar/plugins/front_app.sh.org index 44917e4..44917e4 100644..100755 --- a/macos/.config/sketchybar/plugins/front_app.org +++ b/common/.config/sketchybar/plugins/front_app.sh.org diff --git a/macos/.config/sketchybar/plugins/mem.org b/common/.config/sketchybar/plugins/mem.sh.org index ef3feef..ef3feef 100644..100755 --- a/macos/.config/sketchybar/plugins/mem.org +++ b/common/.config/sketchybar/plugins/mem.sh.org diff --git a/macos/.config/sketchybar/plugins/space.org b/common/.config/sketchybar/plugins/space.sh.org index 97581aa..97581aa 100644..100755 --- a/macos/.config/sketchybar/plugins/space.org +++ b/common/.config/sketchybar/plugins/space.sh.org diff --git a/macos/.config/sketchybar/plugins/volume.org b/common/.config/sketchybar/plugins/volume.sh.org index c53b2a1..c53b2a1 100644..100755 --- a/macos/.config/sketchybar/plugins/volume.org +++ b/common/.config/sketchybar/plugins/volume.sh.org diff --git a/macos/.config/sketchybar/sketchybarrc.org b/common/.config/sketchybar/sketchybarrc.org index 316eaf3..316eaf3 100644..100755 --- a/macos/.config/sketchybar/sketchybarrc.org +++ b/common/.config/sketchybar/sketchybarrc.org diff --git a/macos/.config/skhd/skhdrc.org b/common/.config/skhd/skhdrc.org index e628cd4..e628cd4 100644 --- a/macos/.config/skhd/skhdrc.org +++ b/common/.config/skhd/skhdrc.org diff --git a/macos/.config/yabai/yabairc.org b/common/.config/yabai/yabairc.org index 4307c1f..4307c1f 100644 --- a/macos/.config/yabai/yabairc.org +++ b/common/.config/yabai/yabairc.org diff --git a/common/gitconfig.org.gpg b/common/.gitconfig.org.gpg Binary files differindex 12954b7..12954b7 100644 --- a/common/gitconfig.org.gpg +++ b/common/.gitconfig.org.gpg diff --git a/common/.local/share/fonts/NFM.tar.gz b/common/.local/share/fonts/NFM.tar.gz Binary files differdeleted file mode 100644 index b862584..0000000 --- a/common/.local/share/fonts/NFM.tar.gz +++ /dev/null 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 diff --git a/extract_src.py b/extract_src.py index 665c4c4..766bf1a 100644..100755 --- a/extract_src.py +++ b/extract_src.py @@ -1,5 +1,7 @@ #!/usr/bin/env python3 +import os +from stat import ST_MODE import sys import re @@ -27,3 +29,5 @@ with open(sys.argv[1], "r") as inp: if min_spaces == -1 or min_spaces > spaces: min_spaces = spaces curr.append(re.sub(r"^(\s*),(\*|,\*|#\+|,#\+)", r"\1\2", line)) + + os.chmod(sys.argv[2], os.stat(sys.argv[1])[ST_MODE]) diff --git a/install b/install deleted file mode 100755 index 52acedb..0000000 --- a/install +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/sh - -echo 'backing up previous log file to ~/.update-home-old.log' -mv ~/.update-home.log ~/.update-home-old.log >> /dev/null 2>&1 - -if ! test -d ~/.dotfiles; then - echo '.dotfiles should be at ~/.dotfiles; reinstalling dotfiles at ~/.dotfiles...' - git clone git@git.sr.ht:~jjanzen/.dotfiles ~/.dotfiles >> ~/.update-home.log 2>&1 -fi - -echo 'retrieving the latest changes (any unmerged local changes will be stashed)...' -{ - git stash - git checkout main - git pull --rebase -} >> ~/.update-home.log 2>&1 - -CWD=$(pwd) - -if [ "$(uname)" = 'Darwin' ]; then - echo 'detected Mac OS; installing Mac OS configuration...' - cd ~/.dotfiles/macos/ || exit -elif [ "$(uname)" = 'Linux' ] && grep -q 'ID=nixos' /etc/os-release; then - echo 'detected NixOS; installing NixOS configuration...' - cd ~/.dotfiles/nixos/ || exit -else - echo 'unsupported operating system' - exit 1 -fi - -echo 'installing configuration files...' -find -L -- . -type f -name "*\.org" | while read -r file; do - echo " installing $file..." - emacs --batch "$file" -f package-initialize --eval '(org-babel-tangle)' >> ~/.update-home.log 2>&1 -done -find -L -- . -type f -name "*\.org\.gpg" | while read -r file; do - echo " installing $file..." - gpg -d --batch "$file" 1> tmp.org 2>> ~/.update-home.log - emacs --batch tmp.org -f package-initialize --eval '(org-babel-tangle)' >> ~/.update-home.log 2>&1 - rm tmp.org -done - -echo 'installing wallpaper...' -cp .wallpaper ~/.wallpaper -if [ "$(uname)" = 'Darwin' ]; then - osascript -e "tell application \"System Events\" to tell every desktop to set picture to \"/$HOME/.wallpaper\" as POSIX file" -fi - -if [ "$(uname)" = 'Linux' ] && grep -q 'ID=nixos' /etc/os-release; then - echo 'installing NixOS flake' - sudo cp ./.flake/system/hardware-configuration.nix ~/.flake/system - sudo cp ./.flake/home/.wallpaper ~/.flake/home - sudo cp ./.flake/flake.lock ~/.flake - sudo nixos-rebuild switch --flake "$HOME/.flake#nixos" -fi - -if [ "$(uname)" = 'Darwin' ]; then - fonts_changed=false - echo 'installing fonts...' - mkdir -p ~/.local/share/fonts - if ! test -d ~/.local/share/fonts/ComputerModern; then - echo ' Computer Modern font missing. Installing...' - tar xf .local/share/fonts/ComputerModern.tar.gz -C ~/.local/share/fonts >> ~/.update-home.log 2>&1 - fonts_changed=true - fi - if ! test -f ~/.local/share/fonts/NFM.ttf; then - echo ' Nerd Font Mono font missing. Installing...' - tar xf .local/share/fonts/NFM.tar.gz -C ~/.local/share/fonts >> ~/.update-home.log 2>&1 - fonts_changed=true - fi - if ! test -d ~/.local/share/fonts/SauceCodePro; then - echo ' Source Code Pro Nerd Font missing. Installing...' - tar xf .local/share/fonts/SauceCodePro.tar.gz -C ~/.local/share/fonts >> ~/.update-home.log 2>&1 - fonts_changed=true - fi - - if [ $fonts_changed = true ]; then - echo ' updating the font cache...' - fc-cache -f >> ~/.update-home.log - fi -fi - -cd "$CWD" || exit diff --git a/macos.local/.clang-format.org b/macos.local/.clang-format.org new file mode 120000 index 0000000..4b4ef61 --- /dev/null +++ b/macos.local/.clang-format.org @@ -0,0 +1 @@ +../common/.clang-format.org
\ No newline at end of file diff --git a/macos.local/.config/alacritty b/macos.local/.config/alacritty new file mode 120000 index 0000000..bfce794 --- /dev/null +++ b/macos.local/.config/alacritty @@ -0,0 +1 @@ +../../common/.config/alacritty
\ No newline at end of file diff --git a/macos/.config/emacs b/macos.local/.config/emacs index f4e5e56..f4e5e56 120000 --- a/macos/.config/emacs +++ b/macos.local/.config/emacs diff --git a/macos/.config/fastfetch b/macos.local/.config/fastfetch index a73d684..a73d684 120000 --- a/macos/.config/fastfetch +++ b/macos.local/.config/fastfetch diff --git a/macos/.config/nvim b/macos.local/.config/nvim index a0abd03..a0abd03 120000 --- a/macos/.config/nvim +++ b/macos.local/.config/nvim diff --git a/macos.local/.config/sketchybar b/macos.local/.config/sketchybar new file mode 120000 index 0000000..b808184 --- /dev/null +++ b/macos.local/.config/sketchybar @@ -0,0 +1 @@ +../../common/.config/sketchybar
\ No newline at end of file diff --git a/macos.local/.config/skhd b/macos.local/.config/skhd new file mode 120000 index 0000000..3aa80d0 --- /dev/null +++ b/macos.local/.config/skhd @@ -0,0 +1 @@ +../../common/.config/skhd
\ No newline at end of file diff --git a/macos.local/.config/yabai b/macos.local/.config/yabai new file mode 120000 index 0000000..d2b69c5 --- /dev/null +++ b/macos.local/.config/yabai @@ -0,0 +1 @@ +../../common/.config/yabai
\ No newline at end of file diff --git a/macos.local/.gitconfig.org.gpg b/macos.local/.gitconfig.org.gpg new file mode 120000 index 0000000..b4b87c9 --- /dev/null +++ b/macos.local/.gitconfig.org.gpg @@ -0,0 +1 @@ +../common/.gitconfig.org.gpg
\ No newline at end of file diff --git a/macos/.gnupg/gpg-agent.org b/macos.local/.gnupg/gpg-agent.org index 8de64d2..8de64d2 100644 --- a/macos/.gnupg/gpg-agent.org +++ b/macos.local/.gnupg/gpg-agent.org diff --git a/macos/.local/bin/launcher.org b/macos.local/.local/bin/launcher.org index f74d094..f74d094 100644..100755 --- a/macos/.local/bin/launcher.org +++ b/macos.local/.local/bin/launcher.org diff --git a/macos/.local/share/fonts b/macos.local/.local/share/fonts index 9ab89c4..9ab89c4 120000 --- a/macos/.local/share/fonts +++ b/macos.local/.local/share/fonts diff --git a/macos.local/.profile.org b/macos.local/.profile.org new file mode 120000 index 0000000..6341fcf --- /dev/null +++ b/macos.local/.profile.org @@ -0,0 +1 @@ +../common/.profile.org
\ No newline at end of file diff --git a/macos/.ssh/config.org b/macos.local/.ssh/config.org index e78c4fb..e78c4fb 100644 --- a/macos/.ssh/config.org +++ b/macos.local/.ssh/config.org diff --git a/macos/.wallpaper b/macos.local/.wallpaper index ec41b94..ec41b94 120000 --- a/macos/.wallpaper +++ b/macos.local/.wallpaper diff --git a/macos.local/.zshrc.org b/macos.local/.zshrc.org new file mode 120000 index 0000000..ccbdc43 --- /dev/null +++ b/macos.local/.zshrc.org @@ -0,0 +1 @@ +../common/.zshrc.org
\ No newline at end of file diff --git a/macos/Applications/Emacs.app/Contents/MacOS/Emacs.org b/macos.local/Applications/Emacs.app/Contents/MacOS/Emacs.org index 03c5152..03c5152 100644..100755 --- a/macos/Applications/Emacs.app/Contents/MacOS/Emacs.org +++ b/macos.local/Applications/Emacs.app/Contents/MacOS/Emacs.org diff --git a/macos/clang-format.org b/macos/clang-format.org deleted file mode 120000 index 960b79e..0000000 --- a/macos/clang-format.org +++ /dev/null @@ -1 +0,0 @@ -../common/clang-format.org
\ No newline at end of file diff --git a/macos/gitconfig.org.gpg b/macos/gitconfig.org.gpg deleted file mode 120000 index e4cb6ab..0000000 --- a/macos/gitconfig.org.gpg +++ /dev/null @@ -1 +0,0 @@ -../common/gitconfig.org.gpg
\ No newline at end of file diff --git a/macos/profile.org b/macos/profile.org deleted file mode 120000 index 7db75e0..0000000 --- a/macos/profile.org +++ /dev/null @@ -1 +0,0 @@ -../common/profile.org
\ No newline at end of file diff --git a/macos/zshrc.org b/macos/zshrc.org deleted file mode 120000 index 8a52724..0000000 --- a/macos/zshrc.org +++ /dev/null @@ -1 +0,0 @@ -../common/zshrc.org
\ No newline at end of file diff --git a/nixos/.flake/home/programs/emacs/feed.org.org b/nixos/.flake/home/programs/emacs/feed.org.org index f0de605..d074855 100644..120000 --- a/nixos/.flake/home/programs/emacs/feed.org.org +++ b/nixos/.flake/home/programs/emacs/feed.org.org @@ -1,39 +1 @@ -#+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 +../../../../../common/.config/emacs/feed.org.org
\ No newline at end of file diff --git a/nixos/.flake/home/programs/emacs/force-custom-file.el.org b/nixos/.flake/home/programs/emacs/force-custom-file.el.org index 8b8a418..06a4dc7 100644..120000 --- a/nixos/.flake/home/programs/emacs/force-custom-file.el.org +++ b/nixos/.flake/home/programs/emacs/force-custom-file.el.org @@ -1,8 +1 @@ -#+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 +../../../../../common/.config/emacs/force-custom-file.el.org
\ No newline at end of file diff --git a/nixos/.flake/home/programs/emacs/languages.el.org b/nixos/.flake/home/programs/emacs/languages.el.org index 3ee63e0..dd60c9f 100644..120000 --- a/nixos/.flake/home/programs/emacs/languages.el.org +++ b/nixos/.flake/home/programs/emacs/languages.el.org @@ -1,148 +1 @@ -#+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 +../../../../../common/.config/emacs/languages.el.org
\ No newline at end of file diff --git a/nixos/.flake/home/programs/emacs/package-setup.el.org b/nixos/.flake/home/programs/emacs/package-setup.el.org index 6ed238c..c0f3ead 100644..120000 --- a/nixos/.flake/home/programs/emacs/package-setup.el.org +++ b/nixos/.flake/home/programs/emacs/package-setup.el.org @@ -1,25 +1 @@ -#+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 +../../../../../common/.config/emacs/package-setup.el.org
\ No newline at end of file diff --git a/nixos/.flake/home/programs/emacs/tools.el.org b/nixos/.flake/home/programs/emacs/tools.el.org index d52c1b6..ff0296b 100644..120000 --- a/nixos/.flake/home/programs/emacs/tools.el.org +++ b/nixos/.flake/home/programs/emacs/tools.el.org @@ -1,391 +1 @@ -#+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 +../../../../../common/.config/emacs/tools.el.org
\ No newline at end of file diff --git a/nixos/.flake/home/programs/emacs/user-interface.el.org b/nixos/.flake/home/programs/emacs/user-interface.el.org index ff4bd34..8a7f782 100644..120000 --- a/nixos/.flake/home/programs/emacs/user-interface.el.org +++ b/nixos/.flake/home/programs/emacs/user-interface.el.org @@ -1,131 +1 @@ -#+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 +../../../../../common/.config/emacs/user-interface.el.org
\ No newline at end of file |