feat(neovim): experiment with ai agents #237
@ -194,7 +194,7 @@ RUN fish -c true \
|
|||||||
&& echo 'alias nh="nvim --listen 0.0.0.0:6666 --headless &> /dev/null"' >> ${XDG_CONFIG_HOME}/fish/config.fish
|
&& echo 'alias nh="nvim --listen 0.0.0.0:6666 --headless &> /dev/null"' >> ${XDG_CONFIG_HOME}/fish/config.fish
|
||||||
|
|
||||||
# git configuration
|
# git configuration
|
||||||
ENV NEOVIM_KICKSTART_VERSION 6ba2408cdf5eb7a0e4b62c7d6fab63b64dd720f6
|
ENV NEOVIM_KICKSTART_VERSION 3338d3920620861f8313a2745fd5d2be39f39534
|
||||||
COPY ./patch/kickstart.nvim/updates.patch /tmp
|
COPY ./patch/kickstart.nvim/updates.patch /tmp
|
||||||
COPY ./config/nvim/lua/custom/plugins/init.lua /tmp
|
COPY ./config/nvim/lua/custom/plugins/init.lua /tmp
|
||||||
RUN git clone https://github.com/nvim-lua/kickstart.nvim.git "${XDG_CONFIG_HOME}"/nvim \
|
RUN git clone https://github.com/nvim-lua/kickstart.nvim.git "${XDG_CONFIG_HOME}"/nvim \
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
---
|
---
|
||||||
model: gemini/gemini-2.5-pro-preview-03-25
|
reasoning-effort: medium
|
||||||
|
thinking-tokens: 8k
|
||||||
|
model: gemini/gemini-2.5-pro-preview-05-06
|
||||||
weak-model: gemini/gemini-2.0-flash-001
|
weak-model: gemini/gemini-2.0-flash-001
|
||||||
editor-model: gemini/gemini-2.5-pro-preview-03-25
|
editor-model: gemini/gemini-2.5-pro-preview-05-06
|
||||||
editor: nvim
|
editor: nvim
|
||||||
git: true
|
git: true
|
||||||
gitignore: true
|
gitignore: true
|
||||||
auto-commits: false
|
auto-commits: false
|
||||||
read:
|
read:
|
||||||
- CONVENTIONS.md
|
- CONVENTIONS.md
|
||||||
|
- CLAUDE.md
|
||||||
|
43
config/goose/config.yaml
Normal file
43
config/goose/config.yaml
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
ANTHROPIC_HOST: https://api.anthropic.com
|
||||||
|
GOOSE_PROVIDER: google
|
||||||
|
GOOSE_MODEL: gemini-2.5-pro-preview-05-06
|
||||||
|
extensions:
|
||||||
|
computercontroller:
|
||||||
|
bundled: true
|
||||||
|
display_name: Computer Controller
|
||||||
|
enabled: true
|
||||||
|
name: computercontroller
|
||||||
|
timeout: 600
|
||||||
|
type: builtin
|
||||||
|
context7:
|
||||||
|
args:
|
||||||
|
- dlx
|
||||||
|
- '@upstash/context7-mcp@latest'
|
||||||
|
bundled: null
|
||||||
|
cmd: pnpm
|
||||||
|
description: null
|
||||||
|
enabled: true
|
||||||
|
env_keys: []
|
||||||
|
envs: {}
|
||||||
|
name: context7
|
||||||
|
timeout: 600
|
||||||
|
type: stdio
|
||||||
|
developer:
|
||||||
|
bundled: true
|
||||||
|
display_name: Developer Tools
|
||||||
|
enabled: true
|
||||||
|
name: developer
|
||||||
|
timeout: 600
|
||||||
|
type: builtin
|
||||||
|
git:
|
||||||
|
args:
|
||||||
|
- mcp-server-git
|
||||||
|
bundled: null
|
||||||
|
cmd: uvx
|
||||||
|
description: null
|
||||||
|
enabled: true
|
||||||
|
env_keys: []
|
||||||
|
envs: {}
|
||||||
|
name: git
|
||||||
|
timeout: 600
|
||||||
|
type: stdio
|
@ -1,21 +0,0 @@
|
|||||||
{
|
|
||||||
"mcpServers": {
|
|
||||||
"context7": {
|
|
||||||
"command": "pnpm",
|
|
||||||
"args": [
|
|
||||||
"dlx",
|
|
||||||
"@upstash/context7-mcp@latest"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"git": {
|
|
||||||
"command": "uvx",
|
|
||||||
"args": [
|
|
||||||
"mcp-server-git"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"vectorcode": {
|
|
||||||
"command": "vectorcode-mcp-server",
|
|
||||||
"args": []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1 +1,21 @@
|
|||||||
{"mcpServers":{}}
|
{
|
||||||
|
"mcpServers": {
|
||||||
|
"context7": {
|
||||||
|
"command": "pnpm",
|
||||||
|
"args": [
|
||||||
|
"dlx",
|
||||||
|
"@upstash/context7-mcp@latest"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"git": {
|
||||||
|
"command": "uvx",
|
||||||
|
"args": [
|
||||||
|
"mcp-server-git"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"vectorcode": {
|
||||||
|
"command": "vectorcode-mcp-server",
|
||||||
|
"args": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
"pipx:aider-chat" = { version = "0.83.1", uvx_args = "--python 3.12.10 --with google-generativeai" }
|
"pipx:aider-chat" = { version = "0.83.1", uvx_args = "--python 3.12.10 --with google-generativeai" }
|
||||||
"pipx:vectorcode" = { version = "0.6.6", uvx_args = "--python 3.13.3", extras = "mcp" }
|
"pipx:vectorcode" = { version = "0.6.6", uvx_args = "--python 3.13.3", extras = "mcp" }
|
||||||
"ubi:Samyak2/toipe" = "0.5.0"
|
"ubi:Samyak2/toipe" = "0.5.0"
|
||||||
|
"ubi:block/goose" = "1.0.24"
|
||||||
"ubi:hlsxx/tukai" = "0.2.2"
|
"ubi:hlsxx/tukai" = "0.2.2"
|
||||||
"ubi:jdx/usage" = "2.1.1"
|
"ubi:jdx/usage" = "2.1.1"
|
||||||
"ubi:max-niederman/ttyper" = "1.6.0"
|
"ubi:max-niederman/ttyper" = "1.6.0"
|
||||||
|
@ -234,7 +234,7 @@ return {
|
|||||||
name = 'gemini_pro',
|
name = 'gemini_pro',
|
||||||
schema = {
|
schema = {
|
||||||
model = {
|
model = {
|
||||||
default = 'gemini-2.5-pro-exp-03-25',
|
default = 'gemini-2.5-pro-preview-05-06',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@ -310,6 +310,178 @@ return {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
'azorng/goose.nvim',
|
||||||
|
dependencies = {
|
||||||
|
'nvim-lua/plenary.nvim',
|
||||||
|
{
|
||||||
|
'MeanderingProgrammer/render-markdown.nvim',
|
||||||
|
opts = {
|
||||||
|
file_types = { 'markdown', 'goose' },
|
||||||
|
anti_conceal = { enabled = false },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
opts = {
|
||||||
|
prefered_picker = 'telescope',
|
||||||
|
default_global_keymaps = false,
|
||||||
|
ui = {
|
||||||
|
window_widht = 0.3,
|
||||||
|
input_height = 0.2,
|
||||||
|
fullscreen = false,
|
||||||
|
layout = 'right',
|
||||||
|
floating_height = 0.9,
|
||||||
|
display_model = true,
|
||||||
|
display_goose_mode = true,
|
||||||
|
},
|
||||||
|
providers = {
|
||||||
|
anthropic = {
|
||||||
|
'claude-sonnet-4-20250514',
|
||||||
|
},
|
||||||
|
gemini = {
|
||||||
|
'gemini-2.5-pro-preview-05-06',
|
||||||
|
'gemini-2.5-flash-preview-05-20',
|
||||||
|
'gemini-2.0-flash',
|
||||||
|
},
|
||||||
|
groq = {
|
||||||
|
'deepseek-r1-distill-llama-70b',
|
||||||
|
'qwen-qwq-32b',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
keys = {
|
||||||
|
{ '<leader>gg', '<cmd>Goose<cr>', mode = 'n', desc = 'Toggle goose' },
|
||||||
|
{ '<leader>gi', '<cmd>GooseOpenInput<cr>', mode = 'n', desc = 'Open goose input' },
|
||||||
|
{ '<leader>gI', '<cmd>GooseOpenInputNewSession<cr>', mode = 'n', desc = 'Open goose input in new session' },
|
||||||
|
{ '<leader>go', '<cmd>GooseOpenOutput<cr>', mode = 'n', desc = 'Open goose output' },
|
||||||
|
{ '<leader>gt', '<cmd>GooseToggleFocus<cr>', mode = 'n', desc = 'Toggle focus between goose and last window' },
|
||||||
|
{ '<leader>gq', '<cmd>GooseClose<cr>', mode = 'n', desc = 'Close goose' },
|
||||||
|
{ '<leader>gf', '<cmd>GooseToggleFullscreen<cr>', mode = 'n', desc = 'Toggle goose fullscreen' },
|
||||||
|
{ '<leader>gsn', '<cmd>GooseSelectSession<cr>', mode = 'n', desc = 'Select and load a goose session' },
|
||||||
|
-- { '<leader>gmc', '<cmd>GooseModeChat<cr>', mode = 'n', desc = 'Set goose mode to `chat`' },
|
||||||
|
-- { '<leader>gma', '<cmd>GooseModeAuto<cr>', mode = 'n', desc = 'Set goose mode to `auto`' },
|
||||||
|
{ '<leader>gp', '<cmd>GooseConfigureProvider<cr>', mode = 'n', desc = 'Quick provider and model switch from predefined list' },
|
||||||
|
{ '<leader>gd', '<cmd>GooseDiff<cr>', mode = 'n', desc = 'Opens a diff tab of a modified file since the last goose prompt' },
|
||||||
|
{ '<leader>g]', '<cmd>GooseDiffNext<cr>', mode = 'n', desc = 'Navigate to next file diff' },
|
||||||
|
{ '<leader>g[', '<cmd>GooseDiffPrev<cr>', mode = 'n', desc = 'Navigate to previous file diff' },
|
||||||
|
{ '<leader>gc', '<cmd>GooseDiffClose<cr>', mode = 'n', desc = 'Close diff view tab and return to normal editing' },
|
||||||
|
{ '<leader>gra', '<cmd>GooseDiffRevertAll<cr>', mode = 'n', desc = 'Revert all file changes since the last goose prompt' },
|
||||||
|
{ '<leader>grt', '<cmd>GooseDiffRevertThis<cr>', mode = 'n', desc = 'Revert current file changes since the last goose prompt' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'yetone/avante.nvim',
|
||||||
|
build = 'make',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
version = false,
|
||||||
|
dependencies = {
|
||||||
|
'nvim-treesitter/nvim-treesitter',
|
||||||
|
'stevearc/dressing.nvim',
|
||||||
|
'nvim-lua/plenary.nvim',
|
||||||
|
'MunifTanjim/nui.nvim',
|
||||||
|
'nvim-telescope/telescope.nvim',
|
||||||
|
'nvim-tree/nvim-web-devicons',
|
||||||
|
{
|
||||||
|
-- support for image pasting
|
||||||
|
'HakonHarnes/img-clip.nvim',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
opts = {
|
||||||
|
-- recommended settings
|
||||||
|
default = {
|
||||||
|
embed_image_as_base64 = false,
|
||||||
|
prompt_for_file_name = false,
|
||||||
|
drag_and_drop = {
|
||||||
|
insert_mode = true,
|
||||||
|
},
|
||||||
|
-- required for Windows users
|
||||||
|
use_absolute_path = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'MeanderingProgrammer/render-markdown.nvim',
|
||||||
|
opts = {
|
||||||
|
file_types = { 'markdown', 'Avante' },
|
||||||
|
},
|
||||||
|
ft = { 'markdown', 'Avante' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
opts = {
|
||||||
|
mappings = {
|
||||||
|
ask = '<leader>ua',
|
||||||
|
edit = '<leader>ue',
|
||||||
|
refresh = '<leader>ur',
|
||||||
|
diff = {
|
||||||
|
ours = 'co',
|
||||||
|
theirs = 'ct',
|
||||||
|
all_theirs = 'ca',
|
||||||
|
both = 'cb',
|
||||||
|
cursor = 'cc',
|
||||||
|
next = ']x',
|
||||||
|
prev = '[x',
|
||||||
|
},
|
||||||
|
suggestion = {
|
||||||
|
accept = '<M-l>',
|
||||||
|
next = '<M-]>',
|
||||||
|
prev = '<M-[>',
|
||||||
|
dismiss = '<C-]>',
|
||||||
|
},
|
||||||
|
jump = {
|
||||||
|
next = ']]',
|
||||||
|
prev = '[[',
|
||||||
|
},
|
||||||
|
submit = {
|
||||||
|
normal = '<CR>',
|
||||||
|
insert = '<C-s>',
|
||||||
|
},
|
||||||
|
sidebar = {
|
||||||
|
apply_all = 'A',
|
||||||
|
apply_cursor = 'a',
|
||||||
|
switch_windows = '<Tab>',
|
||||||
|
reverse_switch_windows = '<S-Tab>',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
-- The custom_tools type supports both a list and a function that returns a list. Using a function here prevents requiring mcphub before it's loaded
|
||||||
|
custom_tools = function()
|
||||||
|
return {
|
||||||
|
require('mcphub.extensions.avante').mcp_tool(),
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
hints = { enabled = true },
|
||||||
|
provider = 'gemini-pro',
|
||||||
|
-- The system_prompt type supports both a string and a function that returns a string. Using a function here allows dynamically updating the prompt with `mcphub`
|
||||||
|
system_prompt = function()
|
||||||
|
local hub = require('mcphub').get_hub_instance()
|
||||||
|
return hub and hub:get_active_servers_prompt() or ''
|
||||||
|
end,
|
||||||
|
vendors = {
|
||||||
|
['gemini-pro'] = {
|
||||||
|
__inherited_from = 'gemini',
|
||||||
|
model = 'gemini-2.5-pro-preview-05-06',
|
||||||
|
timeout = 600000,
|
||||||
|
max_tokens = 40960,
|
||||||
|
},
|
||||||
|
['gemini-flash'] = {
|
||||||
|
__inherited_from = 'gemini',
|
||||||
|
model = 'gemini-2.0-flash',
|
||||||
|
timeout = 600000,
|
||||||
|
max_tokens = 20480,
|
||||||
|
},
|
||||||
|
['claude-sonnet-4'] = {
|
||||||
|
__inherited_from = 'claude',
|
||||||
|
model = 'claude-sonnet-4-20250514',
|
||||||
|
timeout = 600000,
|
||||||
|
max_tokens = 20480,
|
||||||
|
},
|
||||||
|
groq = {
|
||||||
|
__inherited_from = 'openai',
|
||||||
|
api_key_name = 'GROQ_API_KEY',
|
||||||
|
endpoint = 'https://api.groq.com/openai/v1/',
|
||||||
|
model = 'deepseek-r1-distill-llama-70b',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
'sphamba/smear-cursor.nvim',
|
'sphamba/smear-cursor.nvim',
|
||||||
opts = {
|
opts = {
|
||||||
|
@ -21,6 +21,7 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- './config/atuin:/home/coder/.config/atuin'
|
- './config/atuin:/home/coder/.config/atuin'
|
||||||
- './config/git:/home/coder/.config/git'
|
- './config/git:/home/coder/.config/git'
|
||||||
|
- './config/goose:/home/coder/.config/goose'
|
||||||
- './config/mcphub:/home/coder/.config/mcphub'
|
- './config/mcphub:/home/coder/.config/mcphub'
|
||||||
- './config/mise:/home/coder/.config/mise'
|
- './config/mise:/home/coder/.config/mise'
|
||||||
- './config/nvim/lua/custom:/home/coder/.config/nvim/lua/custom'
|
- './config/nvim/lua/custom:/home/coder/.config/nvim/lua/custom'
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
diff --git a/init.lua b/init.lua
|
diff --git a/init.lua b/init.lua
|
||||||
index b98ffc6..f0cf036 100644
|
index b98ffc6..8013e25 100644
|
||||||
--- a/init.lua
|
--- a/init.lua
|
||||||
+++ b/init.lua
|
+++ b/init.lua
|
||||||
@@ -91,7 +91,7 @@ vim.g.mapleader = ' '
|
@@ -91,7 +91,7 @@ vim.g.mapleader = ' '
|
||||||
@ -156,23 +156,28 @@ index b98ffc6..f0cf036 100644
|
|||||||
require('lspconfig')[server_name].setup(server)
|
require('lspconfig')[server_name].setup(server)
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
@@ -809,6 +893,8 @@ require('lazy').setup({
|
@@ -809,6 +893,9 @@ require('lazy').setup({
|
||||||
opts = {},
|
opts = {},
|
||||||
},
|
},
|
||||||
'folke/lazydev.nvim',
|
'folke/lazydev.nvim',
|
||||||
+ 'saghen/blink.compat',
|
+ 'saghen/blink.compat',
|
||||||
+ 'supermaven-inc/supermaven-nvim',
|
+ 'supermaven-inc/supermaven-nvim',
|
||||||
|
+ 'Kaiser-Yang/blink-cmp-avante',
|
||||||
},
|
},
|
||||||
--- @module 'blink.cmp'
|
--- @module 'blink.cmp'
|
||||||
--- @type blink.cmp.Config
|
--- @type blink.cmp.Config
|
||||||
@@ -854,9 +940,15 @@ require('lazy').setup({
|
@@ -854,9 +941,19 @@ require('lazy').setup({
|
||||||
},
|
},
|
||||||
|
|
||||||
sources = {
|
sources = {
|
||||||
- default = { 'lsp', 'path', 'snippets', 'lazydev' },
|
- default = { 'lsp', 'path', 'snippets', 'lazydev' },
|
||||||
+ default = { 'lsp', 'path', 'snippets', 'lazydev', 'supermaven' },
|
+ default = { 'avante', 'lsp', 'path', 'snippets', 'lazydev', 'supermaven' },
|
||||||
providers = {
|
providers = {
|
||||||
lazydev = { module = 'lazydev.integrations.blink', score_offset = 100 },
|
lazydev = { module = 'lazydev.integrations.blink', score_offset = 100 },
|
||||||
|
+ avante = {
|
||||||
|
+ name = 'avante',
|
||||||
|
+ module = 'blink-cmp-avante',
|
||||||
|
+ },
|
||||||
+ supermaven = {
|
+ supermaven = {
|
||||||
+ name = 'supermanve',
|
+ name = 'supermanve',
|
||||||
+ module = 'blink.compat.source',
|
+ module = 'blink.compat.source',
|
||||||
@ -182,7 +187,7 @@ index b98ffc6..f0cf036 100644
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -882,19 +974,39 @@ require('lazy').setup({
|
@@ -882,19 +979,39 @@ require('lazy').setup({
|
||||||
--
|
--
|
||||||
-- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`.
|
-- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`.
|
||||||
'folke/tokyonight.nvim',
|
'folke/tokyonight.nvim',
|
||||||
@ -228,7 +233,7 @@ index b98ffc6..f0cf036 100644
|
|||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -944,7 +1056,39 @@ require('lazy').setup({
|
@@ -944,7 +1061,39 @@ require('lazy').setup({
|
||||||
main = 'nvim-treesitter.configs', -- Sets main module to use for opts
|
main = 'nvim-treesitter.configs', -- Sets main module to use for opts
|
||||||
-- [[ Configure Treesitter ]] See `:help nvim-treesitter`
|
-- [[ Configure Treesitter ]] See `:help nvim-treesitter`
|
||||||
opts = {
|
opts = {
|
||||||
@ -269,7 +274,7 @@ index b98ffc6..f0cf036 100644
|
|||||||
-- Autoinstall languages that are not installed
|
-- Autoinstall languages that are not installed
|
||||||
auto_install = true,
|
auto_install = true,
|
||||||
highlight = {
|
highlight = {
|
||||||
@@ -974,17 +1118,17 @@ require('lazy').setup({
|
@@ -974,17 +1123,17 @@ require('lazy').setup({
|
||||||
-- Uncomment any of the lines below to enable them (you will need to restart nvim).
|
-- Uncomment any of the lines below to enable them (you will need to restart nvim).
|
||||||
--
|
--
|
||||||
-- require 'kickstart.plugins.debug',
|
-- require 'kickstart.plugins.debug',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user