Skip to content

Commit e74af14

Browse files
committed
Add folke/sidekick.nvim AI plugin to neovim
1 parent bc1e907 commit e74af14

5 files changed

Lines changed: 83 additions & 1 deletion

File tree

dot_config/nvim/init.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ require('lazy').setup({
235235
{ '<leader>g', group = '[G]it', mode = { 'n', 'v' } },
236236
{ '<leader>t', group = '[T]oggle' },
237237
{ '<leader>u', group = '[U]I' },
238+
{ '<leader>a', group = '[A]I / Sidekick' },
238239
{ '<leader>h', group = 'Git [H]unk', mode = { 'n', 'v' } }, -- Enable gitsigns recommended keymaps first
239240
{ 'gr', group = 'LSP Actions', mode = { 'n' } },
240241
{ 'ga', group = 'LSP Calls', mode = { 'n' } },
@@ -431,6 +432,7 @@ require('lazy').setup({
431432
cssls = {},
432433
cssmodules_ls = {},
433434
oxlint = {},
435+
copilot = {},
434436
}
435437

436438
-- Ensure the servers and tools above are installed

dot_config/nvim/lazy-lock.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,12 @@
2323
"nvim-lspconfig": { "branch": "master", "commit": "5a855bcfec7973767a1a472335684bbd71d2fa2b" },
2424
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
2525
"nvim-treesitter": { "branch": "main", "commit": "d660b7c002f3922b6bb3da47206645488a698426" },
26+
"nvim-treesitter-textobjects": { "branch": "main", "commit": "93d60a475f0b08a8eceb99255863977d3a25f310" },
2627
"nvim-ts-autotag": { "branch": "main", "commit": "8e1c0a389f20bf7f5b0dd0e00306c1247bda2595" },
2728
"nvim-web-devicons": { "branch": "master", "commit": "746ffbb17975ebd6c40142362eee1b0249969c5c" },
2829
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
2930
"schemastore.nvim": { "branch": "main", "commit": "84d86aa49021aa8b48c0a6ff89cd92c39ddf7d5c" },
31+
"sidekick.nvim": { "branch": "main", "commit": "17447a05f9385e5f8372b61530f6f9329cb82421" },
3032
"snacks.nvim": { "branch": "main", "commit": "ad9ede6a9cddf16cedbd31b8932d6dcdee9b716e" },
3133
"todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" },
3234
"tokyonight.nvim": { "branch": "main", "commit": "5da1b76e64daf4c5d410f06bcb6b9cb640da7dfd" },
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
-- AI-powered code assistant with CLI interface and edit suggestions.
2+
-- Provides keybindings for sending code context to AI and applying suggestions.
3+
4+
---@module 'lazy'
5+
---@type LazySpec
6+
return {
7+
'folke/sidekick.nvim',
8+
opts = {
9+
nes = { enabled = false },
10+
cli = {
11+
prompts = {
12+
refactor = 'Please refactor {function} to be more maintainable',
13+
security = 'Review {file} for security vulnerabilities',
14+
},
15+
},
16+
},
17+
keys = {
18+
-- NES: jump to next edit, or apply if already on one
19+
{
20+
'<tab>',
21+
function()
22+
if require('sidekick').nes_jump_or_apply() then return end
23+
return '<tab>' -- fall back to normal tab
24+
end,
25+
mode = { 'i', 'n' },
26+
expr = true,
27+
desc = 'Goto/Apply Next Edit Suggestion',
28+
},
29+
30+
-- CLI window management
31+
{ '<c-.>', function() require('sidekick.cli').focus() end, mode = { 'n', 't', 'i', 'x' }, desc = 'Sidekick Focus' },
32+
{ '<leader>aa', function() require('sidekick.cli').toggle() end, desc = 'Sidekick Toggle CLI' },
33+
{ '<leader>as', function() require('sidekick.cli').select() end, desc = 'Select CLI Tool' },
34+
{ '<leader>ad', function() require('sidekick.cli').close() end, desc = 'Detach CLI Session' },
35+
36+
-- Send context to CLI
37+
-- {this} resolves to {position} in a file, or appends {selection} otherwise
38+
{ '<leader>at', function() require('sidekick.cli').send { msg = '{this}' } end, mode = { 'x', 'n' }, desc = 'Send [T]his to Sidekick' },
39+
{ '<leader>aS', function() require('sidekick.cli').send { msg = '{selection}' } end, mode = { 'x' }, desc = 'Send [S]election to Sidekick' },
40+
{ '<leader>af', function() require('sidekick.cli').send { msg = '{function}' } end, desc = 'Send [F]unction to Sidekick' },
41+
{ '<leader>aF', function() require('sidekick.cli').send { msg = '{file}' } end, desc = 'Send [F]ile to Sidekick' },
42+
{ '<leader>ae', function() require('sidekick.cli').send { msg = '{diagnostics}' } end, desc = 'Send Diagnostics ([E]rrors) to Sidekick' },
43+
44+
-- Prompt shortcuts
45+
{ '<leader>ax', function() require('sidekick.cli').send { msg = 'explain {function}' } end, desc = 'E[x]plain Function' },
46+
{
47+
'<leader>aX',
48+
function()
49+
require('sidekick.cli').send { msg = 'fix the diagnostics in {function}. Here are the current buffer diagnostics for context:\n{diagnostics}' }
50+
end,
51+
desc = 'Fi[x] Diagnostics in Function',
52+
},
53+
{ '<leader>ap', function() require('sidekick.cli').prompt() end, desc = 'Sidekick Select [P]rompt' },
54+
},
55+
}

dot_config/nvim/lua/custom/plugins/snacks.lua

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,19 @@ return {
1818
-- Only the picker and input are enabled for now.
1919
-- To try other snacks modules later (dashboard, indent, scoll, etc.)
2020
-- just add them here with `enabled = true`.
21-
picker = { enabled = true },
21+
picker = {
22+
enabled = true,
23+
actions = {
24+
sidekick_send = function(...) return require('sidekick.cli.picker.snacks').send(...) end,
25+
},
26+
win = {
27+
input = {
28+
keys = {
29+
['<a-a>'] = { 'sidekick_send', mode = { 'n', 'i' } },
30+
},
31+
},
32+
},
33+
},
2234
input = { enabled = true },
2335
},
2436
keys = {
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
-- nvim-treesitter-textobjects (main branch)
2+
-- Enables {function} and {class} context variables in sidekick.nvim prompts.
3+
-- No config needed - sidekick calls into the textobjects API directly.
4+
5+
---@module 'lazy'
6+
---@type LazySpec
7+
return {
8+
'nvim-treesitter/nvim-treesitter-textobjects',
9+
branch = 'main',
10+
lazy = true,
11+
}

0 commit comments

Comments
 (0)