diff --git a/hm/vim.nix b/hm/vim.nix index 4ee9cf2..ad0e8f3 100644 --- a/hm/vim.nix +++ b/hm/vim.nix @@ -1,9 +1,21 @@ { pkgs, ... }: let vp = pkgs.vimPlugins; + goose-nvim = pkgs.vimUtils.buildVimPlugin { + pname = "goose-nvim"; + version = "2024-11-14"; + src = pkgs.fetchFromGitHub { + owner = "azorng"; + repo = "goose.nvim"; + rev = "0698a59bfad00018cbe450be8d8e0896c46def80"; + sha256 = "sha256-3Qj3HTrMX2dIPvK6/Z6pILZj7Xr2RZ33NwYCpu50vW4="; + }; + dependencies = [ vp.plenary-nvim ]; + meta.homepage = "https://github.com/azorng/goose.nvim"; + }; in { - home.packages = [ pkgs.nodePackages.prettier ]; + home.packages = [ pkgs.nodePackages.prettier pkgs.goose-cli ]; programs.neovim = { enable = true; @@ -376,6 +388,81 @@ in ollama.setup(conf) ''; } + + { + plugin = goose-nvim; + type = "lua"; + config = '' + require('goose').setup({ + prefered_picker = nil, -- 'telescope', 'fzf', 'mini.pick', 'snacks', if nil, it will use the best available picker + default_global_keymaps = true, -- If false, disables all default global keymaps + keymap = { + global = { + toggle = 'gg', -- Open goose. Close if opened + open_input = 'gi', -- Opens and focuses on input window on insert mode + open_input_new_session = 'gI', -- Opens and focuses on input window on insert mode. Creates a new session + open_output = 'go', -- Opens and focuses on output window + toggle_focus = 'gt', -- Toggle focus between goose and last window + close = 'gq', -- Close UI windows + toggle_fullscreen = 'gf', -- Toggle between normal and fullscreen mode + select_session = 'gs', -- Select and load a goose session + goose_mode_chat = 'gmc', -- Set goose mode to `chat`. (Tool calling disabled. No editor context besides selections) + goose_mode_auto = 'gma', -- Set goose mode to `auto`. (Default mode with full agent capabilities) + configure_provider = 'gp', -- Quick provider and model switch from predefined list + diff_open = 'gd', -- Opens a diff tab of a modified file since the last goose prompt + diff_next = 'g]', -- Navigate to next file diff + diff_prev = 'g[', -- Navigate to previous file diff + diff_close = 'gc', -- Close diff view tab and return to normal editing + diff_revert_all = 'gra', -- Revert all file changes since the last goose prompt + diff_revert_this = 'grt', -- Revert current file changes since the last goose prompt + }, + window = { + submit = '', -- Submit prompt (normal mode) + submit_insert = '', -- Submit prompt (insert mode) + close = '', -- Close UI windows + stop = '', -- Stop goose while it is running + next_message = ']]', -- Navigate to next message in the conversation + prev_message = '[[', -- Navigate to previous message in the conversation + mention_file = '@', -- Pick a file and add to context. See File Mentions section + toggle_pane = '', -- Toggle between input and output panes + prev_prompt_history = '', -- Navigate to previous prompt in history + next_prompt_history = '' -- Navigate to next prompt in history + } + }, + ui = { + window_width = 0.35, -- Width as percentage of editor width + input_height = 0.15, -- Input height as percentage of window height + fullscreen = false, -- Start in fullscreen mode (default: false) + layout = "right", -- Options: "center" or "right" + floating_height = 0.8, -- Height as percentage of editor height for "center" layout + display_model = true, -- Display model name on top winbar + display_goose_mode = true -- Display mode on top winbar: auto|chat + }, + providers = { + --[[ + Define available providers and their models for quick model switching + anthropic|azure|bedrock|databricks|google|groq|ollama|openai|openrouter + Example: + -- openrouter = { + -- "anthropic/claude-3.5-sonnet", + -- "openai/gpt-4.1", + -- }, + --]] + ollama = { + "codegemma:7b", + "deepseek-r1:14b", + "deepseek-r1:7b", + "embeddinggemma:latest", + "gemma3:12b", + "gemma3:latest", + "granite4:tiny-h", + "qwen3:14b", + "qwen3:latest" + } + } + }) + ''; + } ]; # settings = { ignorecase = true; };