Root cause: two separate nvim sessions meant mason-nvim-dap fired twice
(once per session), and in the second session it raced against
MasonToolsInstallSync — both tried to install codelldb simultaneously,
causing "Package is already installing" errors and codelldb failing.
Fix: run everything in a single nvim session. After Lazy sync completes,
wait 5s for vim.schedule callbacks to fire (mason-nvim-dap schedules its
installs this way), then poll the Mason registry until all async installs
finish, then run MasonToolsInstallSync which skips already-installed
packages. No more conflicts.
https://claude.ai/code/session_01J1XAGFnocxQ1cfoaRZceGA
Issues found when running the prepare script:
1. nvim-treesitter's main branch has a breaking rewrite that removed
the configs module, ensure_installed, and auto_install. Pin to the
master branch which has the stable API the config depends on.
2. Second Lazy sync caused mason-nvim-dap "Package is already
installing" conflicts. Removed — one sync is sufficient.
3. TSInstallSync command no longer exists in new treesitter. Removed
the step entirely — parsers are already compiled during Lazy sync
via the :TSUpdate build step and ensure_installed.
4. Mason async installs (mason-nvim-dap) were aborted when nvim quit.
Added a polling wait on the Mason registry so nvim stays alive
until all async package installs complete.
5. Removed unnecessary vim.wait(5000) before MasonToolsInstallSync.
6. Collapsed from 4 steps to 3. Added treesitter parser count to the
summary output.
https://claude.ai/code/session_01J1XAGFnocxQ1cfoaRZceGA
When NVIM_OFFLINE=1 is set, all network-dependent operations are disabled:
- lazy.nvim update checker and git timeouts
- Mason ensure_installed for LSP servers and tools
- Treesitter auto_install for parsers
- mason-nvim-dap automatic_installation for debug adapters
Includes two scripts for the offline workflow:
- scripts/nvim-offline-prepare.sh: run on a machine with internet to
pre-download all plugins, Mason packages, and Treesitter parsers
- scripts/nvim-offline-install.sh: deploy the bundle on the proxy machine
Also increases nvim-tree git timeout to 2s for proxy resilience.
https://claude.ai/code/session_01J1XAGFnocxQ1cfoaRZceGA
The 'ts' section was not included in the inline check, so it fell
through to file switching which re-opened the same file at line 1.
Now jumps to the export class line instead.
https://claude.ai/code/session_016zn34CVg7nXN6v4AvBA2K5
When in a .component.ts file, <leader>oh and <leader>oc now first look
for inline template:/styles: sections and jump to them. If no inline
section is found, they fall through to opening the external file.
<leader>ot jumps to the export class line when already in the .ts file.
https://claude.ai/code/session_016zn34CVg7nXN6v4AvBA2K5
The after/queries/angular/highlights.scm file was being appended rather
than replacing the bundled query, so the invalid static_member_expression
node type still caused errors. Switch to vim.treesitter.query.set() which
programmatically replaces the query at runtime, bypassing runtimepath
loading order issues with nvim-treesitter.
https://claude.ai/code/session_016zn34CVg7nXN6v4AvBA2K5
Override bundled Angular highlights.scm to remove the
static_member_expression node type reference which no longer exists
in the installed tree-sitter-angular parser, causing a query error
when opening inline templates.
https://claude.ai/code/session_016zn34CVg7nXN6v4AvBA2K5
Adds custom treesitter injection queries so that Angular @Component inline
templates get HTML/Angular syntax highlighting and inline styles get CSS
highlighting within TypeScript files.
https://claude.ai/code/session_016zn34CVg7nXN6v4AvBA2K5
- lualine: change default theme from 'nord' to 'auto' to match kanagawa
- noice: remove cmp.entry.get_documentation override (for nvim-cmp, not blink.cmp)
- telescope: move live_grep and git_files into pickers where they belong,
move path_display into defaults so it actually takes effect
- Remove empty after/lsp directory (svelte.lua was the only file)
https://claude.ai/code/session_01CZ49E2kHN3z3B8BaymxJJC
Two fixes:
- Add automatic_enable.exclude for rust_analyzer so mason-lspconfig
doesn't auto-start it alongside rustaceanvim's instance
- Remove duplicate emmet_ls (emmet_language_server is the newer
replacement and was already listed)
https://claude.ai/code/session_013d8HpzpE7xdxSGD1ErgoMG
Bufferline is in buffer mode, so tab keymaps (tabnew, tabclose, tabn,
tabp) were dead weight. Buffer equivalents already exist (<leader>b,
<leader>x, <Tab>, <S-Tab>).
https://claude.ai/code/session_013d8HpzpE7xdxSGD1ErgoMG
The tab bar shows buffers (via bufferline), not Vim tabs.
Changed <leader>tc to use BufferLineCloseOthers so it correctly
closes all other buffers in the bufferline.
https://claude.ai/code/session_013d8HpzpE7xdxSGD1ErgoMG
rustaceanvim already manages its own rust-analyzer LSP instance.
Having rust_analyzer in mason-lspconfig's ensure_installed caused a
second instance to auto-attach, resulting in doubled inlay hints
(e.g. "id: id: 6", "ProductStore: ProductStore").
https://claude.ai/code/session_013d8HpzpE7xdxSGD1ErgoMG
gD was incorrectly mapped to Telescope lsp_definitions (same as gd),
causing duplicate definition entries. Changed to vim.lsp.buf.declaration
which is the correct action for "go to declaration".
Also fixed leader-ca which was mapped to Telescope lsp_type_definitions
instead of vim.lsp.buf.code_action.
https://claude.ai/code/session_013d8HpzpE7xdxSGD1ErgoMG