Compare commits
3 Commits
859cfc3793
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 17a2b4d25b | |||
|
58fc3e53ac
|
|||
|
7f9c380eaa
|
@@ -11,7 +11,7 @@ A modern, modular, and high-performance Neovim configuration built from scratch
|
|||||||
- **Phased Loading**: Async, non-blocking startup using a phased `VimEnter` queue for a snappy experience.
|
- **Phased Loading**: Async, non-blocking startup using a phased `VimEnter` queue for a snappy experience.
|
||||||
- **Unified Registry**: Configuration is managed via a global `_G.Config` registry, ensuring cross-plugin consistency.
|
- **Unified Registry**: Configuration is managed via a global `_G.Config` registry, ensuring cross-plugin consistency.
|
||||||
- **High Performance**: Featuring **blink.cmp** (Rust-based completion) and optimized **Snacks.nvim** components.
|
- **High Performance**: Featuring **blink.cmp** (Rust-based completion) and optimized **Snacks.nvim** components.
|
||||||
- **AI-Powered**: Native integration with the **GitHub Copilot Language Server**.
|
- **AI-Powered**: Native integration with **GitHub Copilot** — inline completions via **blink-copilot** and multi-line refactoring via **Sidekick.nvim** Next Edit Suggestions (NES).
|
||||||
- **User-Centric QoL**: Hybrid line numbers, autosave-on-edit, and seamless system clipboard integration.
|
- **User-Centric QoL**: Hybrid line numbers, autosave-on-edit, and seamless system clipboard integration.
|
||||||
- **Resilient & Portable**: Intelligent terminal title management (Kitty + Fallback), automatic project root detection, and machine-local override support.
|
- **Resilient & Portable**: Intelligent terminal title management (Kitty + Fallback), automatic project root detection, and machine-local override support.
|
||||||
- **Lean & Readable**: ~850 lines of Lua code (excluding comments and blanks).
|
- **Lean & Readable**: ~850 lines of Lua code (excluding comments and blanks).
|
||||||
@@ -50,13 +50,15 @@ The configuration is strictly modular:
|
|||||||
- **Gx.nvim**: Smart URL/reference opener under cursor.
|
- **Gx.nvim**: Smart URL/reference opener under cursor.
|
||||||
- **Comment-box**: Decorative comment boxes and lines.
|
- **Comment-box**: Decorative comment boxes and lines.
|
||||||
- **Undotree**: Visual undo history browser.
|
- **Undotree**: Visual undo history browser.
|
||||||
|
- **Haunt.nvim**: In-buffer annotation and bookmark manager. Integrates with the Snacks picker for browsing bookmarks and exposes `haunt_all` / `haunt_buffer` prompt contexts to Sidekick AI sessions.
|
||||||
- **Zen Mode**: Distraction-free editing.
|
- **Zen Mode**: Distraction-free editing.
|
||||||
- **Qalc**: Inline calculator via `qalculate`.
|
- **Qalc**: Inline calculator via `qalculate`.
|
||||||
|
|
||||||
### LSP & Completion
|
### LSP & Completion
|
||||||
- **Blink.cmp** + **blink.lib**: High-performance Rust-based completion. Auto-detects binary across install layouts; falls back gracefully if unavailable. Rebuilds automatically on `PackChanged`.
|
- **Blink.cmp** + **blink.lib**: High-performance Rust-based completion. Auto-detects binary across install layouts; falls back gracefully if unavailable. Rebuilds automatically on `PackChanged`.
|
||||||
|
- **blink-copilot**: Surfaces GitHub Copilot inline suggestions inside the blink.cmp completion menu.
|
||||||
|
- **Sidekick.nvim**: AI assistant providing Next Edit Suggestions (NES) for multi-line refactoring via the Copilot LSP, plus an integrated AI CLI terminal (`<leader>aa`) with context-aware prompts. Snacks picker integration sends selections to the active AI session via `<Alt-a>`.
|
||||||
- **LSPConfig + Mason**: Managed LSP support for Lua, C/C++, Rust, Python, Fish, and Shell.
|
- **LSPConfig + Mason**: Managed LSP support for Lua, C/C++, Rust, Python, Fish, and Shell.
|
||||||
- **Copilot**: GitHub Copilot language server integration.
|
|
||||||
- **Conform**: Formatter with format-on-save and range formatting.
|
- **Conform**: Formatter with format-on-save and range formatting.
|
||||||
- **Inc-rename**: Incremental LSP rename with live preview.
|
- **Inc-rename**: Incremental LSP rename with live preview.
|
||||||
- **Lazydev**: Neovim Lua type definitions for `lua_ls`.
|
- **Lazydev**: Neovim Lua type definitions for `lua_ls`.
|
||||||
@@ -108,7 +110,7 @@ nvim
|
|||||||
|
|
||||||
1. **Build Blink**: Completion auto-rebuilds on `PackChanged`. If it still isn't working, run `cargo build --release` inside `~/.local/share/nvim/site/pack/core/opt/blink.cmp`.
|
1. **Build Blink**: Completion auto-rebuilds on `PackChanged`. If it still isn't working, run `cargo build --release` inside `~/.local/share/nvim/site/pack/core/opt/blink.cmp`.
|
||||||
2. **LSP Servers**: Run `:Mason` to monitor the installation of Language Servers.
|
2. **LSP Servers**: Run `:Mason` to monitor the installation of Language Servers.
|
||||||
3. **Copilot**: Run `:LspCopilotSignIn` to authenticate.
|
3. **Copilot**: Run `:LspCopilotSignIn` to authenticate, then `:checkhealth sidekick` to verify the Sidekick NES integration is working.
|
||||||
|
|
||||||
### Machine-Local Overrides
|
### Machine-Local Overrides
|
||||||
|
|
||||||
@@ -131,6 +133,15 @@ Place machine-specific or secret configuration in `~/.config/.user-dots/nvim/loc
|
|||||||
| `s` / `S` | Leap Motion (Normal/Window) |
|
| `s` / `S` | Leap Motion (Normal/Window) |
|
||||||
| `ys` / `ds` / `cs` | Surround (Add/Delete/Change) |
|
| `ys` / `ds` / `cs` | Surround (Add/Delete/Change) |
|
||||||
| `gx` / `gX` | Open URL under cursor (Gx.nvim) |
|
| `gx` / `gX` | Open URL under cursor (Gx.nvim) |
|
||||||
|
| `<Tab>` | Advance snippet → apply NES suggestion → fallback |
|
||||||
|
| `<leader>aa` | Toggle Sidekick AI CLI terminal |
|
||||||
|
| `<leader>as` | Select AI tool (Sidekick) |
|
||||||
|
| `<Alt-a>` *(picker)* | Send picker selection to active AI CLI session |
|
||||||
|
| `<leader>ha` | Annotate current position (Haunt) |
|
||||||
|
| `<leader>ht` | Toggle annotation visibility (Haunt) |
|
||||||
|
| `<leader>hd` | Delete bookmark (Haunt) |
|
||||||
|
| `<leader>hn` / `<leader>hp` | Next / Previous bookmark (Haunt) |
|
||||||
|
| `<leader>hl` | Browse all bookmarks in picker (Haunt) |
|
||||||
| `<leader>cbb` | Create Centered Comment Box |
|
| `<leader>cbb` | Create Centered Comment Box |
|
||||||
| `<leader>cbl` | Create Centered Comment Line |
|
| `<leader>cbl` | Create Centered Comment Line |
|
||||||
| `<leader>cbd` | Delete Comment Box/Line |
|
| `<leader>cbd` | Delete Comment Box/Line |
|
||||||
|
|||||||
@@ -331,3 +331,25 @@ end, { desc = "Restore Last Session" })
|
|||||||
vim.keymap.set("n", "<leader>qd", function()
|
vim.keymap.set("n", "<leader>qd", function()
|
||||||
require("persistence").stop()
|
require("persistence").stop()
|
||||||
end, { desc = "Don't Save Current Session" })
|
end, { desc = "Don't Save Current Session" })
|
||||||
|
|
||||||
|
----------------------------------------------------------
|
||||||
|
|
||||||
|
-- Haunt Keymaps
|
||||||
|
vim.keymap.set("n", "<leader>ha", function()
|
||||||
|
require("haunt.api").annotate()
|
||||||
|
end, { desc = "Annotate" })
|
||||||
|
vim.keymap.set("n", "<leader>ht", function()
|
||||||
|
require("haunt.api").toggle_annotation()
|
||||||
|
end, { desc = "Toggle Annotation" })
|
||||||
|
vim.keymap.set("n", "<leader>hd", function()
|
||||||
|
require("haunt.api").delete()
|
||||||
|
end, { desc = "Delete Bookmark" })
|
||||||
|
vim.keymap.set("n", "<leader>hn", function()
|
||||||
|
require("haunt.api").next()
|
||||||
|
end, { desc = "Next Bookmark" })
|
||||||
|
vim.keymap.set("n", "<leader>hp", function()
|
||||||
|
require("haunt.api").prev()
|
||||||
|
end, { desc = "Previous Bookmark" })
|
||||||
|
vim.keymap.set("n", "<leader>hl", function()
|
||||||
|
require("haunt.picker").show()
|
||||||
|
end, { desc = "Show Bookmark Picker" })
|
||||||
|
|||||||
+54
-1
@@ -56,6 +56,7 @@ Config.plugins.snacks = {
|
|||||||
keys = {
|
keys = {
|
||||||
["<a-s>"] = { "flash", mode = { "n", "i" } },
|
["<a-s>"] = { "flash", mode = { "n", "i" } },
|
||||||
["s"] = { "flash" },
|
["s"] = { "flash" },
|
||||||
|
["<a-a>"] = { "sidekick_send", mode = { "n", "i" } },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -78,6 +79,9 @@ Config.plugins.snacks = {
|
|||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
|
sidekick_send = function(...)
|
||||||
|
return require("sidekick.cli.picker.snacks").send(...)
|
||||||
|
end,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
notifier = { enabled = true },
|
notifier = { enabled = true },
|
||||||
@@ -281,7 +285,19 @@ lazyload.on_vim_enter(function()
|
|||||||
|
|
||||||
-- 3. Blink.cmp setup
|
-- 3. Blink.cmp setup
|
||||||
require("blink.cmp").setup({
|
require("blink.cmp").setup({
|
||||||
keymap = { preset = "default" },
|
keymap = {
|
||||||
|
preset = "default",
|
||||||
|
["<Tab>"] = {
|
||||||
|
"snippet_forward",
|
||||||
|
function()
|
||||||
|
return require("sidekick").nes_jump_or_apply()
|
||||||
|
end,
|
||||||
|
function()
|
||||||
|
return vim.lsp.inline_completion.get()
|
||||||
|
end,
|
||||||
|
"fallback",
|
||||||
|
},
|
||||||
|
},
|
||||||
appearance = {
|
appearance = {
|
||||||
use_nvim_cmp_as_default = true,
|
use_nvim_cmp_as_default = true,
|
||||||
nerd_font_variant = "mono",
|
nerd_font_variant = "mono",
|
||||||
@@ -445,10 +461,47 @@ lazyload.on_vim_enter(function()
|
|||||||
inc_rename = true, -- enables an input dialog for inc-rename.nvim
|
inc_rename = true, -- enables an input dialog for inc-rename.nvim
|
||||||
lsp_doc_border = false, -- add a border to hover docs and signature help
|
lsp_doc_border = false, -- add a border to hover docs and signature help
|
||||||
},
|
},
|
||||||
|
routes = {
|
||||||
|
{
|
||||||
|
filter = { event = "lsp", kind = "progress", find = "Loading workspace" },
|
||||||
|
opts = { skip = true },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
filter = { event = "lsp", kind = "progress", find = "^Diagnosing" },
|
||||||
|
opts = { skip = true },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
filter = { event = "lsp", kind = "progress", find = "semantic tokens" },
|
||||||
|
opts = { skip = true },
|
||||||
|
},
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Kitty Scrollback
|
-- Kitty Scrollback
|
||||||
vim.pack.add({ { src = "https://github.com/mikesmithgh/kitty-scrollback.nvim", name = "kitty-scrollback" } })
|
vim.pack.add({ { src = "https://github.com/mikesmithgh/kitty-scrollback.nvim", name = "kitty-scrollback" } })
|
||||||
Config.plugins.kitty_scrollback = {}
|
Config.plugins.kitty_scrollback = {}
|
||||||
require("kitty-scrollback").setup(Config.plugins.kitty_scrollback)
|
require("kitty-scrollback").setup(Config.plugins.kitty_scrollback)
|
||||||
|
|
||||||
|
-- Haunt.nvim
|
||||||
|
vim.pack.add({ { src = "https://github.com/TheNoeTrevino/haunt.nvim", name = "haunt" } })
|
||||||
|
Config.plugins.haunt = {
|
||||||
|
picker = "snacks",
|
||||||
|
}
|
||||||
|
require("haunt").setup(Config.plugins.haunt)
|
||||||
|
|
||||||
|
-- Sidekick.nvim
|
||||||
|
vim.pack.add({ { src = "https://github.com/folke/sidekick.nvim", name = "sidekick" } })
|
||||||
|
Config.plugins.sidekick = {
|
||||||
|
cli = {
|
||||||
|
prompts = {
|
||||||
|
haunt_all = function()
|
||||||
|
return require("haunt.sidekick").get_locations()
|
||||||
|
end,
|
||||||
|
haunt_buffer = function()
|
||||||
|
return require("haunt.sidekick").get_locations({ current_buffer = true })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
require("sidekick").setup(Config.plugins.sidekick)
|
||||||
end)
|
end)
|
||||||
|
|||||||
@@ -56,6 +56,10 @@
|
|||||||
"rev": "ba9c408fc0130fc4548760c3933a81b58fc50de8",
|
"rev": "ba9c408fc0130fc4548760c3933a81b58fc50de8",
|
||||||
"src": "https://github.com/chrishrb/gx.nvim"
|
"src": "https://github.com/chrishrb/gx.nvim"
|
||||||
},
|
},
|
||||||
|
"haunt": {
|
||||||
|
"rev": "815141d7367c9d895e902db27e2d25d4652ad0fc",
|
||||||
|
"src": "https://github.com/TheNoeTrevino/haunt.nvim"
|
||||||
|
},
|
||||||
"inc-rename": {
|
"inc-rename": {
|
||||||
"rev": "0074b551a17338ccdcd299bd86687cc651bcb33d",
|
"rev": "0074b551a17338ccdcd299bd86687cc651bcb33d",
|
||||||
"src": "https://github.com/smjonas/inc-rename.nvim"
|
"src": "https://github.com/smjonas/inc-rename.nvim"
|
||||||
@@ -128,6 +132,10 @@
|
|||||||
"rev": "33198ba0533d6a514f9a48cb472e40407c2ea9f6",
|
"rev": "33198ba0533d6a514f9a48cb472e40407c2ea9f6",
|
||||||
"src": "https://github.com/Apeiros-46B/qalc.nvim"
|
"src": "https://github.com/Apeiros-46B/qalc.nvim"
|
||||||
},
|
},
|
||||||
|
"sidekick": {
|
||||||
|
"rev": "208e1c5b8170c01fd1d07df0139322a76479b235",
|
||||||
|
"src": "https://github.com/folke/sidekick.nvim"
|
||||||
|
},
|
||||||
"snacks": {
|
"snacks": {
|
||||||
"rev": "ad9ede6a9cddf16cedbd31b8932d6dcdee9b716e",
|
"rev": "ad9ede6a9cddf16cedbd31b8932d6dcdee9b716e",
|
||||||
"src": "https://github.com/folke/snacks.nvim"
|
"src": "https://github.com/folke/snacks.nvim"
|
||||||
|
|||||||
Reference in New Issue
Block a user