Keymaps are discoverable in-editor by pressing <Space> and pausing, and are
written down separately, so they are deliberately not duplicated here. What was
not recorded anywhere was the surrounding context.
Covers the 0.12 floor, since autocomplete, pumborder, pummaxwidth, the nearest
completeopt value and vim.pack all require it; what bootstrap.sh symlinks where,
and why config/ is linked in as lua/config; and the vim.pack convention of one
file per plugin with versions pinned in the tracked lock file.
The rest is the behaviours that read as bugs until you know they are deliberate.
A standalone .php file gets no LSP at all, because phpactor sets
workspace_required and wants a project marker. Spell checking is on globally, in
code buffers too. netrw is disabled so `nvim .` opens nvim-tree, on the right.
Diagnostic signs are letters rather than icons.
Also restates the gitsigns global-mapping rationale already in the source, since
folding those maps into on_attach is the obvious tidy-up and it silently stops
them appearing in the which-key popup.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Netrw is disabled, as nvim-tree needs to own directory buffers so
`nvim .` opens the tree rather than the two fighting over it. That
removes :Ex, so the Obsidian guide has been updated to point at
<leader>e instead.
No auto-open autocmd: `nvim <path>` opens just the file, and the tree
is there on <leader>e when it is wanted. Placing it on the right also
flips the split direction, so opening a file from the tree puts it to
the left rather than displacing the tree.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Wraps the fzf binary already installed via brew, alongside rg and fd,
so it needs no plugin dependencies - unlike telescope, which would
also pull in plenary. Picks up nvim-web-devicons for file icons, which
is the first thing actually using that plugin.
Maps live under <leader>f: files, live grep, buffers, grep the word
under the cursor, and help tags. The intent is to stop treating netrw
as the way into a project and switch to jumping by name, leaving
buffers open and bouncing between them, rather than quitting out of
nvim to change file.
Netrw is untouched and still on :Ex for browsing an unfamiliar tree.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The gitsigns keymaps were defined in on_attach, so they were
buffer-local and created asynchronously - gitsigns shells out to git
before attaching. which-key had already built its keymap tree for the
buffer by then, and it only invalidates that cache on BufReadPost,
BufNew and LspAttach, so maps added afterwards stayed invisible.
Buf:get() returns cached mode state unless explicitly passed `update`,
which is why re-entering the buffer didn't help either.
Mapping globally instead means the maps exist before which-key builds
any tree. The gitsigns API no-ops in buffers it hasn't attached to
(checked stage/reset/preview/blame/nav in a non-git directory), so the
only change is that the maps now exist everywhere rather than just in
git-tracked buffers.
Also puts the diagnostic float and quickfix list on <leader>d. Nvim
already binds <C-W>d and ]d/[d for these, so this is a rebinding for
discoverability rather than new capability.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
which-key needs an icon backend and treats mini.icons and
nvim-web-devicons as equally viable optional deps, so devicons covers
it. Both are pure APIs with no visible effect on their own; devicons
self-initialises on require, so no setup() call.
Group labels for the <leader>h and <leader>t prefixes live in the
which-key config rather than next to the gitsigns maps they describe,
keeping which-key's config in one place. Worth moving if more plugins
start contributing prefixes.
The Nerd Font the glyphs need was installed by hand on this machine
but missing from brew.sh, so a fresh bootstrap would have rendered
every icon as tofu. Records it as a cask alongside the ghostty
font-family setting that already expects it.
Also drops the claude-code cask, which was never actually installed
here: brew tracks stable releases, and we want newer ones, so it comes
from Claude's own installer instead. Left a comment so it doesn't get
re-added.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Restores plugin management after the v0.12 config rewrite dropped the
earlier `vim.pack.add` calls. Plugins now live in `config/plugins/`,
one file per plugin, so adding the next is a single require.
Sets `<leader>` to Space for the gitsigns hunk mappings, and pins
'signcolumn' open so git and diagnostic signs don't shift text.
The lockfile moves into the repo and is symlinked by bootstrap.sh, as
the vim.pack docs recommend, giving reproducible plugin revisions
across machines and a rollback path via git. vim.pack writes it with a
truncating open, so it follows the symlink rather than replacing it.
Drops the orphaned nvim-tree entry, unreferenced since the rewrite.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>