provision: install kitty, neovim, lsd pinned; close audited tool gaps#4
Merged
Merged
Conversation
An audit of every command the tracked configs and scripts invoke found several tools that were referenced but never provisioned: - kitty: the whole kitty/ config is symlinked and sxhkd's terminal bindings, monitor-switch.sh, clipimg, and bash_aliases all invoke it, but nothing installed it. Now a pinned upstream bundle in ~/.local/kitty.app (apt's 22.04 kitty is 0.21, far too old for this config), with kitty/kitten symlinked into ~/.local/bin. - neovim: EDITOR in bashrc, gitconfig's editor/difftool/mergetool, and lazygit's edit command assume nvim. Same pinned-bundle treatment. - lsd: every ls alias points at it, but the install line was 'apt || cargo' - 22.04 has no lsd package and cargo is never provisioned, so it failed exactly where it was needed. Now a pinned release binary like the other CLI tools. - x11-xkb-utils: swapescape.service execs /usr/bin/setxkbmap, which x11-xserver-utils does not provide. - nitrogen: bspwmrc restores the wallpaper with it; the apt list installed feh instead, which nothing references. Swapped. - network-manager-gnome, blueman: bspwmrc launches nm-applet and blueman-applet at every startup (pgrep-guarded, so their absence was silent tray-feature loss). - xdg-utils: dunstrc's browser is /usr/bin/xdg-open. - dunstrc pointed its context menu at /usr/bin/dmenu, which was never provisioned; it now uses rofi's dmenu mode since rofi is already part of the stack. kitty and neovim publish no checksum files, so their sha256s were computed from the reviewed downloads (kitty additionally ships GPG signatures). Both bundles install via a new install_release_bundle helper in provision-lib.sh. The stale-duplicate check now covers lsd, kitty, and nvim, and suggests apt-get remove for dpkg-owned copies instead of deleting files out from under dpkg. protonvpn-app stays unprovisioned on purpose: it comes from Proton's own repo and bspwmrc pgrep-guards it. The vendored polybar shades theme's gmail/google/twitter modules reference exo-open but are not enabled in any profile's module list, so exo-utils is not installed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #3. An audit of every command the tracked configs and scripts invoke, compared against what provisioning actually installs, found a set of referenced-but-never-provisioned tools. They all worked by accident on machines where the tool predated this repo; a fresh provision left broken keybindings and silent feature loss.
Pinned upstream installs (new)
kitty/config is symlinked, and sxhkd's terminal bindings,monitor-switch.sh,bin/clipimg, andbash_aliasesall invoke it, but nothing installed it. Installed as the upstream binary bundle to~/.local/kitty.app(22.04's apt kitty is 0.21, far too old for this config), withkitty/kittensymlinked into~/.local/bin.EDITORin bashrc, gitconfig's editor/difftool/mergetool, and lazygit's edit command all assumenvim. Same bundle treatment (~/.local/nvim.app); 22.04's apt neovim is 0.6.apt || cargo. Ubuntu 22.04 has no lsd package and cargo is never provisioned, so it failed exactly where it was needed. Now a pinned release binary like the other CLI tools.kitty and neovim publish no checksum files (kitty ships GPG signatures), so their sha256s were computed from the reviewed downloads; every machine converges on byte-identical copies. Both install via a new
install_release_bundlehelper inprovision-lib.sh, and all four binaries were exercised from the verified artifacts (--versionsmoke tests pass). The stale-duplicate check now covers lsd/kitty/nvim and suggestsapt-get removefor dpkg-owned copies instead of deleting files out from under dpkg.Desktop apt gaps
x11-xkb-utils:swapescape.serviceexecs/usr/bin/setxkbmap, whichx11-xserver-utilsdoes not provide.nitrogen: bspwmrc restores the wallpaper with it; the apt list installed feh instead, which nothing in the repo references. Swapped.network-manager-gnome,blueman: bspwmrc launchesnm-appletandblueman-appletat every startup. They are pgrep-guarded, so their absence was silent tray-feature loss rather than an error.xdg-utils: dunstrc's browser is/usr/bin/xdg-open./usr/bin/dmenu, which was never provisioned. It now uses rofi's dmenu mode, since rofi is already part of the stack.Deliberately not provisioned (documented in the apt-list comment and CLAUDE.md)
protonvpn-app: comes from Proton's own repo; bspwmrc pgrep-guards it, so absence is harmless.exo-open: referenced only by the vendored polybar shades theme's gmail/google/twitter modules, which no profile enables.Test plan
$HOME: kitty 0.47.4, kitten 0.47.4, nvim 0.12.3, lsd 1.2.0 all run.shellcheck -S warningclean on all touched scripts; CI runs the full suite../provision.shrun on a real machine; note it will flag any existing apt-installed kitty/lsd as shadowed duplicates with the removal command.🤖 Generated with Claude Code
https://claude.ai/code/session_01SnU9EQrAZfjjhTTTt1PFAr
Generated by Claude Code