Skip to content

Drop Ghostty, adopt Herdr, pull skills via flake inputs - #10

Merged
skippednote merged 24 commits into
mainfrom
drop-ghostty
Oct 21, 2026
Merged

skippednote merged 24 commits into
mainfrom
drop-ghostty

Conversation

@skippednote

Copy link
Copy Markdown
Owner

Rolls up what's accumulated on drop-ghostty:

  • Agent skills via pinned flake inputs. nix/skills.nix lists which skills to link from which repos; nix/modules/skills.nix resolves them read-only through inputs.skills-* and symlinks each under both ~/.claude/skills and ~/.codex/skills. Repos checked in so far: skippednote/skills (retro, slack-send), mattpocock/skills (improve-codebase-architecture, codebase-design, domain-modeling, grill-me, grilling), herdrdev/herdr (herdr). make skills-update moves only the skills-* inputs.
  • Herdr adoption. Install the GUI client via penso/tap, package it on every machine, drop Ghostty and the TUI alias, switch to solarized-light.
  • Nix-first toolchains. Rust toolchain from Nix instead of rustup; JDK from Nix instead of sdkman; SSM session manager plugin declared; Xcode declared so zap-cleanup keeps it; disktree, acli, gameping packaged from source.
  • Misc. Statusline script tracked under home/; ffmpeg in mise; actionlint in mise with current project pins; Zed side-by-side diffs; zshrc tweaks; never trace scripts that handle credentials.
  • Input bumps. nix flake update across the board plus follow-on bumps alongside each package addition.

Verified: make switch on skippednote host; slack-send, retro, herdr all resolve through ~/.claude/skills/<name> to their pinned store paths; Herdr GUI launches; Ghostty gone from Applications.

4cef4ec dropped the statusLine block from .claude/settings.json because it
pointed at a script that was neither present nor tracked. The statusline
that replaced it lived in an untracked clone under ~/.claude/statusline, so
it existed on this machine only.

Vendors statusline.sh from daniel3303/ClaudeCodeStatusLine at 5da9695 and
links it to ~/.claude/statusline.sh. settings.json stays unmanaged, so each
machine still needs:

  "statusLine": { "type": "command", "command": "bash ~/.claude/statusline.sh" }
Skills from other repos were installed by hand into ~/.claude/skills, where
nothing recorded their source or version. Two had already rotted into
dangling links.

nix/skills.nix now lists skills by flake input, and nix/modules/skills.nix
links each one into ~/.claude/skills and ~/.codex/skills. Every repo is a
non-flake input named skills-<x>, pinned in flake.lock and moved with
`nix flake update skills-<x>`. An entry names the skills to take, or omits
the list to take every directory with a SKILL.md. A misspelt name fails
eval instead of producing a dangling link.

These are store paths, not out-of-store links like the rest of home.file:
nothing should write to a third-party skill, and a read-only copy is what
holds it at the locked revision.

Starts with:

- herdr from herdrdev/herdr, pinned to v0.9.1 to match the installed
  binary; main documents flags that have not shipped yet
- grill-me and grilling from mattpocock/skills v1.3.1; grill-me only
  invokes grilling
- retro, moved out of home/.config/ai/skills into skippednote/skills, so
  my own skills install the same way as everyone else's
Otherwise the clash surfaces as a home-manager conflict on the link path,
which names neither entry.
Replaces a hand-installed link that had been dangling since ~/.agents/skills
was emptied. It calls codebase-design, domain-modeling and grilling, so the
first two come with it; grilling is already linked.
Moves only the skills-* inputs and switches, so a push to
skippednote/skills can be picked up without a full nix flake update.
nixpkgs and nixpkgs-agents move to 39ad350, home-manager to 6b88c12 and
openspec to 9111a76. That takes herdr to 0.9.3, so the herdr skill moves
to the v0.9.3 tag with it.

disktree 0.10.1 -> 0.11.0. nixpkgs has since gained its own disktree, but
it is Linux-only and refuses to evaluate on aarch64-darwin, so the local
package stays and its header now says so.

atuin stays on the local 18.23.0 package: nixpkgs now has rustc 1.98 but
still ships atuin 18.21.0, which would be a downgrade.
herdr-gpui is a native client for the herdr daemon. Upstream's supported
macOS route is their tap's cask: a signed, notarized universal app. The tap
is declared alongside it because cleanup = "zap" untaps anything unlisted.
Herdr.app attaches to a herdr daemon over SSH, so each machine it manages
needs one. herdr was in the dev profile, which skippedbook does not get.
Herdr.app is the terminal now. Removes the Ghostty cask, its config and
link, and the .zshrc fallback for hosts without the xterm-ghostty
terminfo, which only Ghostty set.

herdr itself stays: the same binary is the TUI and the daemon Herdr.app
attaches to, so only the `h` alias that opened the TUI goes.
Set from Herdr.app's settings, which write the shared theme through the
config.toml link. Also keeps the status_indicators change the app made
earlier, and ignores the lock file it leaves beside config.toml.
@skippednote
skippednote merged commit 6ed85d5 into main Oct 21, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant