mirror of
https://github.com/NotAShelf/nvf.git
synced 2025-11-12 00:15:30 +00:00
assistant/codecompanion-nvim: init
This commit is contained in:
parent
5fbc72d697
commit
53ebb39162
7 changed files with 278 additions and 1 deletions
|
|
@ -233,6 +233,7 @@ isMaximal: {
|
||||||
enable = false;
|
enable = false;
|
||||||
cmp.enable = isMaximal;
|
cmp.enable = isMaximal;
|
||||||
};
|
};
|
||||||
|
codecompanion-nvim.enable = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
session = {
|
session = {
|
||||||
|
|
|
||||||
|
|
@ -149,11 +149,12 @@
|
||||||
[ARCIII](https://github.com/ArmandoCIII):
|
[ARCIII](https://github.com/ArmandoCIII):
|
||||||
|
|
||||||
[leetcode.nvim]: https://github.com/kawre/leetcode.nvim
|
[leetcode.nvim]: https://github.com/kawre/leetcode.nvim
|
||||||
|
[codecompanion-nvim]: https://github.com/olimorris/codecompanion.nvim
|
||||||
|
|
||||||
- Add `vim.languages.zig.dap` support through pkgs.lldb dap adapter. Code
|
- Add `vim.languages.zig.dap` support through pkgs.lldb dap adapter. Code
|
||||||
Inspiration from `vim.languages.clang.dap` implementation.
|
Inspiration from `vim.languages.clang.dap` implementation.
|
||||||
- Add [leetcode.nvim] plugin under `vim.utility.leetcode-nvim`.
|
- Add [leetcode.nvim] plugin under `vim.utility.leetcode-nvim`.
|
||||||
|
- Add [codecompanion.nvim] plugin under `vim.assistant.codecompanion-nvim`.
|
||||||
|
|
||||||
[nezia1](https://github.com/nezia1)
|
[nezia1](https://github.com/nezia1)
|
||||||
|
|
||||||
|
|
|
||||||
230
modules/plugins/assistant/codecompanion/codecompanion-nvim.nix
Normal file
230
modules/plugins/assistant/codecompanion/codecompanion-nvim.nix
Normal file
|
|
@ -0,0 +1,230 @@
|
||||||
|
{lib, ...}: let
|
||||||
|
inherit (lib.options) mkOption mkEnableOption;
|
||||||
|
inherit (lib.types) int str enum nullOr attrs;
|
||||||
|
inherit (lib.nvim.types) mkPluginSetupOption luaInline;
|
||||||
|
in {
|
||||||
|
options.vim.assistant = {
|
||||||
|
codecompanion-nvim = {
|
||||||
|
enable = mkEnableOption "complementary neovim plugin for codecompanion.nvim";
|
||||||
|
|
||||||
|
setupOpts = mkPluginSetupOption "codecompanion-nvim" {
|
||||||
|
opts = {
|
||||||
|
send_code = mkEnableOption "code from being sent to the LLM.";
|
||||||
|
|
||||||
|
log_level = mkOption {
|
||||||
|
type = enum [
|
||||||
|
"DEBUG"
|
||||||
|
"INFO"
|
||||||
|
"ERROR"
|
||||||
|
"TRACE"
|
||||||
|
];
|
||||||
|
default = "ERROR";
|
||||||
|
description = "Change the level of logging.";
|
||||||
|
};
|
||||||
|
|
||||||
|
language = mkOption {
|
||||||
|
type = str;
|
||||||
|
default = "English";
|
||||||
|
description = "Specify which language an LLM should respond in.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
display = {
|
||||||
|
diff = {
|
||||||
|
enabled = mkEnableOption "a diff to be created so you can see the changes made by the LLM." // {default = true;};
|
||||||
|
|
||||||
|
close_chat_at = mkOption {
|
||||||
|
type = int;
|
||||||
|
default = 240;
|
||||||
|
description = "Close an open chat buffer if the total columns of your display are less than...";
|
||||||
|
};
|
||||||
|
|
||||||
|
layout = mkOption {
|
||||||
|
type = enum [
|
||||||
|
"vertical"
|
||||||
|
"horizontal"
|
||||||
|
];
|
||||||
|
default = "vertical";
|
||||||
|
description = "Type of split for default provider.";
|
||||||
|
};
|
||||||
|
|
||||||
|
provider = mkOption {
|
||||||
|
type = enum [
|
||||||
|
"default"
|
||||||
|
"mini_diff"
|
||||||
|
];
|
||||||
|
default = "default";
|
||||||
|
description = "The preferred kind of provider.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
inline = {
|
||||||
|
layout = mkOption {
|
||||||
|
type = enum [
|
||||||
|
"vertical"
|
||||||
|
"horizontal"
|
||||||
|
"buffer"
|
||||||
|
];
|
||||||
|
default = "vertical";
|
||||||
|
description = "Customize how output is created in new buffer.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
chat = {
|
||||||
|
show_header_separator = mkEnableOption "show header separators in the chat buffer? Set this to false if you're using an external markdown formatting plugin.";
|
||||||
|
show_references = mkEnableOption "show references (from slash commands and variables) in the chat buffer." // {default = true;};
|
||||||
|
show_settings = mkEnableOption "show LLM settings at the top of the chat buffer.";
|
||||||
|
show_token_count = mkEnableOption "show the token count for each response." // {default = true;};
|
||||||
|
start_in_insert_mode = mkEnableOption "open the chat buffer in insert mode.";
|
||||||
|
auto_scroll = mkEnableOption "automatic page scrolling.";
|
||||||
|
|
||||||
|
intro_message = mkOption {
|
||||||
|
type = str;
|
||||||
|
default = "Welcome to CodeCompanion ✨! Press ? for options.";
|
||||||
|
description = "Message to appear in chat buffer.";
|
||||||
|
};
|
||||||
|
|
||||||
|
separator = mkOption {
|
||||||
|
type = str;
|
||||||
|
default = "─";
|
||||||
|
description = "The separator between the different messages in the chat buffer.";
|
||||||
|
};
|
||||||
|
|
||||||
|
icons = {
|
||||||
|
pinned_buffer = mkOption {
|
||||||
|
type = str;
|
||||||
|
default = " ";
|
||||||
|
description = "The icon to represent a pinned buffer.";
|
||||||
|
};
|
||||||
|
|
||||||
|
watched_buffer = mkOption {
|
||||||
|
type = str;
|
||||||
|
default = "👀 ";
|
||||||
|
description = "The icon to represent a watched buffer.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
action_palette = {
|
||||||
|
width = mkOption {
|
||||||
|
type = int;
|
||||||
|
default = 95;
|
||||||
|
description = "Width of the action palette.";
|
||||||
|
};
|
||||||
|
|
||||||
|
height = mkOption {
|
||||||
|
type = int;
|
||||||
|
default = 10;
|
||||||
|
description = "Height of the action palette.";
|
||||||
|
};
|
||||||
|
|
||||||
|
prompt = mkOption {
|
||||||
|
type = str;
|
||||||
|
default = "Prompt ";
|
||||||
|
description = "Prompt used for interactive LLM calls.";
|
||||||
|
};
|
||||||
|
|
||||||
|
provider = mkOption {
|
||||||
|
type = enum [
|
||||||
|
"default"
|
||||||
|
"telescope"
|
||||||
|
"mini_pick"
|
||||||
|
];
|
||||||
|
default = "default";
|
||||||
|
description = "Provider used for the action palette.";
|
||||||
|
};
|
||||||
|
|
||||||
|
opts = {
|
||||||
|
show_default_actions = mkEnableOption "show the default actions in the action palette?" // {default = true;};
|
||||||
|
show_default_prompt_library = mkEnableOption "show the default prompt library in the action palette?" // {default = true;};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
adapters = mkOption {
|
||||||
|
type = nullOr luaInline;
|
||||||
|
default = null;
|
||||||
|
description = "An adapter is what connects Neovim to an LLM.";
|
||||||
|
};
|
||||||
|
|
||||||
|
strategies = {
|
||||||
|
chat = {
|
||||||
|
adapter = mkOption {
|
||||||
|
type = nullOr str;
|
||||||
|
default = null;
|
||||||
|
description = "Adapter used for the chat strategy.";
|
||||||
|
};
|
||||||
|
|
||||||
|
keymaps = mkOption {
|
||||||
|
type = nullOr attrs;
|
||||||
|
default = null;
|
||||||
|
description = "Define or override the default keymaps.";
|
||||||
|
};
|
||||||
|
|
||||||
|
variables = mkOption {
|
||||||
|
type = nullOr luaInline;
|
||||||
|
default = null;
|
||||||
|
description = "Define your own variables to share specific content.";
|
||||||
|
};
|
||||||
|
|
||||||
|
slash_commands = mkOption {
|
||||||
|
type = nullOr luaInline;
|
||||||
|
default = null;
|
||||||
|
description = "Slash Commands (invoked with /) let you dynamically insert context into the chat buffer, such as file contents or date/time.";
|
||||||
|
};
|
||||||
|
|
||||||
|
tools = mkOption {
|
||||||
|
type = nullOr attrs;
|
||||||
|
default = null;
|
||||||
|
description = "Tools perform specific tasks (e.g., running shell commands, editing buffers, etc.) when invoked by an LLM.";
|
||||||
|
};
|
||||||
|
|
||||||
|
roles = mkOption {
|
||||||
|
type = nullOr luaInline;
|
||||||
|
default = null;
|
||||||
|
description = "The chat buffer places user and LLM responses under a H2 header. These can be customized in the configuration";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
inline = {
|
||||||
|
adapter = mkOption {
|
||||||
|
type = nullOr str;
|
||||||
|
default = null;
|
||||||
|
description = "Adapter used for the inline strategy.";
|
||||||
|
};
|
||||||
|
|
||||||
|
variables = mkOption {
|
||||||
|
type = nullOr luaInline;
|
||||||
|
default = null;
|
||||||
|
description = "Define your own variables to share specific content.";
|
||||||
|
};
|
||||||
|
|
||||||
|
keymaps = {
|
||||||
|
accept_change = {
|
||||||
|
n = mkOption {
|
||||||
|
type = str;
|
||||||
|
default = "ga";
|
||||||
|
description = "Accept the suggested change.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
reject_change = {
|
||||||
|
n = mkOption {
|
||||||
|
type = str;
|
||||||
|
default = "gr";
|
||||||
|
description = "Reject the suggested change.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
prompt_library = mkOption {
|
||||||
|
type = nullOr attrs;
|
||||||
|
default = null;
|
||||||
|
description = "A prompt library is a collection of prompts that can be used in the action palette.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
26
modules/plugins/assistant/codecompanion/config.nix
Normal file
26
modules/plugins/assistant/codecompanion/config.nix
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (lib.modules) mkIf;
|
||||||
|
|
||||||
|
cfg = config.vim.assistant.codecompanion-nvim;
|
||||||
|
in {
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
vim = {
|
||||||
|
startPlugins = [
|
||||||
|
"plenary-nvim"
|
||||||
|
"nvim-treesitter"
|
||||||
|
];
|
||||||
|
|
||||||
|
lazy.plugins = {
|
||||||
|
codecompanion-nvim = {
|
||||||
|
package = "codecompanion-nvim";
|
||||||
|
setupModule = "codecompanion";
|
||||||
|
inherit (cfg) setupOpts;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
6
modules/plugins/assistant/codecompanion/default.nix
Normal file
6
modules/plugins/assistant/codecompanion/default.nix
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./config.nix
|
||||||
|
./codecompanion-nvim.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
@ -2,5 +2,6 @@
|
||||||
imports = [
|
imports = [
|
||||||
./chatgpt
|
./chatgpt
|
||||||
./copilot
|
./copilot
|
||||||
|
./codecompanion
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -207,6 +207,18 @@
|
||||||
"url": "https://github.com/ray-x/cmp-treesitter/archive/958fcfa0d8ce46d215e19cc3992c542f576c4123.tar.gz",
|
"url": "https://github.com/ray-x/cmp-treesitter/archive/958fcfa0d8ce46d215e19cc3992c542f576c4123.tar.gz",
|
||||||
"hash": "05as01c2f7i20zkzpqbq9n8ji9bcwd678ixmxnrz9vmz5zsj8q7i"
|
"hash": "05as01c2f7i20zkzpqbq9n8ji9bcwd678ixmxnrz9vmz5zsj8q7i"
|
||||||
},
|
},
|
||||||
|
"codecompanion-nvim": {
|
||||||
|
"type": "Git",
|
||||||
|
"repository": {
|
||||||
|
"type": "GitHub",
|
||||||
|
"owner": "olimorris",
|
||||||
|
"repo": "codecompanion.nvim"
|
||||||
|
},
|
||||||
|
"branch": "main",
|
||||||
|
"revision": "dd81bd9176daba9ea507cd0457f662c0a15c001f",
|
||||||
|
"url": "https://github.com/olimorris/codecompanion.nvim/archive/dd81bd9176daba9ea507cd0457f662c0a15c001f.tar.gz",
|
||||||
|
"hash": "09a20q1hshp07nf9n8w4cxpa8s32vwyd4ya0gdnx5jp7g00dksrg"
|
||||||
|
},
|
||||||
"codewindow-nvim": {
|
"codewindow-nvim": {
|
||||||
"type": "Git",
|
"type": "Git",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue