Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
89e4b75
ci: add headless config smoke test
qapquiz Jun 18, 2026
5d6c947
fix: correct flash treesitter_search keymap typo
qapquiz Jun 18, 2026
b021096
fix: use correct nvim-lint 'biome' linter name and honor configured e…
qapquiz Jun 18, 2026
66923ac
fix: scope jdtls LSP keymaps to args.buf in LspAttach
qapquiz Jun 18, 2026
f5c7d00
docs: fix stale colorscheme and sidekick fork in README
qapquiz Jun 18, 2026
bd19732
fix: apply rustaceanvim <leader>ca after generic LSP keymaps
qapquiz Jun 18, 2026
a1c7abf
fix: move LSP signature help to insert mode to free <C-k> for tmux
qapquiz Jun 18, 2026
e262471
fix: include AGENTS.md in 99 md_files for repo context
qapquiz Jun 18, 2026
d9a6fcc
style: add desc to 99 and toggleterm keymaps
qapquiz Jun 18, 2026
be48dcc
docs: add improvement plans (001-010) and index
qapquiz Jun 18, 2026
3e2da8a
fix: move LSP signature help to gK, restore <C-k> for tmux-nav
qapquiz Jun 18, 2026
c343dc6
docs: add plan 011 (gK signature help, supersedes 007)
qapquiz Jun 18, 2026
e0721d5
perf: lazy-load amp/bufferline, drop redundant rustaceanvim lazy, ena…
qapquiz Jun 18, 2026
2f10ac4
docs: add plan 012 (lazy-load + native virtual_lines)
qapquiz Jun 18, 2026
a5fddf1
refactor: tier diagnostic display (signs/underline/current-line virtu…
qapquiz Jun 20, 2026
2afa5c7
refactor: move LSP server configs to lsp/ files via native wildcard d…
qapquiz Jun 20, 2026
98f2e3a
docs: add plans 013 (lsp restructure) + 014 (tiered diagnostics)
qapquiz Jun 20, 2026
c28a188
fix: resolve ts_ls Vue plugin path per-attach via before_init
qapquiz Jun 20, 2026
28819ec
docs: add plan 015 (ts_ls Vue per-attach path); mark N2 fixed
qapquiz Jun 20, 2026
daac270
fix: switch JS/TS lint+format to oxc stack (oxlint + oxfmt), fixes bi…
qapquiz Jun 20, 2026
dc07cae
docs: add plan 016 (oxc stack); mark 003 superseded, TECH-7 resolved
qapquiz Jun 20, 2026
3934b32
feat: add oxlint to MasonInstallAll
qapquiz Jun 20, 2026
4e01b02
feat: add Python support via astral stack (ruff + ty)
qapquiz Jun 20, 2026
93770d8
docs: add plan 017 (Python astral stack)
qapquiz Jun 20, 2026
75349f0
chore: remove leftover commented svelte treesitter entry
qapquiz Jun 20, 2026
83215fa
fix: set conceallevel globally instead of on transient startup buffer
qapquiz Jun 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
26 changes: 26 additions & 0 deletions .github/workflows/smoke.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: smoke

on:
push:
pull_request:

jobs:
smoke:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Install Neovim
uses: rhysd/action-setup-vim@v1
with:
neovim: true
version: stable

- name: Install plugins (lazy.nvim)
run: |
ISOLATED="$(mktemp -d)"
ln -s "$PWD" "$ISOLATED/nvim"
XDG_CONFIG_HOME="$ISOLATED" nvim --headless "+Lazy! sync" +qa

- name: Smoke test
run: scripts/smoke.sh
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ git clone https://github.com/baseddxyz/BASEDDvim.git ~/.config/nvim

### AI & Code Completion
- **[supermaven-nvim](https://github.com/supermaven-inc/supermaven-nvim)** - AI-powered inline code completion
- **[sidekick.nvim](https://github.com/qapquiz/sidekick.nvim)** - CLI integration for AI tools (Claude, etc.)
- **[sidekick.nvim](https://github.com/folke/sidekick.nvim)** - CLI integration for AI tools (Claude, etc.)
- **[amp.nvim](https://github.com/sourcegraph/amp.nvim)** - Sourcegraph's AI code assistant
- **[99](https://github.com/ThePrimeagen/99)** - AI-powered code refactoring with SKILL.md support

### Editor UI & Theme
- **[bufferline.nvim](https://github.com/akinsho/bufferline.nvim)** - Buffer tabline
- **[monokai-pro.nvim](https://github.com/gthelding/monokai-pro.nvim)** - Monokai Pro colorscheme (machine filter)
- **[gruvbox.nvim](https://github.com/ellisonleao/gruvbox.nvim)** - Gruvbox colorscheme
- **[smear-cursor.nvim](https://github.com/sphamba/smear-cursor.nvim)** - Smooth cursor animation
- **[trouble.nvim](https://github.com/folke/trouble.nvim)** - Pretty diagnostics, references, and more

Expand Down Expand Up @@ -101,7 +101,7 @@ git clone https://github.com/baseddxyz/BASEDDvim.git ~/.config/nvim
| `gi` | n | Go to implementation |
| `gr` | n | Find references |
| `K` | n | Hover documentation |
| `<C-k>` | n | Signature help |
| `gK` | n | Signature help |
| `<leader>D` | n | Go to type definition |
| `<leader>ca` | n, v | Code action |
| `<leader>rn` | n | Rename |
Expand Down
4 changes: 4 additions & 0 deletions after/ftplugin/markdown.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
-- Markdown filetype config. Borrowed from baseddxyz/paketo.
-- Establishes the after/ftplugin/ pattern for per-filetype settings.
vim.cmd("setlocal spell wrap")
vim.cmd("setlocal foldmethod=expr foldexpr=v:lua.vim.treesitter.foldexpr()")
42 changes: 21 additions & 21 deletions lazy-lock.json
Original file line number Diff line number Diff line change
@@ -1,39 +1,39 @@
{
"99": { "branch": "master", "commit": "4d229141546290746c82ac90f5afc2786865b5f3" },
"amp.nvim": { "branch": "main", "commit": "3b9ad5ef0328de1b35cc9bfa723a37db5daf9434" },
"99": { "branch": "master", "commit": "c17422457027c913c76c75a921fca1e623d2678e" },
"amp.nvim": { "branch": "main", "commit": "b851d97d8e8782e58343608d8de7d9eb3a88090f" },
"blink.cmp": { "branch": "main", "commit": "78336bc89ee5365633bcf754d93df01678b5c08f" },
"blink.compat": { "branch": "main", "commit": "1454f14a8d855a578ceeba77c62538fa1459a67c" },
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
"conform.nvim": { "branch": "master", "commit": "dca1a190aa85f9065979ef35802fb77131911106" },
"conform.nvim": { "branch": "master", "commit": "619363c30309d29ffa631e67c8183f2a72caa373" },
"flash.nvim": { "branch": "main", "commit": "fcea7ff883235d9024dc41e638f164a450c14ca2" },
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
"gruvbox.nvim": { "branch": "main", "commit": "154eb5ff5b96d0641307113fa385eaf0d36d9796" },
"img-clip.nvim": { "branch": "main", "commit": "b6ddfb97b5600d99afe3452d707444afda658aca" },
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
"lazydev.nvim": { "branch": "main", "commit": "ff2cbcba459b637ec3fd165a2be59b7bbaeedf0d" },
"luvit-meta": { "branch": "main", "commit": "cc9b2d412d2fbd30b94a70cfc214c2a3be27a0a2" },
"mason.nvim": { "branch": "main", "commit": "e54f5bf5f12c560da31c17eee5b3e1bd369f3ff9" },
"mini.ai": { "branch": "main", "commit": "a783ce6e1a5b3bc90519f20b51f4a5f6702734af" },
"mini.basics": { "branch": "main", "commit": "9ad4ffe62474f5f82c88d3b745f47581c51ba592" },
"mini.comment": { "branch": "main", "commit": "fc87ba6554f182161d9a4bab5017c575571f000f" },
"mini.diff": { "branch": "main", "commit": "117c301374ab8546891e2b34f63885ea83527432" },
"mini.files": { "branch": "main", "commit": "f9f0ccbef0fd24eaddc8675accca83fa1f310c3f" },
"mini.icons": { "branch": "main", "commit": "9c7b1b90b15bdd69c52f6e31889dbc9987c30ec4" },
"mini.notify": { "branch": "main", "commit": "ef35a3ec68399398f097d0c1736c343a45cb7406" },
"mini.nvim": { "branch": "main", "commit": "17c448b0f3f29c0857a3436fc64e1d7cb9267ec3" },
"mini.pairs": { "branch": "main", "commit": "30cf2f01c4aaa2033db67376b9924fa2442c05d6" },
"mini.starter": { "branch": "main", "commit": "35b018a035794e341ac01cb2091bbd71b3f823d0" },
"mini.statusline": { "branch": "main", "commit": "e9e5c147385e5e0310ab79162dd08d0465e96d83" },
"mini.trailspace": { "branch": "main", "commit": "ae2fd422564c6e781caf6545355ca6051e20fa26" },
"nvim-jdtls": { "branch": "master", "commit": "77ccaeb422f8c81b647605da5ddb4a7f725cda90" },
"nvim-lint": { "branch": "master", "commit": "665525810630701b84181e4d9eefd24b49845b29" },
"nvim-lspconfig": { "branch": "master", "commit": "75e49cfa588a89ca667d767c0afef3ceac205faa" },
"mason.nvim": { "branch": "main", "commit": "2a6940af80375532e5e9e7c1f2fc6319a1b7a69d" },
"mini.ai": { "branch": "main", "commit": "d73c36349aa7b0bab5f77ad71701a1d42211a1df" },
"mini.basics": { "branch": "main", "commit": "b5be271ebe862ca0570e450976799554e585d16e" },
"mini.comment": { "branch": "main", "commit": "4677392f091e8b5c18d4b535130220a6d1da4aca" },
"mini.diff": { "branch": "main", "commit": "0743d26bd858ebe32efcf5c86a91a422a000f273" },
"mini.files": { "branch": "main", "commit": "a5689dae6b732955e33eec225b798d6815063179" },
"mini.icons": { "branch": "main", "commit": "e56797f90192d81f1fda02e662fc3e8e3d775027" },
"mini.notify": { "branch": "main", "commit": "7d3832e369853eaf1a2d25dede9db34ae5a809e9" },
"mini.nvim": { "branch": "main", "commit": "fe1aa97c8c7408f3def6336f7082237e8cf67833" },
"mini.pairs": { "branch": "main", "commit": "4a014143fcb4e9df26198ccb3ecff3b9e77a048c" },
"mini.starter": { "branch": "main", "commit": "0575c96206d63fd98d7f786df78dc225bf847d95" },
"mini.statusline": { "branch": "main", "commit": "b5547f44560dae3ccd81f914256fa6f705837022" },
"mini.trailspace": { "branch": "main", "commit": "22653218f1aedc9bf306c8b4e8ec2c8a575f6fae" },
"nvim-jdtls": { "branch": "master", "commit": "6e9d953f0b82bccdb834cfde0e893f3119c22592" },
"nvim-lint": { "branch": "master", "commit": "01c9842c089069ab497430159312b2c8868a4590" },
"nvim-lspconfig": { "branch": "master", "commit": "bfcc0171a43f22afa61d927ffe9fcb6cb85dc99e" },
"nvim-treesitter": { "branch": "main", "commit": "4916d6592ede8c07973490d9322f187e07dfefac" },
"nvim-web-devicons": { "branch": "master", "commit": "2795c26c916bb3c57dde308b82be51971fa92747" },
"nvim-web-devicons": { "branch": "master", "commit": "dfbfaa967a6f7ec50789bead7ef87e336c1fa63c" },
"rustaceanvim": { "branch": "master", "commit": "d50597d482a6f44ddfc54d1af2f69f052053b4de" },
"sidekick.nvim": { "branch": "main", "commit": "208e1c5b8170c01fd1d07df0139322a76479b235" },
"smear-cursor.nvim": { "branch": "main", "commit": "9e9378d6ee34bb3782e0e8c63d9ec8ca618b479b" },
"snacks.nvim": { "branch": "main", "commit": "ad9ede6a9cddf16cedbd31b8932d6dcdee9b716e" },
"snacks.nvim": { "branch": "main", "commit": "882c996cf28183f4d63640de0b4c02ec886d01f2" },
"supermaven-nvim": { "branch": "main", "commit": "07d20fce48a5629686aefb0a7cd4b25e33947d50" },
"toggleterm.nvim": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" },
"trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" },
Expand Down
2 changes: 2 additions & 0 deletions lsp/gopls.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- gopls config. Shared on_attach + capabilities come from the wildcard default.
return {}
5 changes: 5 additions & 0 deletions lsp/lua_ls.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
-- lua_ls (lua-language-server) config.
-- Shared on_attach + capabilities come from the wildcard default set in
-- lua/plugins/lspconfig.lua. Add LuaLS-specific settings here as needed.
-- See :h vim.lsp.Config for available fields.
return {}
2 changes: 2 additions & 0 deletions lsp/ruby_lsp.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- ruby_lsp config. Shared on_attach + capabilities come from the wildcard default.
return {}
16 changes: 16 additions & 0 deletions lsp/ruff.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
-- ruff (Astral's Python linter) LSP config.
-- Base config (cmd, filetypes, root_markers) comes from nvim-lspconfig's
-- shipped lsp/ruff.lua — this file only overrides what differs.
-- Shared on_attach + capabilities come from the wildcard default in
-- lua/plugins/lspconfig.lua.
--
-- Disable ruff LSP's organizeImports so it doesn't conflict with conform's
-- ruff_organize_imports formatter (the single source of truth for import
-- sorting on save). ruff still provides lint diagnostics + code actions.
return {
init_options = {
settings = {
organizeImports = false,
},
},
}
63 changes: 63 additions & 0 deletions lsp/ts_ls.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
-- ts_ls (typescript-language-server) config, with @vue/typescript-plugin for .vue support.
-- Shared on_attach + capabilities come from the wildcard default set in
-- lua/plugins/lspconfig.lua.
--
-- The Vue plugin `location` is resolved PER-ATTACH in before_init from the
-- workspace root the LSP client already computed (params.rootUri), NOT frozen
-- at config load. This fixes N2: the old code used vim.fn.getcwd() at load
-- time, which froze the path to the launch dir and broke .vue support when
-- opening a different project or after :cd.
return {
filetypes = {
"javascript",
"javascriptreact",
"typescript",
"typescriptreact",
"vue",
},
-- Static plugin scaffolding; the `location` is injected per-attach below.
init_options = {
plugins = {},
},
-- Mutate params.initializationOptions (NOT config.init_options): params is
-- the actual initialize payload sent to the server, and mutating it is
-- per-attach (config is shared across attaches; mutating it would leak).
before_init = function(params, config)
-- Reuse the workspace root the client already resolved. Prefer rootUri
-- (file:// URI), fall back to rootPath (deprecated but present).
local root
if params.rootUri then
root = vim.uri_to_fname(params.rootUri)
elseif params.rootPath then
root = params.rootPath
end
if not root or root == "" then
return
end

-- Only inject the Vue plugin if it's actually installed in this project
-- (check package.json, not just the dir — a failed npm install can leave
-- an empty dir). Plain JS/TS projects without Vue skip this cleanly.
local plugin_path = root .. "/node_modules/@vue/typescript-plugin"
local marker = plugin_path .. "/package.json"
if vim.fn.filereadable(marker) ~= 1 then
return
end

-- Defensive: ensure the plugins table exists on the params being sent.
params.initializationOptions = params.initializationOptions or {}
params.initializationOptions.plugins = params.initializationOptions.plugins or {}

table.insert(params.initializationOptions.plugins, {
name = "@vue/typescript-plugin",
location = plugin_path,
languages = {
"javascript",
"javascriptreact",
"typescript",
"typescriptreact",
"vue",
},
})
end,
}
2 changes: 1 addition & 1 deletion lua/keymaps.lua
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ function M.lsp(opts)
{ "n", "gd", vim.lsp.buf.definition, opts },
{ "n", "K", vim.lsp.buf.hover, opts },
{ "n", "gi", vim.lsp.buf.implementation, opts },
{ "n", "<C-k>", vim.lsp.buf.signature_help, opts },
{ "n", "gK", vim.lsp.buf.signature_help, opts },
{ "n", "<leader>D", vim.lsp.buf.type_definition, opts },
{ "n", "<leader>rn", vim.lsp.buf.rename, opts },
{ { "n", "v" }, "<leader>ca", vim.lsp.buf.code_action, opts },
Expand Down
11 changes: 6 additions & 5 deletions lua/plugins/ai.lua
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ return configs.ai
{
"sourcegraph/amp.nvim",
branch = "main",
lazy = false,
cmd = { "Amp" },
opts = { auto_start = true, log_level = "info" },
},
-- keys = {
Expand Down Expand Up @@ -368,14 +368,15 @@ return configs.ai
--- /foo/AGENT.md
--- assuming that /foo is project root (based on cwd)
md_files = {
"AGENTS.md",
"AGENT.md",
},
})

-- Create your own short cuts for the different types of actions
vim.keymap.set("n", "<leader>9f", function()
_99.fill_in_function()
end)
end, { desc = "99: Fill in function" })
-- take extra note that i have visual selection only in v mode
-- technically whatever your last visual selection is, will be used
-- so i have this set to visual mode so i dont screw up and use an
Expand All @@ -385,20 +386,20 @@ return configs.ai
-- so just prepare for it now
vim.keymap.set("v", "<leader>9v", function()
_99.visual()
end)
end, { desc = "99: Visual selection" })

--- if you have a request you dont want to make any changes, just cancel it
vim.keymap.set("v", "<leader>9s", function()
_99.stop_all_requests()
end)
end, { desc = "99: Stop all requests" })

--- Example: Using rules + actions for custom behaviors
--- Create a rule file like ~/.rules/debug.md that defines custom behavior.
--- For instance, a "debug" rule could automatically add printf statements
--- throughout a function to help debug its execution flow.
vim.keymap.set("n", "<leader>9fd", function()
_99.fill_in_function()
end)
end, { desc = "99: Fill in function (debug rule)" })
end,
},
}
Expand Down
1 change: 1 addition & 0 deletions lua/plugins/bufferline.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ return {
{
'akinsho/bufferline.nvim',
version = "*",
event = 'VimEnter',
dependencies = 'nvim-tree/nvim-web-devicons',
config = function ()
vim.opt.termguicolors = true
Expand Down
2 changes: 1 addition & 1 deletion lua/plugins/flash.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ return {
{ 's', mode = {'n', 'x', 'o'}, function() require('flash').jump() end, desc = 'Flash' },
{ 'S', mode = {'n', 'x', 'o'}, function() require('flash').treesitter() end, desc = 'Flash Treesitter' },
{ 'r', mode = {'o'}, function() require('flash').remote() end, desc = 'Remote Flash' },
{ 'R', mode = {'o', 'x'}, function() require('flash').tresitter_search() end, desc = 'Treesitter Search' },
{ 'R', mode = {'o', 'x'}, function() require('flash').treesitter_search() end, desc = 'Treesitter Search' },
{ '<c-s>', mode = {'c'}, function() require('flash').toggle() end, desc = 'Toggle Flash Search' },
},
}
Expand Down
4 changes: 2 additions & 2 deletions lua/plugins/java.lua
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,8 @@ return {
local client = vim.lsp.get_client_by_id(args.data.client_id)
if client and client.name == "jdtls" then
local keymaps = require("keymaps")
keymaps.lsp({ buffer = bufnr })
keymaps.lsp_format({ buffer = bufnr })
keymaps.lsp({ buffer = args.buf })
keymaps.lsp_format({ buffer = args.buf })

-- User can set additional keymaps in opts.on_attach
if opts.on_attach then
Expand Down
Loading
Loading