fix(nvim): resolve healthcheck warnings and add missing formatter tools - #1561
Conversation
- Add lsof, tree-sitter to packages - Add goimports, nixfmt-rfc-style, stylua, black to lang program dirs - Fix fidget notification.window.avoid for NvimTree - Update nvim-pack-lock.json via make neovim-update (68 plugins)
|
You do not have enough credits to review this pull request. Please purchase more credits to continue. |
📝 WalkthroughWalkthroughAdds headless Neovim which-key health checks to the Makefile; Claude activation now merges host-specific overrides; Home Manager gains Docker and K8s modules, package list changes, Neovim keymap and plugin config updates, and several tooling/language-server additions. Changes
Sequence Diagram(s)sequenceDiagram
participant Makefile as Makefile
participant Shell as Shell
participant Neovim as Neovim(headless)
participant WhichKey as which-key
rect rgba(200,230,255,0.5)
Makefile->>Shell: create temp Lua file (keymap dump)
Shell->>Neovim: run nvim -u minimal -c 'luafile /tmp/...' -c 'checkhealth which-key' -c 'qall'
Neovim->>WhichKey: run which-key health checks
WhichKey-->>Neovim: health output (stdout)
Neovim-->>Shell: stdout
end
rect rgba(200,255,220,0.5)
Shell->>Shell: filter WARNING lines for "overlap"
Shell-->>Makefile: exit non-zero + print "❌ Keymap overlaps found" if warnings present
Shell-->>Makefile: or print "✅ No keymap overlaps"
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested labels
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Code Review
This pull request updates the home-manager configuration by adding several utility packages and formatters, including lsof, tree-sitter, goimports, stylua, nixfmt-rfc-style, and black. Additionally, it modifies the fidget.nvim configuration to prevent notifications from overlapping with NvimTree and updates multiple Neovim plugin revisions in the lockfile. I have no feedback to provide.
Mesa DescriptionTL;DRResolves Neovim healthcheck warnings, installs missing formatter and LSP tools, and addresses keymap overlaps. This PR also enables Copilot suggestions, adds image/TeX tools, refactors Docker and Kubernetes configurations into dedicated modules, and implements per-host Claude overrides. What changed?
Description generated by Mesa. Update settings |
…arning - Use lib.lowPrio gotools to avoid conflict with ruby bundle binary - Rename nixfmt-rfc-style to nixfmt per deprecation warning
- Enable copilot suggestion in completion.lua - Add dockerfile-language-server to new programs/docker/ - Add vscode-langservers-extracted, vtsls to programs/node/ - Add imagemagick, ghostscript, mermaid-cli to isDesktop packages
There was a problem hiding this comment.
1 issue found across 5 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="home-manager/programs/neovim/lua/config/completion.lua">
<violation number="1" location="home-manager/programs/neovim/lua/config/completion.lua:76">
P2: Keep copilot.lua inline suggestions disabled when using copilot-cmp; enabling them can interfere with cmp completions.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
| -- From: https://github.com/zbirenbaum/copilot.lua | ||
| require("copilot").setup({ | ||
| suggestion = { enabled = false }, | ||
| suggestion = { enabled = true }, |
There was a problem hiding this comment.
P2: Keep copilot.lua inline suggestions disabled when using copilot-cmp; enabling them can interfere with cmp completions.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At home-manager/programs/neovim/lua/config/completion.lua, line 76:
<comment>Keep copilot.lua inline suggestions disabled when using copilot-cmp; enabling them can interfere with cmp completions.</comment>
<file context>
@@ -73,7 +73,7 @@ cmp.setup.cmdline(":", {
-- From: https://github.com/zbirenbaum/copilot.lua
require("copilot").setup({
- suggestion = { enabled = false },
+ suggestion = { enabled = true },
panel = { enabled = false },
})
</file context>
| suggestion = { enabled = true }, | |
| suggestion = { enabled = false }, |
- Rename <leader>bad to <leader>BD (wipe all buffers) - Rename <leader>h kill terminal to <leader>kt - Rename gco generate annotation to <leader>ca - Add which-key overlap check to lua-check-neovim Makefile target
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (3)
home-manager/programs/neovim/lua/config/ui.lua (1)
158-164: Indentation inconsistency — likely to failstyluacheck.The rest of this file is indented with tabs, but the new
fidget.setup(...)block uses 2-space indentation. Since this PR also addsstyluatohome-manager/programs/lua/default.nix, running stylua on this file will reformat these lines. Consider re-indenting with tabs to match surrounding style and avoid a noisy follow-up reformat commit.🔧 Proposed fix
require("fidget").setup({ - notification = { - window = { - avoid = { "NvimTree" }, - }, - }, + notification = { + window = { + avoid = { "NvimTree" }, + }, + }, })🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@home-manager/programs/neovim/lua/config/ui.lua` around lines 158 - 164, The new fidget setup block uses 2-space indentation while the rest of the file uses tabs, which will fail stylua; update the indentation for the require("fidget").setup({ ... }) block to use tabs consistent with surrounding code (match existing tab-based indentation around UI config) so stylua produces no changes and the formatter/linters remain satisfied.Makefile (1)
936-944: Overlap check is informational-only — consider surfacing unexpected overlaps as failures.The check prints overlaps but always succeeds, which means genuine keymap conflicts introduced later will not fail CI — only visual inspection of logs would catch them. If the intent is just to surface output (as the message suggests), this is fine; but if you want this to be a real guard, filter out the known/expected operator patterns (
gc,gcc,go,goo,ys,yss, etc.) andexit 1when anything else remains.Also minor:
grep "WARNING"could match unrelated which-key warnings; anchoring viagrep -E '^- WARNING'(the standard:checkhealthprefix) would be slightly more robust.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Makefile` around lines 936 - 944, The current Makefile keymap check captures any which-key "WARNING" lines into OVERLAPS but never fails CI; modify the shell block that defines OVERLAPS to (1) anchor the which-key match (use grep -E '^- WARNING' instead of grep "WARNING"), (2) filter out the known operator patterns (gc, gcc, go, goo, ys, yss, etc.) from the results before deciding, and (3) if any remaining overlaps exist, print them and call exit 1 so the Makefile target fails CI; update the echo messages accordingly and keep the variable name OVERLAPS and the same nvim headless invocation to locate the change.home-manager/programs/default.nix (1)
13-16: Nit:dockeris out of alphabetical order.The rest of the module list is alphabetized;
dockershould come afterdirenv, not betweendartanddelta. Same issue in the output list at line 63.Proposed reordering
dart = import ./dart; - docker = import ./docker; delta = import ./delta; direnv = import ./direnv; + docker = import ./docker; elixir = import ./elixir;dart - docker delta direnv + docker elixir🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@home-manager/programs/default.nix` around lines 13 - 16, Reorder the module imports and the corresponding output list so entries are alphabetized: move the docker import to follow direnv (i.e., dart, delta, direnv, docker -> dart, delta, direnv, docker) and make the same change in the output list where docker currently sits out of order; update the blocks that reference dart, delta, direnv, docker to maintain consistent alphabetical ordering.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@config/claude/activate.sh`:
- Around line 8-12: The current script uses mktemp outside ~/.claude which can
cause mv to copy+unlink across filesystems and doesn't clean up on jq failure;
change to create the temporary file in the target directory (use mktemp with the
same directory as ~/.claude/settings.json or construct a temp name in
$HOME/.claude), run jq to write to that temp, check jq exit status and on
failure remove the temp (rm -f $_TMP), and on success use mv -f $_TMP
~/.claude/settings.json to replace atomically; also add a trap to rm -f $_TMP on
exit/error to ensure cleanup; reference symbols: mktemp, $_TMP, jq,
SETTINGS_JSON, ~/.claude/settings.json, mv -f, rm -f, and trap.
In `@home-manager/programs/neovim/lua/config/completion.lua`:
- Around line 73-78: The current copilot setup enables inline suggestions
(suggestion.enabled = true) which contradicts the comment, breaks the test
(completion_spec.lua assertions expecting false) and conflicts with copilot-cmp
usage; change the copilot configuration in copilot.setup to set
suggestion.enabled = false, update or remove the stale comment about "disabled
by default", and ensure copilot_cmp.setup() + the { name = "copilot" } entry in
cmp.config.sources remain compatible (i.e., disable inline(gottxt) suggestions
via suggestion.enabled so only copilot-cmp provides completions) and then adjust
completion_spec.lua expectations if you intend to keep inline suggestions
enabled in a different test setup.
---
Nitpick comments:
In `@home-manager/programs/default.nix`:
- Around line 13-16: Reorder the module imports and the corresponding output
list so entries are alphabetized: move the docker import to follow direnv (i.e.,
dart, delta, direnv, docker -> dart, delta, direnv, docker) and make the same
change in the output list where docker currently sits out of order; update the
blocks that reference dart, delta, direnv, docker to maintain consistent
alphabetical ordering.
In `@home-manager/programs/neovim/lua/config/ui.lua`:
- Around line 158-164: The new fidget setup block uses 2-space indentation while
the rest of the file uses tabs, which will fail stylua; update the indentation
for the require("fidget").setup({ ... }) block to use tabs consistent with
surrounding code (match existing tab-based indentation around UI config) so
stylua produces no changes and the formatter/linters remain satisfied.
In `@Makefile`:
- Around line 936-944: The current Makefile keymap check captures any which-key
"WARNING" lines into OVERLAPS but never fails CI; modify the shell block that
defines OVERLAPS to (1) anchor the which-key match (use grep -E '^- WARNING'
instead of grep "WARNING"), (2) filter out the known operator patterns (gc, gcc,
go, goo, ys, yss, etc.) from the results before deciding, and (3) if any
remaining overlaps exist, print them and call exit 1 so the Makefile target
fails CI; update the echo messages accordingly and keep the variable name
OVERLAPS and the same nvim headless invocation to locate the change.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 4f4dffa7-a47b-4a6d-b37e-5cf20f85b0d6
📒 Files selected for processing (15)
Makefileconfig/claude/activate.shconfig/claude/settings.jsonhome-manager/packages/default.nixhome-manager/programs/default.nixhome-manager/programs/docker/default.nixhome-manager/programs/go/default.nixhome-manager/programs/lua/default.nixhome-manager/programs/neovim/lua/config/completion.luahome-manager/programs/neovim/lua/config/keymaps.luahome-manager/programs/neovim/lua/config/ui.luahome-manager/programs/neovim/nvim-pack-lock.jsonhome-manager/programs/nix/default.nixhome-manager/programs/node/default.nixhome-manager/programs/python/default.nix
| _TMP=$(mktemp) | ||
| jq --arg host "$(hostname)" ' | ||
| . * (.hostOverrides[$host] // {}) | del(.hostOverrides) | ||
| ' "$SETTINGS_JSON" > "$_TMP" | ||
| mv "$_TMP" ~/.claude/settings.json |
There was a problem hiding this comment.
Keep the generated settings write atomic and non-interactive.
mktemp defaults outside ~/.claude, so mv may degrade to copy+unlink across filesystems. Also use mv -f and clean up the temp file on jq failure.
Proposed fix
-_TMP=$(mktemp)
+_TMP=$(mktemp "$HOME/.claude/settings.json.XXXXXX")
+trap 'rm -f "$_TMP"' EXIT
jq --arg host "$(hostname)" '
. * (.hostOverrides[$host] // {}) | del(.hostOverrides)
' "$SETTINGS_JSON" > "$_TMP"
-mv "$_TMP" ~/.claude/settings.json
+mv -f "$_TMP" "$HOME/.claude/settings.json"
+trap - EXITAs per coding guidelines, **/*.{sh,bash}: Always use non-interactive flags with file operations (cp -f, mv -f, rm -f, rm -rf, cp -rf) to avoid hanging on confirmation prompts.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| _TMP=$(mktemp) | |
| jq --arg host "$(hostname)" ' | |
| . * (.hostOverrides[$host] // {}) | del(.hostOverrides) | |
| ' "$SETTINGS_JSON" > "$_TMP" | |
| mv "$_TMP" ~/.claude/settings.json | |
| _TMP=$(mktemp "$HOME/.claude/settings.json.XXXXXX") | |
| trap 'rm -f "$_TMP"' EXIT | |
| jq --arg host "$(hostname)" ' | |
| . * (.hostOverrides[$host] // {}) | del(.hostOverrides) | |
| ' "$SETTINGS_JSON" > "$_TMP" | |
| mv -f "$_TMP" "$HOME/.claude/settings.json" | |
| trap - EXIT |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@config/claude/activate.sh` around lines 8 - 12, The current script uses
mktemp outside ~/.claude which can cause mv to copy+unlink across filesystems
and doesn't clean up on jq failure; change to create the temporary file in the
target directory (use mktemp with the same directory as ~/.claude/settings.json
or construct a temp name in $HOME/.claude), run jq to write to that temp, check
jq exit status and on failure remove the temp (rm -f $_TMP), and on success use
mv -f $_TMP ~/.claude/settings.json to replace atomically; also add a trap to rm
-f $_TMP on exit/error to ensure cleanup; reference symbols: mktemp, $_TMP, jq,
SETTINGS_JSON, ~/.claude/settings.json, mv -f, rm -f, and trap.
| -- GitHub Copilot helper with inline suggestions disabled by default. | ||
| -- From: https://github.com/zbirenbaum/copilot.lua | ||
| require("copilot").setup({ | ||
| suggestion = { enabled = false }, | ||
| suggestion = { enabled = true }, | ||
| panel = { enabled = false }, | ||
| }) |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
copilot-cmp README recommendation on copilot.lua suggestion.enabled setting
💡 Result:
The copilot-cmp README recommends disabling the suggestion module in copilot.lua when using copilot-cmp. Specifically, set suggestion.enabled = false (along with panel.enabled = false) in the copilot.lua setup to prevent interference with completions appearing properly in the nvim-cmp menu provided by copilot-cmp.
Citations:
- 1: https://github.com/zbirenbaum/copilot-cmp
- 2: https://github-redirect.dependabot.com/zbirenbaum/copilot-cmp
🏁 Script executed:
# Check if the file exists and examine lines 73-78
if [ -f "home-manager/programs/neovim/lua/config/completion.lua" ]; then
echo "=== completion.lua lines 70-80 ==="
sed -n '70,80p' "home-manager/programs/neovim/lua/config/completion.lua"
else
find . -name "completion.lua" -type f | head -5
fiRepository: shunkakinoki/dotfiles
Length of output: 377
🏁 Script executed:
# Check the test file for assertion about suggestion.enabled
if [ -f "home-manager/programs/neovim/tests/completion_spec.lua" ]; then
echo "=== completion_spec.lua lines 135-145 ==="
sed -n '135,145p' "home-manager/programs/neovim/tests/completion_spec.lua"
else
find . -name "completion_spec.lua" -type f | head -5
fiRepository: shunkakinoki/dotfiles
Length of output: 447
🏁 Script executed:
# Check for copilot-cmp configuration at lines 6 and 39 in completion.lua
if [ -f "home-manager/programs/neovim/lua/config/completion.lua" ]; then
echo "=== completion.lua lines 1-50 (to find copilot-cmp usage) ==="
sed -n '1,50p' "home-manager/programs/neovim/lua/config/completion.lua"
fiRepository: shunkakinoki/dotfiles
Length of output: 1640
Stale comment, failing test, and configuration conflicts with copilot-cmp upstream guidance.
Three issues with suggestion.enabled = true:
- Stale comment: Line 73 claims inline suggestions are "disabled by default" but the code enables them.
- Test will fail:
completion_spec.lua:139-140assertssuggestion.enabled = false; this assertion fails with the current code. - Upstream conflict: copilot-cmp README recommends disabling
suggestion.enabledwhen using copilot-cmp to prevent ghost text and menu suggestions from conflicting. The code setscopilot_cmp.setup()(line 6) and includes{ name = "copilot" }incmp.config.sources(line 39), making the dual activation problematic.
🔧 Proposed fix
-- GitHub Copilot helper with inline suggestions disabled by default.
+-- GitHub Copilot helper configured for nvim-cmp.
-- From: https://github.com/zbirenbaum/copilot.lua
require("copilot").setup({
- suggestion = { enabled = true },
+ suggestion = { enabled = false },
panel = { enabled = false },
})Ensure completion_spec.lua:139-140 test expectations align with this change.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@home-manager/programs/neovim/lua/config/completion.lua` around lines 73 - 78,
The current copilot setup enables inline suggestions (suggestion.enabled = true)
which contradicts the comment, breaks the test (completion_spec.lua assertions
expecting false) and conflicts with copilot-cmp usage; change the copilot
configuration in copilot.setup to set suggestion.enabled = false, update or
remove the stale comment about "disabled by default", and ensure
copilot_cmp.setup() + the { name = "copilot" } entry in cmp.config.sources
remain compatible (i.e., disable inline(gottxt) suggestions via
suggestion.enabled so only copilot-cmp provides completions) and then adjust
completion_spec.lua expectations if you intend to keep inline suggestions
enabled in a different test setup.
There was a problem hiding this comment.
1 issue found across 3 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="home-manager/programs/neovim/lua/config/keymaps.lua">
<violation number="1" location="home-manager/programs/neovim/lua/config/keymaps.lua:400">
P2: This nvim-surround override is reset later by the existing `setup()` call in `treesitter.lua`, so the disabled keymaps never take effect.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
|
You're iterating quickly on this pull request. To help protect your rate limits, cubic has paused automatic reviews on new pushes for now—when you're ready for another review, comment |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
home-manager/programs/neovim/lua/config/keymaps.lua (1)
160-215:⚠️ Potential issue | 🟠 MajorResolve the remaining
<leader>gsduplicate.Line 215 overwrites the Git status mapping from Line 161, so
<leader>gsno longer opens:tab Git. Consider keepinggsfor status and moving the index diff split to an unused Git key.🐛 Proposed fix
-- `@keymap` <leader>gs: Fugitive vertical diff split (current file vs index) -keymap("n", "<leader>gs", ":Gvdiffsplit<cr>", { noremap = true, silent = true, desc = "Diff split (index)" }) +-- `@keymap` <leader>gi: Fugitive vertical diff split (current file vs index) +keymap("n", "<leader>gi", ":Gvdiffsplit<cr>", { noremap = true, silent = true, desc = "Diff split (index)" })🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@home-manager/programs/neovim/lua/config/keymaps.lua` around lines 160 - 215, There are two conflicting keymap registrations for "<leader>gs": keymap("n", "<leader>gs", ":tab Git<cr>", ...) and later keymap("n", "<leader>gs", ":Gvdiffsplit<cr>", ...), which overwrites the Git status mapping; fix by renaming the second mapping to an unused Git key (e.g. change the second call to keymap("n", "<leader>gS", ":Gvdiffsplit<cr>", { ... }) and update its desc to "Diff split (index)"), ensuring the original keymap("n", "<leader>gs", ":tab Git<cr>", ...) remains unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Outside diff comments:
In `@home-manager/programs/neovim/lua/config/keymaps.lua`:
- Around line 160-215: There are two conflicting keymap registrations for
"<leader>gs": keymap("n", "<leader>gs", ":tab Git<cr>", ...) and later
keymap("n", "<leader>gs", ":Gvdiffsplit<cr>", ...), which overwrites the Git
status mapping; fix by renaming the second mapping to an unused Git key (e.g.
change the second call to keymap("n", "<leader>gS", ":Gvdiffsplit<cr>", { ... })
and update its desc to "Diff split (index)"), ensuring the original keymap("n",
"<leader>gs", ":tab Git<cr>", ...) remains unchanged.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 114bcbd0-d64c-4ec0-b9fb-fc2aa4958b54
📒 Files selected for processing (11)
Makefileconfig/claude/activate.shhome-manager/packages/default.nixhome-manager/programs/default.nixhome-manager/programs/docker/default.nixhome-manager/programs/k8s/default.nixhome-manager/programs/neovim/lua/config/ai.luahome-manager/programs/neovim/lua/config/keymaps.luahome-manager/programs/neovim/lua/config/treesitter.luahome-manager/programs/neovim/lua/config/ui.luascripts/llm-update.sh
💤 Files with no reviewable changes (2)
- home-manager/programs/neovim/lua/config/treesitter.lua
- home-manager/programs/neovim/lua/config/ai.lua
✅ Files skipped from review due to trivial changes (4)
- home-manager/programs/k8s/default.nix
- home-manager/programs/docker/default.nix
- home-manager/programs/default.nix
- scripts/llm-update.sh
🚧 Files skipped from review as they are similar to previous changes (4)
- config/claude/activate.sh
- Makefile
- home-manager/programs/neovim/lua/config/ui.lua
- home-manager/packages/default.nix
Summary
lsofandtree-sittertopackages/default.nixgoimports(go),nixfmt-rfc-style(nix),stylua(lua),black(python)notification.window.avoidto includeNvimTreenvim-pack-lock.jsonviamake neovim-update(68 plugins)Test plan
make switchcompletes cleanly:checkhealth conformshows no unavailable formatter warnings:checkhealth fidgetshows no NvimTree integration warning:checkhealth opencodeand:checkhealth sidekickshow lsof found:checkhealth nvim-treesittershows tree-sitter-cli found:checkhealth vim.packshows no stale revision errorsSummary by cubic
Fixes Neovim healthcheck warnings, enforces zero keymap overlaps in CI, and installs missing formatter/LSP tools. Enables Copilot suggestions, adds image/TeX tools, moves Docker/K8s into modules, and applies per-host Claude overrides.
New Features
goimportsviagotools,nixfmt,stylua,black;dockerfile-language-server,vscode-langservers-extracted,vtsls.make lua-check-neovim; installimagemagick,ghostscript,mermaid-cli,tectonic; per-host Claude overrides inactivate.sh.Bug Fixes
lsof,tree-sitter; configurefidgetto avoidNvimTree; updatenvim-pack-lock.json; use low-prioritygotools; move Docker packages toprograms/dockerand Kubernetes tools toprograms/k8s; rename Docker LSP pkg; switchnixfmt-rfc-styletonixfmt; migratenvim-surroundto v4 API and remove duplicate setup; fix SC2155 inscripts/llm-update.sh.<leader>H, rename wipe-all to<leader>BD, move annotation to<leader>ca, change line diagnostics to<leader>xd; disable conflicting mappings (nvim-surroundyss/ySS, built-ingcc); NvimTree:y/d/c->Y/D/C(relative path on<C-y>); keep<leader>hfor kill terminal.Written for commit 6411fa3. Summary will update on new commits.