return { 'nickjvandyke/opencode.nvim', version = '*', -- Latest stable release dependencies = { { -- `snacks.nvim` integration is recommended, but optional ---@module "snacks" <- Loads `snacks.nvim` types for configuration intellisense 'folke/snacks.nvim', optional = true, opts = { input = {}, -- Enhances `ask()` picker = { -- Enhances `select()` actions = { opencode_send = function(...) return require('opencode').snacks_picker_send(...) end, }, win = { input = { keys = { [''] = { 'opencode_send', mode = { 'n', 'i' } }, }, }, }, }, }, }, }, config = function() ---@type opencode.Opts vim.g.opencode_opts = { server = { start = function() require('opencode.terminal').open('opencode --port', { split = 'right', width = math.max(40, math.floor(vim.o.columns * 0.4)), }) end, stop = function() require('opencode.terminal').close() end, toggle = function() require('opencode.terminal').toggle('opencode --port', { split = 'right', width = math.max(40, math.floor(vim.o.columns * 0.4)), }) end, }, } vim.o.autoread = true -- Required for `opts.events.reload` -- Recommended/example keymaps vim.keymap.set({ 'n', 'x' }, '', function() require('opencode').ask('@this: ', { submit = true }) end, { desc = 'Ask opencode…' }) vim.keymap.set({ 'n', 'x' }, '', function() require('opencode').select() end, { desc = 'Execute opencode action…' }) vim.keymap.set({ 'n', 't' }, '', function() require('opencode').toggle() end, { desc = 'Toggle opencode' }) vim.keymap.set({ 'n', 'x' }, 'go', function() return require('opencode').operator '@this ' end, { desc = 'Add range to opencode', expr = true }) vim.keymap.set('n', 'goo', function() return require('opencode').operator '@this ' .. '_' end, { desc = 'Add line to opencode', expr = true }) vim.keymap.set('n', '', function() require('opencode').command 'session.half.page.up' end, { desc = 'Scroll opencode up' }) vim.keymap.set('n', '', function() require('opencode').command 'session.half.page.down' end, { desc = 'Scroll opencode down' }) -- You may want these if you use the opinionated `` and `` keymaps above — otherwise consider `o…` (and remove terminal mode from the `toggle` keymap) vim.keymap.set('n', '+', '', { desc = 'Increment under cursor', noremap = true }) vim.keymap.set('n', '-', '', { desc = 'Decrement under cursor', noremap = true }) end, }