diff --git a/lua/plugins/99.lua b/lua/plugins/99.lua new file mode 100644 index 0000000..38c6ece --- /dev/null +++ b/lua/plugins/99.lua @@ -0,0 +1,100 @@ +return { + "ThePrimeagen/99", + config = function() + local _99 = require("99") + + -- For logging that is to a file if you wish to trace through requests + -- for reporting bugs, i would not rely on this, but instead the provided + -- logging mechanisms within 99. This is for more debugging purposes + local cwd = vim.uv.cwd() + local basename = vim.fs.basename(cwd) + _99.setup { + provider = _99.Providers.ClaudeCodeProvider, + model = "claude-opus-4-7", + logger = { + level = _99.DEBUG, + path = "/tmp/" .. basename .. ".99.debug", + print_on_error = true, + }, + -- When setting this to something that is not inside the CWD tools + -- such as claude code or opencode will have permission issues + -- and generation will fail refer to tool documentation to resolve + -- https://opencode.ai/docs/permissions/#external-directories + -- https://code.claude.com/docs/en/permissions#read-and-edit + tmp_dir = "./tmp", + + --- Completions: #rules and @files in the prompt buffer + completion = { + -- I am going to disable these until i understand the + -- problem better. Inside of cursor rules there is also + -- application rules, which means i need to apply these + -- differently + -- cursor_rules = "" + + --- A list of folders where you have your own SKILL.md + --- Expected format: + --- /path/to/dir//SKILL.md + --- + --- Example: + --- Input Path: + --- "scratch/custom_rules/" + --- + --- Output Rules: + --- {path = "scratch/custom_rules/vim/SKILL.md", name = "vim"}, + --- ... the other rules in that dir ... + --- + custom_rules = { + "scratch/custom_rules/", + }, + + --- Configure @file completion (all fields optional, sensible defaults) + files = { + -- enabled = true, + -- max_file_size = 102400, -- bytes, skip files larger than this + -- max_files = 5000, -- cap on total discovered files + -- exclude = { ".env", ".env.*", "node_modules", ".git", ... }, + }, + --- File Discovery: + --- - In git repos: Uses `git ls-files` which automatically respects .gitignore + --- - Non-git repos: Falls back to filesystem scanning with manual excludes + --- - Both methods apply the configured `exclude` list on top of gitignore + + --- What autocomplete engine to use. Defaults to native (built-in) if not specified. + source = "native", -- "native" (default), "cmp", or "blink" + }, + + --- WARNING: if you change cwd then this is likely broken + --- ill likely fix this in a later change + --- + --- md_files is a list of files to look for and auto add based on the location + --- of the originating request. That means if you are at /foo/bar/baz.lua + --- the system will automagically look for: + --- /foo/bar/AGENT.md + --- /foo/AGENT.md + --- assuming that /foo is project root (based on cwd) + md_files = { + "CLAUDE.md", + }, + } + + -- take extra note that i have visual selection only in v mode + -- technically whatever your last visual selection is, will be used + -- so i have this set to visual mode so i dont screw up and use an + -- old visual selection + -- + -- likely ill add a mode check and assert on required visual mode + -- so just prepare for it now + vim.keymap.set("v", "9v", function() + _99.visual() + end) + + --- if you have a request you dont want to make any changes, just cancel it + vim.keymap.set("n", "9x", function() + _99.stop_all_requests() + end) + + vim.keymap.set("n", "9s", function() + _99.search() + end) + end, +} diff --git a/lua/plugins/claudecode.lua b/lua/plugins/claudecode.lua new file mode 100644 index 0000000..8360b0c --- /dev/null +++ b/lua/plugins/claudecode.lua @@ -0,0 +1,24 @@ +return { + "coder/claudecode.nvim", + dependencies = { "folke/snacks.nvim" }, + config = true, + keys = { + { "a", nil, desc = "AI/Claude Code" }, + { "ac", "ClaudeCode", desc = "Toggle Claude" }, + { "af", "ClaudeCodeFocus", desc = "Focus Claude" }, + { "ar", "ClaudeCode --resume", desc = "Resume Claude" }, + { "aC", "ClaudeCode --continue", desc = "Continue Claude" }, + { "am", "ClaudeCodeSelectModel", desc = "Select Claude model" }, + { "ab", "ClaudeCodeAdd %", desc = "Add current buffer" }, + { "as", "ClaudeCodeSend", mode = "v", desc = "Send to Claude" }, + { + "as", + "ClaudeCodeTreeAdd", + desc = "Add file", + ft = { "NvimTree", "neo-tree", "oil", "minifiles", "netrw" }, + }, + -- Diff management + { "aa", "ClaudeCodeDiffAccept", desc = "Accept diff" }, + { "ad", "ClaudeCodeDiffDeny", desc = "Deny diff" }, + }, +} diff --git a/lua/plugins/claudecode.rs b/lua/plugins/claudecode.rs new file mode 100644 index 0000000..a2ec49b --- /dev/null +++ b/lua/plugins/claudecode.rs @@ -0,0 +1,34 @@ +struct Key { + lhs: &'static str, + rhs: Option<&'static str>, + desc: &'static str, + mode: Option<&'static str>, + ft: Option<&'static [&'static str]>, +} + +struct Plugin { + name: &'static str, + dependencies: &'static [&'static str], + config: bool, + keys: &'static [Key], +} + +const CLAUDE_CODE: Plugin = Plugin { + name: "coder/claudecode.nvim", + dependencies: &["folke/snacks.nvim"], + config: true, + keys: &[ + Key { lhs: "a", rhs: None, desc: "AI/Claude Code", mode: None, ft: None }, + Key { lhs: "ac", rhs: Some("ClaudeCode"), desc: "Toggle Claude", mode: None, ft: None }, + Key { lhs: "af", rhs: Some("ClaudeCodeFocus"), desc: "Focus Claude", mode: None, ft: None }, + Key { lhs: "ar", rhs: Some("ClaudeCode --resume"), desc: "Resume Claude", mode: None, ft: None }, + Key { lhs: "aC", rhs: Some("ClaudeCode --continue"), desc: "Continue Claude", mode: None, ft: None }, + Key { lhs: "am", rhs: Some("ClaudeCodeSelectModel"), desc: "Select Claude model", mode: None, ft: None }, + Key { lhs: "ab", rhs: Some("ClaudeCodeAdd %"), desc: "Add current buffer", mode: None, ft: None }, + Key { lhs: "as", rhs: Some("ClaudeCodeSend"), desc: "Send to Claude", mode: Some("v"), ft: None }, + Key { lhs: "as", rhs: Some("ClaudeCodeTreeAdd"), desc: "Add file", mode: None, ft: Some(&["NvimTree", "neo-tree", "oil", "minifiles", "netrw"]) }, + // Diff management + Key { lhs: "aa", rhs: Some("ClaudeCodeDiffAccept"), desc: "Accept diff", mode: None, ft: None }, + Key { lhs: "ad", rhs: Some("ClaudeCodeDiffDeny"), desc: "Deny diff", mode: None, ft: None }, + ], +};