From f0851b44dec5095fc45cd71c86cc3e3c734b6d74 Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Mon, 20 Oct 2025 23:09:15 -0400 Subject: [PATCH] refactor(nvim): simplify lazy loading configuration --- lua/plugins/astrocore.lua | 14 ++++++++++++- lua/plugins/claude.lua | 41 ++++++++++++++++++++++++++------------- 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/lua/plugins/astrocore.lua b/lua/plugins/astrocore.lua index 7f2dd9a..a757729 100644 --- a/lua/plugins/astrocore.lua +++ b/lua/plugins/astrocore.lua @@ -402,7 +402,17 @@ return { end, desc = "Find Service files", }, - -- AI/Assistant mappings + -- AI/Assistant mappings (Claude Code) + [""] = { nil, desc = "AI/Claude Code" }, + [""] = { function() _G.claude_at_root("ClaudeCode")() end, desc = "Toggle Claude" }, + ["f"] = { function() _G.claude_at_root("ClaudeCodeFocus")() end, desc = "Focus Claude" }, + ["C"] = { function() _G.claude_at_root("ClaudeCode --resume")() end, desc = "Resume Claude" }, + ["c"] = { function() _G.claude_at_root("ClaudeCode --continue")() end, desc = "Continue Claude" }, + ["m"] = { "ClaudeCodeSelectModel", desc = "Select Claude model" }, + ["b"] = { "ClaudeCodeAdd %", desc = "Add current buffer" }, + ["y"] = { "ClaudeCodeDiffAccept", desc = "Accept diff" }, + ["n"] = { "ClaudeCodeDiffDeny", desc = "Deny diff" }, + -- Taskfile [""] = { terminals.mk_toggle, desc = "Taskfile Toggle" }, }, i = { @@ -413,6 +423,8 @@ return { [""] = { "Neotree toggle", desc = "Open Explorer" }, [""] = { "wbd", desc = "Save and close buffer" }, -- Modified to save and close buffer [""] = { "wbd", desc = "Save and close buffer" }, -- Added C-x for visual mode + -- Claude Code visual mode + [""] = { "ClaudeCodeSend", desc = "Send to Claude" }, ["D"] = { function() -- Yank the visual selection to register v diff --git a/lua/plugins/claude.lua b/lua/plugins/claude.lua index 9e063c1..ebe1350 100644 --- a/lua/plugins/claude.lua +++ b/lua/plugins/claude.lua @@ -1,24 +1,39 @@ return { "coder/claudecode.nvim", dependencies = { "folke/snacks.nvim" }, - config = true, + config = function() + require("claudecode").setup() + + -- Helper function to get git root and change directory + local function ensure_git_root() + local git_root = vim.fn.systemlist("git rev-parse --show-toplevel")[1] + if git_root and vim.v.shell_error == 0 then + vim.api.nvim_set_current_dir(git_root) + end + end + + -- Wrapper function to run commands at git root + _G.claude_at_root = function(cmd) + return function() + ensure_git_root() + vim.cmd(cmd) + end + end + + -- Create autocommand to ensure we're at git root when opening Claude Code + vim.api.nvim_create_autocmd("User", { + pattern = "ClaudeCodeOpen", + callback = ensure_git_root, + desc = "Change to git root when opening Claude Code", + }) + end, + -- Filetype-specific keybindings (kept here since they require ft detection) keys = { - { "", nil, desc = "AI/Claude Code" }, - { "", "ClaudeCode", desc = "Toggle Claude" }, - { "f", "ClaudeCodeFocus", desc = "Focus Claude" }, - { "C", "ClaudeCode --resume", desc = "Resume Claude" }, - { "c", "ClaudeCode --continue", desc = "Continue Claude" }, - { "m", "ClaudeCodeSelectModel", desc = "Select Claude model" }, - { "b", "ClaudeCodeAdd %", desc = "Add current buffer" }, - { "", "ClaudeCodeSend", mode = "v", desc = "Send to Claude" }, { "", "ClaudeCodeTreeAdd", - desc = "Add file", + desc = "Add file from explorer", ft = { "NvimTree", "neo-tree", "oil", "minifiles", "netrw" }, }, - -- Diff management - { "y", "ClaudeCodeDiffAccept", desc = "Accept diff" }, - { "n", "ClaudeCodeDiffDeny", desc = "Deny diff" }, }, }