Add opencode

This commit is contained in:
Mikkel Svartveit 2025-09-30 11:17:41 +02:00
parent a5008165d3
commit 0b5c8ba97f
7 changed files with 97 additions and 42 deletions

1
.gitignore vendored
View file

@ -22,6 +22,7 @@
!zed/settings.json
!zed/keymap.json
!zed/tasks.json
!opencode/**/*
# Blacklist some stuff again
.DS_Store

View file

@ -16,6 +16,7 @@ alias nvimconfig="cd ~/.config/nvim && nvim && cd -"
abbr v "nvim"
abbr c "claude"
abbr oc "opencode"
abbr ws "windsurf"
abbr lg "lazygit"
abbr p "pnpm"
@ -80,7 +81,8 @@ fish_add_path "$HOME/Library/pnpm" # pnpm
fish_add_path "$HOME/go/bin" # Go
fish_add_path "$HOME/.cargo/bin" # Rust
fish_add_path "$HOME/.codeium/windsurf/bin" # Windsurf
fish_add_path "$HOME/.claude/local" # Claude Code
fish_add_path "/opt/homebrew/opt/libpq/bin" # libpg (Postgres CLI tools)
fish_add_path "$HOME/.opencode/bin" # opencode
if [ -f "$HOME/Applications/google-cloud-sdk/path.fish.inc" ]; . "$HOME/Applications/google-cloud-sdk/path.fish.inc"; end # Google Cloud SDK
# Initialize pnpm
@ -102,3 +104,6 @@ source ~/.orbstack/shell/init2.fish 2>/dev/null || :
# Initialize zoxide
zoxide init fish --cmd j | source
# Claude Code
alias claude="~/.claude/local/claude"

View file

@ -2,6 +2,28 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AIFeatureFunctionCalling</key>
<true/>
<key>AIFeatureHostedCodeInterpeter</key>
<true/>
<key>AIFeatureHostedFileSearch</key>
<true/>
<key>AIFeatureHostedWebSearch</key>
<true/>
<key>AIFeatureStreamingResponses</key>
<true/>
<key>AITermAPI</key>
<integer>2</integer>
<key>AIVectorStore</key>
<integer>1</integer>
<key>AiMaxTokens</key>
<integer>1000000</integer>
<key>AiModel</key>
<string>gpt-4.1</string>
<key>AiResponseMaxTokens</key>
<integer>32768</integer>
<key>AitermURL</key>
<string>https://api.openai.com/v1/responses</string>
<key>AllowClipboardAccess</key>
<false/>
<key>AlternateMouseScroll</key>
@ -1947,7 +1969,7 @@
<key>PromptOnQuit</key>
<false/>
<key>ShowFullScreenTabBar</key>
<true/>
<false/>
<key>SmartPlacement</key>
<true/>
<key>SoundForEsc</key>

View file

@ -44,6 +44,9 @@ set scrolloff=4
set undofile
set undodir=~/.local/share/nvim/undo
" Don't comment out next line when creating new line
set formatoptions-=cro
" Allow using uppercase W and Q commands to save/quit
command WQ wq
command Wq wq

View file

@ -3,7 +3,6 @@
"LuaSnip": { "branch": "master", "commit": "fb525166ccc30296fb3457441eb979113de46b00" },
"auto-session": { "branch": "main", "commit": "fffb13dcbe8731b8650e5bf1caa749a485d20556" },
"catppuccin": { "branch": "main", "commit": "fa42eb5e26819ef58884257d5ae95dd0552b9a66" },
"claudecode.nvim": { "branch": "main", "commit": "2603ec0b59857bb9329223f18705241dd615bbef" },
"cmp-nvim-lsp": { "branch": "main", "commit": "a8912b88ce488f411177fc8aed358b04dc246d7b" },
"code_runner.nvim": { "branch": "main", "commit": "65c8d11f507073b915f10faa88ea05bd4fbf69ce" },
"gitsigns.nvim": { "branch": "main", "commit": "88205953bd748322b49b26e1dfb0389932520dc9" },
@ -20,6 +19,7 @@
"nvim-tree.lua": { "branch": "master", "commit": "e14989c0eaa6f9c299d48f7e45ce1ed04b21180f" },
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
"nvim-web-devicons": { "branch": "master", "commit": "1fb58cca9aebbc4fd32b086cb413548ce132c127" },
"opencode.nvim": { "branch": "main", "commit": "0fd675bb6ae7c29ee4ff352ab421cb4f17ca7c0d" },
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
"snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" },
"supermaven-nvim": { "branch": "main", "commit": "07d20fce48a5629686aefb0a7cd4b25e33947d50" },

View file

@ -191,50 +191,64 @@ require("lazy").setup({
end,
},
-- Claude Code integration
{
"coder/claudecode.nvim",
"NickvanDyke/opencode.nvim",
dependencies = {
"folke/snacks.nvim",
-- Recommended for better prompt input, and required to use `opencode.nvim`'s embedded terminal — otherwise optional
{ "folke/snacks.nvim", opts = { input = { enabled = true } } },
},
opts = {
terminal_cmd = "~/.claude/local/claude", -- Use local installation
config = function()
vim.g.opencode_opts = {
-- Your configuration, if any — see `lua/opencode/config.lua`
terminal = {
provider = "snacks",
split_side = "right",
split_width_percentage = 0.4,
win = {
enter = true,
},
},
config = true,
init = function()
vim.keymap.set(
{ "n", "v", "i", "t" },
"<C-,>",
"<cmd>ClaudeCodeFocus<CR>",
{ noremap = true, silent = true }
)
}
vim.keymap.set(
{ "n", "v", "i", "t" },
"<C-.>",
"<cmd>ClaudeCodeSend<CR>",
{ noremap = true, silent = true }
)
-- Required for `opts.auto_reload`
vim.opt.autoread = true
-- Update buffer when Claude Code has made changes
vim.api.nvim_create_autocmd({
"BufEnter",
"BufWinEnter",
}, {
group = augroup,
pattern = "*",
callback = function()
if vim.fn.filereadable(vim.fn.expand("%")) == 1 then
vim.cmd("checktime")
end
end,
desc = "Check for file changes on disk",
})
-- Recommended keymaps
vim.keymap.set("n", "<leader>at", function()
require("opencode").toggle()
end, { desc = "Toggle" })
vim.keymap.set("n", "<leader>aA", function()
require("opencode").ask()
end, { desc = "Ask" })
vim.keymap.set("n", "<leader>aa", function()
require("opencode").ask("@cursor: ")
end, { desc = "Ask about this" })
vim.keymap.set("v", "<leader>aa", function()
require("opencode").ask("@selection: ")
end, { desc = "Ask about selection" })
vim.keymap.set("n", "<leader>a+", function()
require("opencode").append_prompt("@buffer")
end, { desc = "Add buffer to prompt" })
vim.keymap.set("v", "<leader>a+", function()
require("opencode").append_prompt("@selection")
end, { desc = "Add selection to prompt" })
vim.keymap.set("n", "<leader>an", function()
require("opencode").command("session_new")
end, { desc = "New session" })
vim.keymap.set("n", "<leader>ay", function()
require("opencode").command("messages_copy")
end, { desc = "Copy last response" })
vim.keymap.set("n", "<S-C-u>", function()
require("opencode").command("messages_half_page_up")
end, { desc = "Messages half page up" })
vim.keymap.set("n", "<S-C-d>", function()
require("opencode").command("messages_half_page_down")
end, { desc = "Messages half page down" })
vim.keymap.set({ "n", "v" }, "<leader>as", function()
require("opencode").select()
end, { desc = "Select prompt" })
-- Toggle with Ctrl + ,
vim.keymap.set({ "n", "v", "i", "t" }, "<C-,>", function()
require("opencode").toggle()
end, { desc = "Toggle" })
end,
},

10
opencode/opencode.json Normal file
View file

@ -0,0 +1,10 @@
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp",
"enabled": true
}
}
}