Reviewed: 2026-07-12; revalidated 2026-07-20 against source revision 34c2d8f.
Every git-tracked file was read; the suspicious findings below were verified against
the actual toolchain (GHC typecheck, installed ELPA package sources) rather than
assumed.
Ordered by severity. Check items off as they are fixed.
-
.xmonad/xmonad.hs:68-73— did not compile.myManageHookchained rules with.instead of,. GHC rejected it: "cannot mix-->[infix 0] and-->[infix 0] in the same infix expression" (confirmed withghc -fno-code). Fixed in commitf0d09a7by making it a plain list:myManageHook = composeAll [ className =? "Emacs" --> doShift "emacs" , className =? "Discord" --> doShift "4" , className =? "Steam" --> doShift "5" , manageDocks ]
-
.emacs.d/inits/20-proglangs.el:89— terraform format-on-save never activates.:hook (terraform . terraform-format-on-save)adds to a nonexistentterraform-hook. The installed package provides a minor mode, so it should be:hook (terraform-mode . terraform-format-on-save-mode). -
.emacs.d/inits/06-anzu.el:7— typo sets a dead variable. The real option isanzu-deactivate-region(verified against the installed anzu.el);anzu-deactive-regionsilently does nothing. -
.gemrc— options removed from RubyGems.--no-rdoc --no-riwere removed in RubyGems 3 (2018);gem installerrors on them. Modern equivalent:gem: --no-document. -
.emacs.d/inits/11-gptel.el:39— default model likely doesn't take effect.(setopt gptel-model gemini-model)sets a string where gptel expects a symbol, and picking a non-default backend also requires settinggptel-backend— otherwise the default backend remains ChatGPT. Test with a freshM-x gptelto confirm.
-
Plaintext secret history inside the repo tree.
~/.emacs.dis symlinked into the repo, andundo-tree-auto-save-historywrites to.emacs.d/undo/— which contains undo history for.authinfo(holds Anthropic/Gemini API keys per the gptel comments),.ssh/config, and ICPCsecrets2023/teams.csv. They are only kept out of git by the generic*~pattern. Move the undo dir out of the repo (e.g.~/.cache/emacs/undo) and delete the existing files. If this tree has ever been shared, indexed, or backed up externally, rotate the affected credentials; consider.authinfo.gpgto protect the live credential file. Also relocateauto-save-list/,recentf, andtransient/history.elfor privacy and cleanliness, but distinguish them from undo history: they generally expose filenames, metadata, or command history rather than full historical file contents. -
The root and XMonad
CLAUDE.mdfiles are gitignored and not versioned..gitignore:78ignoresCLAUDE.mdglobally, sodotfiles/CLAUDE.mdand.xmonad/CLAUDE.mdexist only on this machine — a fresh clone loses them. (The separate.claude/CLAUDE.mdis already tracked.) If unintended, add both!/CLAUDE.mdand!/.xmonad/CLAUDE.md(or force-add both files). Related:.xmonad/CLAUDE.mdis stale — it describes workspaces["term", "emacs", "Web", "Slack", ...]and Slack placement rules that no longer match the code. -
.claude/settings.local.jsonis committed and symlinked, yet.gitignore:84ignores it everywhere. "Local" settings are meant to be per-machine; committing them contradicts the ignore rule. Either fold its contents intosettings.json, or remove it from git withgit rm --cached. In the latter case, also changeinstall.sh:85so a fresh clone does not create a symlink to a missing file; let Claude create the local file or copy an ignored template instead.
-
install.shmixes package managers.sudo apt-get installfor ruby build deps (line 15) butpacman -Sfor the font (line 78). On an Arch box the ruby branch dies, andset -eaborts the whole script. Pick one or detect the distro. -
install.shinconsistencies. Ruby is the only asdf tool without anasdf global; asdf is pinned to the aging v0.13.1 release. The pin meansasdf globalwill not spontaneously disappear, but upgrading to the rewritten Go implementation in 0.16+ requires replacing it withasdf set. The~/.emacs.dsymlink is silently skipped if a real directory already exists; nothing installs the programs the configs depend on (xmonad, polybar, alacritty, nitrogen, fcitx5, xscreensaver, brightnessctl, and the RictyDiminished font used by both alacritty and polybar — only the Nerd Font symbols are handled). -
Hardware-specific values committed.
wlp3s0/enp2s0inpolybar.config.ini(useinterface-type = wireless/wiredinstead),amdgpu_bl1backlight card,BAT0. -
.latexmkrc:12is macOS-only.$pdf_previewer = "open -ga ~/Applications/Skim.app"— on Linux use zathura/evince, or make it conditional.
-
.bash_aliases:8-10— theA && B || C && D || Echain is left-associative, so even whengtacis found, the later&& tac="tac"overwrites it; the fallback never worked (harmless on Linux, but anif/elifwould be correct). Alsopeco-git-add(awk '{print $2}') breaks on paths with spaces and rename entries, andcd ${selected_file}inpeco-ghq-cdis unquoted ($LBUFFERthere is a zsh-ism, always empty in bash). -
.tmux.conf:6—default-terminal 'xterm-256color'is discouraged inside tmux;tmux-256color(plusterminal-featuresfor truecolor) is the correct value. -
.emacs.d/inits/05-editing.el:36—(concat user-emacs-directory "/undo")produces a double slash sinceuser-emacs-directoryalready ends in/. -
.emacs.d/inits/01-display.el— globalshow-trailing-whitespacealso lights up special/terminal buffers; commonly scoped toprog-mode-hook/text-mode-hook. -
.emacs.d/inits/20-proglangs.el— file-extension regexes use$and the OCaml one ("\\.ml[iylp]?") is unanchored, so it matches e.g.foo.mlx; the convention is\\.ml[iylp]?\\'. Most:modeentries there (.json,.go,.rs,.py) also duplicate what the packages already register via autoloads. The same applies to the.mdentry in.emacs.d/inits/33-markdown.el. -
.gitconfig— the[color]block has been the default since git 1.8.4 and can be deleted;push.autoSetupRemote = trueandrebase.autostash = truewould fit the alias-heavy workflow. -
README.mdis only eight lines and contains almost no guidance; what gets symlinked where and the prerequisites (currently only in the uncommitted CLAUDE.md) belong in the README.