Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
92535f3
feat(rust): sccache shared compiler cache + rename cargo config
tstapler Jul 14, 2026
d4b3462
chore(sdd): planning artifacts for neovim-hardening
tstapler Jul 16, 2026
f0fe1f3
feat(nvim): Phase 1 shared infra — Lua bootstrap, lazy.nvim, safe-map…
tstapler Jul 16, 2026
4e70324
feat(nvim): Epic 2.1 — native LSP core scaffolding + blink.cmp comple…
tstapler Jul 16, 2026
c4daa23
feat(nvim): Phase 2-5 language LSP+DAP — Go, Rust, Python, TS/JS
tstapler Jul 16, 2026
e81e1ae
feat(nvim): Epic 2.3.1 — shared nvim-dap core + Go Delve adapter
tstapler Jul 16, 2026
ed598b2
test(nvim): add smoke_test.sh — formalized integration test + startup…
tstapler Jul 17, 2026
9d4eb16
test(nvim): fix headless mason-lspconfig install blind spot in smoke_…
tstapler Jul 17, 2026
22d4aa4
test(nvim): add real multi-module/multi-package demo fixtures per lan…
tstapler Jul 17, 2026
c738bb4
feat(nvim): quick-win batch from IntelliJ gap analysis — code group, …
tstapler Jul 17, 2026
784ca92
fix(nvim): interactively verify Rust and TS/JS DAP; fix real js-debug…
tstapler Jul 17, 2026
bb8be7a
fix(nvim): interactively verify Go and Python DAP; fix real PYTHONPAT…
tstapler Jul 18, 2026
b72eef4
feat(nvim): add Java (jdtls) and Kotlin (kotlin-language-server) LSP+DAP
tstapler Jul 18, 2026
7d8730a
ci(nvim): add GitHub Actions workflow running the smoke test on every…
tstapler Jul 21, 2026
6ea9fa5
fix(nvim): fix real bugs found by the first live CI run
tstapler Jul 21, 2026
0d42901
fix(nvim): improve fresh-install failure diagnostics, bump Rust CI ti…
tstapler Jul 21, 2026
82a74f1
fix(nvim): fix fresh-install error window, add real gd failure diagno…
tstapler Jul 21, 2026
b0aa69f
fix(nvim): poll for real Mason install completion, stop misdiagnosing…
tstapler Jul 21, 2026
94adb89
fix(nvim): make_position_params takes a window id, not a bufnr, in gd…
tstapler Jul 21, 2026
96480bd
fix(nvim): disable 'more' in smoke test probe so long print() dumps d…
tstapler Jul 21, 2026
8617a4e
fix(nvim): write rust gd diagnostic dump to a file instead of print()
tstapler Jul 21, 2026
289756d
fix(nvim): retry gd() navigation instead of guessing a bigger settle …
tstapler Jul 21, 2026
a57ac17
fix(nvim): stop earlier LSP clients before rust-analyzer check to fre…
tstapler Jul 21, 2026
41fda5e
diag(nvim): dump rust-analyzer's resolved root_dir on gd failure
tstapler Jul 21, 2026
edeb4b1
diag(nvim): dump rust-analyzer/analyzerStatus on gd failure
tstapler Jul 21, 2026
b68ad9b
fix(nvim): poll client.progress.pending for real indexing completion;…
tstapler Jul 21, 2026
af3f74f
diag(nvim): route progress_pending status through the file dump, not …
tstapler Jul 21, 2026
ba23073
fix(nvim): remove literal $(...) from a heredoc comment that broke ev…
tstapler Jul 21, 2026
245aca4
fix(ci): pin rust-toolchain to 1.95.0 to test rust-analyzer version-s…
tstapler Jul 21, 2026
770f472
chore(nvim): downgrade the Rust cross-crate gd check to non-blocking,…
tstapler Jul 21, 2026
ddad073
fix(nvim): address code-review findings on smoke_test.sh, java/python…
tstapler Jul 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .cargo/config

This file was deleted.

6 changes: 6 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[net]
git-fetch-with-cli = true

[build]
rustc-wrapper = "sccache"
incremental = false
8 changes: 0 additions & 8 deletions .cfgcaddy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,12 @@ links:
- src: .vimsnippets # You can link to multiple destinations
dest:
- .vimsnippets
- .vim/bundle/.dein/stapler-snips
- .config/coc/ultisnips
- src: .mixxx/controllers
- src: bin/scripts/*
dest: bin/scripts
os: "Linux Darwin"
- src: .aider.conf.yml
- src: .vimrc
dest: .config/nvim/init.vim
os: "Linux Darwin"
- src: .config/nvim/coc-settings.json
- src: .config/nixpkgs
os: "Linux Darwin"
- src: stapler-scripts/*
Expand All @@ -27,9 +22,6 @@ links:
- src: stapler-scripts/PowerShell
dest: "%userprofile%\\My Documents\\WindowsPowerShell\\"
os: "Windows"
- src: .vimrc
dest: "%userprofile%\\AppData\\Local\\nvim\\init.vim"
os: "Windows"
# Symlinks for git are broken on windows
- src: .gittemplates
os: "Linux Darwin"
Expand Down
95 changes: 0 additions & 95 deletions .config/nvim/coc-settings.json

This file was deleted.

20 changes: 20 additions & 0 deletions .config/nvim/init.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)

vim.g.mapleader = " "
vim.g.maplocalleader = "\\"

require("tstapler")
53 changes: 53 additions & 0 deletions .config/nvim/lazy-lock.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"FastFold": { "branch": "master", "commit": "c1ddfa1a0e00316d1161ce11438ec980348b8cb9" },
"NrrwRgn": { "branch": "master", "commit": "e6f29bd507903b587229c544d3e1eba3cc0f0a13" },
"blink.cmp": { "branch": "main", "commit": "78336bc89ee5365633bcf754d93df01678b5c08f" },
"fzf-lua": { "branch": "main", "commit": "532d463f5c83595192fe740572d8fd6902b2217a" },
"gitsigns.nvim": { "branch": "main", "commit": "31d6fb2d618bca1482b9f274751ead5f03461408" },
"goyo.vim": { "branch": "master", "commit": "9c72fdf2d202914318581f9f0dd09fd102f8504d" },
"gruvbox.nvim": { "branch": "main", "commit": "154eb5ff5b96d0641307113fa385eaf0d36d9796" },
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
"limelight.vim": { "branch": "master", "commit": "617064e84e896f6f36b5e559f8e6486d632f68ed" },
"lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "916c29ee62699457a3ec57962781c67c6c6772f2" },
"mason-nvim-dap.nvim": { "branch": "main", "commit": "9a10e096703966335bd5c46c8c875d5b0690dade" },
"mason.nvim": { "branch": "main", "commit": "2a6940af80375532e5e9e7c1f2fc6319a1b7a69d" },
"nvim-dap": { "branch": "master", "commit": "9e848e09a697ee95302a3ef2dd43fd6eb709e570" },
"nvim-dap-go": { "branch": "main", "commit": "b4421153ead5d726603b02743ea40cf26a51ed5f" },
"nvim-dap-python": { "branch": "master", "commit": "1808458eba2b18f178f990e01376941a42c7f93b" },
"nvim-dap-ui": { "branch": "master", "commit": "cc9dd33aade7f20bae414d0cba163bc60d4d4b43" },
"nvim-dap-virtual-text": { "branch": "master", "commit": "fbdb48c2ed45f4a8293d0d483f7730d24467ccb6" },
"nvim-dap-vscode-js": { "branch": "main", "commit": "03bd29672d7fab5e515fc8469b7d07cc5994bbf6" },
"nvim-jdtls": { "branch": "master", "commit": "6e9d953f0b82bccdb834cfde0e893f3119c22592" },
"nvim-lspconfig": { "branch": "master", "commit": "e7ca2c95ba316a8b846d3f3546d407908c5c4ccb" },
"nvim-nio": { "branch": "master", "commit": "edcc181a875301dd21840189aa2f2f9ad69fc172" },
"nvim-treesitter": { "branch": "master", "commit": "cf12346a3414fa1b06af75c79faebe7f76df080a" },
"nvim-treesitter-textobjects": { "branch": "master", "commit": "5ca4aaa6efdcc59be46b95a3e876300cfead05ef" },
"oil.nvim": { "branch": "master", "commit": "b73018b75affd13fa38e2fc94ef753b465f770d7" },
"rustaceanvim": { "branch": "main", "commit": "88575b98bb9937fb9983ddec5e532b67e75ce677" },
"tabular": { "branch": "master", "commit": "12437cd1b53488e24936ec4b091c9324cafee311" },
"tiny-code-action.nvim": { "branch": "main", "commit": "0d040ed81f7953118b81cd12681fcdfcac069803" },
"tiny-inline-diagnostic.nvim": { "branch": "main", "commit": "6264451f14119d63a52580e5198d6baf8518b0b2" },
"undotree": { "branch": "master", "commit": "6fa6b57cda8459e1e4b2ca34df702f55242f4e4d" },
"vim-abolish": { "branch": "master", "commit": "dcbfe065297d31823561ba787f51056c147aa682" },
"vim-commentary": { "branch": "master", "commit": "64a654ef4a20db1727938338310209b6a63f60c9" },
"vim-fugitive": { "branch": "master", "commit": "3b753cf8c6a4dcde6edee8827d464ba9b8c4a6f0" },
"vim-gnupg": { "branch": "main", "commit": "f9b608f29003dfde6450931dc0f495a912973a88" },
"vim-grammarous": { "branch": "master", "commit": "db46357465ce587d5325e816235b5e92415f8c05" },
"vim-oscyank": { "branch": "main", "commit": "d67d76b2f19b868b70a1cf33a779d71dc092cb30" },
"vim-pandoc": { "branch": "master", "commit": "c31d5c10b29c99cf1a344ae30e2ffa32cf2df743" },
"vim-pandoc-after": { "branch": "master", "commit": "26513a138d5e2ba8c785e0d7dfec0218e983e9dd" },
"vim-pandoc-syntax": { "branch": "master", "commit": "87929100f2497da82f19180ffa49e75a88e7c369" },
"vim-repeat": { "branch": "master", "commit": "65846025c15494983dafe5e3b46c8f88ab2e9635" },
"vim-sort-motion": { "branch": "master", "commit": "c8782be8f7da414c6442b3ba4b6abb0345d392d9" },
"vim-speeddating": { "branch": "master", "commit": "c17eb01ebf5aaf766c53bab1f6592710e5ffb796" },
"vim-startuptime": { "branch": "master", "commit": "5f33e50f1e2e2a80370c9094e4c303ea54cd2aea" },
"vim-surround": { "branch": "master", "commit": "3d188ed2113431cf8dac77be61b842acb64433d9" },
"vim-table-mode": { "branch": "master", "commit": "bb025308a45c67c7c8f0763ba37bc2ee3f534df0" },
"vim-titlecase": { "branch": "master", "commit": "69a697c54a08ca5603cb757b4d4f78cd4b567549" },
"vim-visual-increment": { "branch": "master", "commit": "0e55bb4054cdd5eefc0bb870f3e3c249673817cb" },
"vim-zenroom2": { "branch": "master", "commit": "b13d40d166e38236dfa9ffe63b394353e9804b52" },
"vim-zettel": { "branch": "master", "commit": "554d16bf65b04ae86b92db08a44b4fbcbc31023f" },
"vimwiki": { "branch": "master", "commit": "d5a01b4dfbcdb4d1e2eefc3ea26455b429ed72de" },
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }
}
181 changes: 181 additions & 0 deletions .config/nvim/lua/tstapler/autocmds.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
-- FileType indent autocmds ported from the legacy .vimrc.
--
-- The global `au FileType,BufRead,BufNewFile *.md set filetype=mkd spell`
-- autocmd (the markdown/vimwiki race) is intentionally NOT ported — it is
-- gone for good. Phase 7 handles the correct wiki-scoped replacement in a
-- different file. See Epic 1.2 in
-- project_plans/neovim-hardening/implementation/plan.md.
--
-- The vim-oscyank TextYankPost autocmd is also NOT ported here — it moves to
-- lua/tstapler/plugins/editing.lua, colocated with the vim-oscyank plugin
-- spec (Task 1.7.5a).

vim.api.nvim_create_autocmd("FileType", {
pattern = "docker-compose",
callback = function()
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.expandtab = true
vim.opt_local.smarttab = true
end,
})

vim.api.nvim_create_autocmd("FileType", {
pattern = "typescript",
callback = function()
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.expandtab = true
vim.opt_local.smarttab = true
vim.opt_local.smartindent = true
end,
})

vim.api.nvim_create_autocmd("FileType", {
pattern = "make",
callback = function()
vim.opt_local.expandtab = false
end,
})

vim.api.nvim_create_autocmd("FileType", {
pattern = "python",
callback = function()
vim.opt_local.tabstop = 4
vim.opt_local.shiftwidth = 4
vim.opt_local.softtabstop = 4
vim.opt_local.expandtab = true
vim.opt_local.smarttab = true
end,
})

vim.api.nvim_create_autocmd("FileType", {
pattern = "javascript",
callback = function()
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.expandtab = true
end,
})

vim.api.nvim_create_autocmd("FileType", {
pattern = "go",
callback = function()
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.expandtab = true
end,
})

vim.api.nvim_create_autocmd("FileType", {
pattern = "ruby",
callback = function()
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.expandtab = true
vim.opt_local.smartindent = true
end,
})

vim.api.nvim_create_autocmd("FileType", {
pattern = "java",
callback = function()
vim.opt_local.tabstop = 4
vim.opt_local.shiftwidth = 4
vim.opt_local.softtabstop = 4
vim.opt_local.expandtab = true
end,
})

vim.api.nvim_create_autocmd("FileType", {
pattern = "vim",
callback = function()
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.expandtab = true
end,
})

vim.api.nvim_create_autocmd("FileType", {
pattern = "yml",
callback = function()
vim.opt_local.indentkeys:remove("<:>")
vim.opt_local.tabstop = 2
vim.opt_local.softtabstop = 2
vim.opt_local.expandtab = true
end,
})

vim.api.nvim_create_autocmd("FileType", {
pattern = "fish",
callback = function()
vim.opt_local.textwidth = 79
vim.opt_local.foldmethod = "expr"
end,
})

vim.api.nvim_create_autocmd("FileType", {
pattern = "c",
callback = function()
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.expandtab = true
end,
})

vim.api.nvim_create_autocmd("FileType", {
pattern = "sh",
callback = function()
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.expandtab = true
vim.opt_local.smartindent = true
end,
})

vim.api.nvim_create_autocmd("FileType", {
pattern = "haproxy",
callback = function()
vim.opt_local.tabstop = 4
vim.opt_local.shiftwidth = 4
vim.opt_local.softtabstop = 4
vim.opt_local.expandtab = true
vim.opt_local.smartindent = true
end,
})

vim.api.nvim_create_autocmd("FileType", {
pattern = "dart",
callback = function()
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.expandtab = true
vim.opt_local.smarttab = true
end,
})

vim.api.nvim_create_autocmd("FileType", {
pattern = "html",
callback = function()
vim.opt_local.tabstop = 2
vim.opt_local.shiftwidth = 2
vim.opt_local.softtabstop = 2
vim.opt_local.expandtab = true
end,
})

-- Yank the current buffer's filename (relative path) into the system
-- clipboard register. Ported from .vimrc.dein 185-189; has no plugin
-- dependency so it lives here rather than in plugins/editing.lua.
function _G.YankBufferFilename()
vim.fn.setreg("+", vim.fn.expand("%"))
end
Loading
Loading