Editors & terminal¶
Reviewed against 92e8426, 2026-10-17. Files: dot_config/nvim/**, dot_config/ghostty/config, dot_claude/**,
.chezmoitemplates/zed-settings.json (rendered to ~/.config/zed/settings.json and, on Windows, ~/AppData/Roaming/Zed/settings.json).
Neovim¶
Kickstart-style lazy.nvim config. Requires Neovim 0.11+: lsp.lua uses vim.lsp.config() and
mason-lspconfig v2's auto-enable, and treesitter.lua targets nvim-treesitter's main branch. Distro
packages older than that fail on start (G-02).
Options (lua/options.lua): line numbers + relative, cursorline, sign column always, scrolloff
8, no wrap, truecolor, dark background, 4-space soft tabs with smart indent, ignorecase + smartcase,
no hlsearch, splits open right/below, persistent undo, no swap or backup, updatetime 50, timeoutlen
300, mouse on, system clipboard (unnamedplus), confirm on quit, visible whitespace (», ·, ␣).
Keymaps (lua/keymaps.lua, leader = Space):
| Keys | Action |
|---|---|
<Esc> |
clear search highlight |
<leader>w / <leader>q |
save / quit |
<C-h> <C-l> |
window left / right |
<C-j> <C-k> |
window down / up |
]q [q |
quickfix next / previous |
J / K (visual) |
move selection down / up |
<C-d> <C-u> n N |
keep cursor centred |
<leader>p (visual) |
paste without yanking |
<leader>y / <leader>Y |
yank to system clipboard |
<S-h> / <S-l> |
previous / next buffer |
<leader>ff fg fb fh fr / |
Telescope files, live grep, buffers, help, resume, in-buffer |
<leader>e |
nvim-tree toggle |
<leader>gg |
LazyGit |
gd gr K <leader>rn <leader>ca <leader>fm |
LSP definition, references, hover, rename, code action, format |
<C-Space> <CR> <Tab> <S-Tab> (insert) |
completion open, confirm, next, previous |
Colourscheme tokyonight night; lualine themed to match. Plugins, LSP servers and parsers: generated Neovim page.
Ghostty (macOS desktop only)¶
| Setting | Value |
|---|---|
font-family / font-size / font-thicken |
JetBrainsMono Nerd Font / 14 / true |
theme |
Catppuccin Mocha, opacity 1.0 |
| Window | 10 px padding balanced, window-save-state = always, unfocused split opacity 0.7 |
| Cursor | block, no blink |
copy-on-select |
clipboard |
clipboard-paste-protection |
true |
mouse-hide-while-typing |
true |
scrollback-limit |
10,000,000 |
macos-option-as-alt |
true |
macos-titlebar-style |
tabs |
| Keybinds | cmd+h/j/k/l → goto split (overrides macOS Hide), cmd+enter → fullscreen |
Shell integration left at Ghostty's auto-detect defaults.
Zed (every desktop profile)¶
Zed replaced VS Code as the GUI editor on 2026-09-22. One template, .chezmoitemplates/zed-settings.json,
renders to ~/.config/zed/settings.json on macOS and Linux and to ~/AppData/Roaming/Zed/settings.json
on Windows. Skipped on headless (Zed needs a GPU). Installed by the gui.Brewfile cask, the
ZedIndustries.Zed winget package, and zed.dev/install.sh on Linux desktops.
| Setting | Value |
|---|---|
base_keymap |
VSCode |
theme |
dark mode, Ayu Dark / Ayu Light |
icon_theme |
Colored Zed Icons Theme Dark (from the extension below) |
ui_font_size / buffer_font_size / buffer_font_family |
16 / 15 / JetBrainsMono Nerd Font |
autosave / format_on_save |
on_focus_change / on |
cli_default_open_behavior |
existing_window |
minimap.show |
always |
session.trust_all_worktrees |
true |
| Panels | project, outline, collaboration and git docked right; agent docked left |
agent_servers |
claude-acp from the registry |
auto_install_extensions |
Zed installs these itself on launch: generated list |
There is no separate extension installer script any more; add a line to auto_install_extensions and
push. EDITOR/VISUAL stay nvim for terminal use; git config core.editor too.
Claude Code status line (macOS + Linux)¶
dot_claude/statusline.sh → ~/.claude/statusline.sh: Catppuccin Mocha powerline segments, in order
model + effort (mauve), context % (blue), 5-hour session % (teal), directory (peach) and git branch +
status (yellow). Context and session turn red at 80%. Directory and git logic follow
~/.config/starship.toml. Needs bash, jq and git. No network calls.
dot_claude/modify_private_settings.json sets statusLine and env.CLAUDE_CODE_SUBAGENT_MODEL=sonnet in ~/.claude/settings.json, and adds the plugins below if they're missing (a local /plugin disable is kept). Claude Code owns
the rest of that file (permissions, plugins, drafts), which stays per-machine and out of this public
repo. If jq is missing or the file isn't valid JSON, the script passes it through unchanged.
Windows ignores .claude entirely.
Subagent routing¶
dot_claude/CLAUDE.md → ~/.claude/CLAUDE.md: a task → agent/model/effort table that the main (Opus)
session follows on every Agent call: Haiku for lookups, Sonnet for implementation, Opus for planning and
review, Fable only when stuck. dot_claude/agents/Explore.md overrides the built-in Explore agent so
code search runs on Haiku at medium effort instead of the main model. CLAUDE_CODE_SUBAGENT_MODEL=sonnet
catches any agent that names no model (general-purpose, workflow agents).
Plugins¶
codex@openai-codex(openai/codex-plugin-cc):/codex:review,/codex:adversarial-reviewand/codex:rescuerun on the ChatGPT/Codex subscription, not Claude Max. Added only wherecodexandnodeare onPATH, because its hooks runnode. Thecodexcask is ingui.Brewfile; log in once withcodex login. Leave the review gate (/codex:setup --enable-review-gate) off: it can loop Claude and Codex and burn both limits.typesafe@typesafe-ai(typesafe-ai/skills): one skill that teaches Claude the TypeSafe/Jev API for projects that call it. Code it writes needsTYPESAFE_API_KEY.