From 0b5c8ba97f2a0af6189a80beb7425b4da8146d3c Mon Sep 17 00:00:00 2001 From: Mikkel Svartveit Date: Tue, 30 Sep 2025 11:17:41 +0200 Subject: [PATCH] Add opencode --- .gitignore | 1 + fish/config.fish | 7 +- .../com.googlecode.iterm2.plist | 24 ++++- nvim/init.vim | 3 + nvim/lazy-lock.json | 2 +- nvim/lua/plugins.lua | 92 +++++++++++-------- opencode/opencode.json | 10 ++ 7 files changed, 97 insertions(+), 42 deletions(-) create mode 100644 opencode/opencode.json diff --git a/.gitignore b/.gitignore index f04dc7f..e4a67f2 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ !zed/settings.json !zed/keymap.json !zed/tasks.json +!opencode/**/* # Blacklist some stuff again .DS_Store diff --git a/fish/config.fish b/fish/config.fish index 9046c9f..faf70b0 100644 --- a/fish/config.fish +++ b/fish/config.fish @@ -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" diff --git a/iterm2-preferences/com.googlecode.iterm2.plist b/iterm2-preferences/com.googlecode.iterm2.plist index f1b6b23..dae1d12 100644 --- a/iterm2-preferences/com.googlecode.iterm2.plist +++ b/iterm2-preferences/com.googlecode.iterm2.plist @@ -2,6 +2,28 @@ + AIFeatureFunctionCalling + + AIFeatureHostedCodeInterpeter + + AIFeatureHostedFileSearch + + AIFeatureHostedWebSearch + + AIFeatureStreamingResponses + + AITermAPI + 2 + AIVectorStore + 1 + AiMaxTokens + 1000000 + AiModel + gpt-4.1 + AiResponseMaxTokens + 32768 + AitermURL + https://api.openai.com/v1/responses AllowClipboardAccess AlternateMouseScroll @@ -1947,7 +1969,7 @@ PromptOnQuit ShowFullScreenTabBar - + SmartPlacement SoundForEsc diff --git a/nvim/init.vim b/nvim/init.vim index 189df5b..d760e45 100644 --- a/nvim/init.vim +++ b/nvim/init.vim @@ -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 diff --git a/nvim/lazy-lock.json b/nvim/lazy-lock.json index 0547cef..0fdac14 100644 --- a/nvim/lazy-lock.json +++ b/nvim/lazy-lock.json @@ -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" }, diff --git a/nvim/lua/plugins.lua b/nvim/lua/plugins.lua index e4c36a3..7c88d53 100644 --- a/nvim/lua/plugins.lua +++ b/nvim/lua/plugins.lua @@ -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 - terminal = { - provider = "snacks", - split_side = "right", - split_width_percentage = 0.4, - }, - }, - config = true, - init = function() - vim.keymap.set( - { "n", "v", "i", "t" }, - "", - "ClaudeCodeFocus", - { noremap = true, silent = true } - ) + config = function() + vim.g.opencode_opts = { + -- Your configuration, if any — see `lua/opencode/config.lua` + terminal = { + win = { + enter = true, + }, + }, + } - vim.keymap.set( - { "n", "v", "i", "t" }, - "", - "ClaudeCodeSend", - { 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", "at", function() + require("opencode").toggle() + end, { desc = "Toggle" }) + vim.keymap.set("n", "aA", function() + require("opencode").ask() + end, { desc = "Ask" }) + vim.keymap.set("n", "aa", function() + require("opencode").ask("@cursor: ") + end, { desc = "Ask about this" }) + vim.keymap.set("v", "aa", function() + require("opencode").ask("@selection: ") + end, { desc = "Ask about selection" }) + vim.keymap.set("n", "a+", function() + require("opencode").append_prompt("@buffer") + end, { desc = "Add buffer to prompt" }) + vim.keymap.set("v", "a+", function() + require("opencode").append_prompt("@selection") + end, { desc = "Add selection to prompt" }) + vim.keymap.set("n", "an", function() + require("opencode").command("session_new") + end, { desc = "New session" }) + vim.keymap.set("n", "ay", function() + require("opencode").command("messages_copy") + end, { desc = "Copy last response" }) + vim.keymap.set("n", "", function() + require("opencode").command("messages_half_page_up") + end, { desc = "Messages half page up" }) + vim.keymap.set("n", "", function() + require("opencode").command("messages_half_page_down") + end, { desc = "Messages half page down" }) + vim.keymap.set({ "n", "v" }, "as", function() + require("opencode").select() + end, { desc = "Select prompt" }) + + -- Toggle with Ctrl + , + vim.keymap.set({ "n", "v", "i", "t" }, "", function() + require("opencode").toggle() + end, { desc = "Toggle" }) end, }, diff --git a/opencode/opencode.json b/opencode/opencode.json new file mode 100644 index 0000000..12c58c0 --- /dev/null +++ b/opencode/opencode.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://opencode.ai/config.json", + "mcp": { + "context7": { + "type": "remote", + "url": "https://mcp.context7.com/mcp", + "enabled": true + } + } +}