Skip to content

plugins/copilot-chat: remove with lib, helpers -> lib.nixvim and add curl dependency #3340

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
May 18, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 50 additions & 53 deletions plugins/by-name/copilot-chat/default.nix
Original file line number Diff line number Diff line change
@@ -1,84 +1,85 @@
{
lib,
helpers,
...
}:
with lib;
{ lib, ... }:
let
inherit (lib) types;
inherit (lib.nixvim) defaultNullOpts;
in
lib.nixvim.plugins.mkNeovimPlugin {
name = "copilot-chat";
packPathName = "CopilotChat.nvim";
moduleName = "CopilotChat";
package = "CopilotChat-nvim";

maintainers = [ maintainers.GaetanLepage ];
maintainers = [ lib.maintainers.GaetanLepage ];

dependencies = [ "curl" ];

settingsOptions = {
debug = helpers.defaultNullOpts.mkBool false ''
debug = defaultNullOpts.mkBool false ''
Enable debug logging.
'';

proxy = helpers.defaultNullOpts.mkStr null ''
proxy = defaultNullOpts.mkStr null ''
Custom proxy to use, formatted as `[protocol://]host[:port]`.
'';

allow_insecure = helpers.defaultNullOpts.mkBool false ''
allow_insecure = defaultNullOpts.mkBool false ''
Allow insecure server connections.
'';

system_prompt = helpers.defaultNullOpts.mkLua "require('CopilotChat.prompts').COPILOT_INSTRUCTIONS" ''
system_prompt = defaultNullOpts.mkLua "require('CopilotChat.prompts').COPILOT_INSTRUCTIONS" ''
System prompt to use.
'';

model = helpers.defaultNullOpts.mkStr "gpt-4" ''
model = defaultNullOpts.mkStr "gpt-4" ''
GPT model to use, 'gpt-3.5-turbo' or 'gpt-4'.
'';

temperature = helpers.defaultNullOpts.mkProportion 0.1 ''
temperature = defaultNullOpts.mkProportion 0.1 ''
GPT temperature.
'';

question_header = helpers.defaultNullOpts.mkStr "## User " ''
question_header = defaultNullOpts.mkStr "## User " ''
Header to use for user questions.
'';

answer_header = helpers.defaultNullOpts.mkStr "## Copilot " ''
answer_header = defaultNullOpts.mkStr "## Copilot " ''
Header to use for AI answers.
'';

error_header = helpers.defaultNullOpts.mkStr "## Error " ''
error_header = defaultNullOpts.mkStr "## Error " ''
Header to use for errors.
'';

separator = helpers.defaultNullOpts.mkStr "───" ''
separator = defaultNullOpts.mkStr "───" ''
Separator to use in chat.
'';

show_folds = helpers.defaultNullOpts.mkBool true ''
show_folds = defaultNullOpts.mkBool true ''
Shows folds for sections in chat.
'';

show_help = helpers.defaultNullOpts.mkBool true ''
show_help = defaultNullOpts.mkBool true ''
Shows help message as virtual lines when waiting for user input.
'';

auto_follow_cursor = helpers.defaultNullOpts.mkBool true ''
auto_follow_cursor = defaultNullOpts.mkBool true ''
Auto-follow cursor in chat.
'';

auto_insert_mode = helpers.defaultNullOpts.mkBool false ''
auto_insert_mode = defaultNullOpts.mkBool false ''
Automatically enter insert mode when opening window and if auto follow cursor is enabled on new prompt.
'';

clear_chat_on_new_prompt = helpers.defaultNullOpts.mkBool false ''
clear_chat_on_new_prompt = defaultNullOpts.mkBool false ''
Clears chat on every new prompt.
'';

highlight_selection = helpers.defaultNullOpts.mkBool true ''
highlight_selection = defaultNullOpts.mkBool true ''
Highlight selection.
'';

context =
helpers.defaultNullOpts.mkEnum
defaultNullOpts.mkEnum
[
"buffers"
"buffer"
Expand All @@ -88,18 +89,18 @@ lib.nixvim.plugins.mkNeovimPlugin {
Default context to use, `"buffers"`, `"buffer"` or `null` (can be specified manually in prompt via @).
'';

history_path = helpers.defaultNullOpts.mkStr (helpers.mkRaw "vim.fn.stdpath('data') .. '/copilotchat_history'") ''
history_path = defaultNullOpts.mkStr (lib.nixvim.mkRaw "vim.fn.stdpath('data') .. '/copilotchat_history'") ''
Default path to stored history.
'';

callback = helpers.defaultNullOpts.mkLuaFn null ''
callback = defaultNullOpts.mkLuaFn null ''
Callback to use when ask response is received.

`fun(response: string, source: CopilotChat.config.source)`
'';

selection =
helpers.defaultNullOpts.mkLuaFn
defaultNullOpts.mkLuaFn
''
function(source)
local select = require('CopilotChat.select')
Expand All @@ -116,22 +117,22 @@ lib.nixvim.plugins.mkNeovimPlugin {
promptType = types.submodule {
freeformType = with types; attrsOf anything;
options = {
prompt = helpers.mkNullOrStr "Prompt text.";
prompt = lib.nixvim.mkNullOrStr "Prompt text.";

description = helpers.mkNullOrStr "Description for this prompt.";
description = lib.nixvim.mkNullOrStr "Description for this prompt.";

kind = helpers.mkNullOrStr "Kind of this prompt.";
kind = lib.nixvim.mkNullOrStr "Kind of this prompt.";

mapping = helpers.mkNullOrStr "A key to bind to this prompt.";
mapping = lib.nixvim.mkNullOrStr "A key to bind to this prompt.";

system_prompt = helpers.mkNullOrStr "System prompt to use.";
system_prompt = lib.nixvim.mkNullOrStr "System prompt to use.";

callback = helpers.mkNullOrLuaFn ''
callback = lib.nixvim.mkNullOrLuaFn ''
Callback to trigger when this prompt is executed.
`fun(response: string, source: CopilotChat.config.source)`
'';

selection = helpers.mkNullOrLuaFn ''
selection = lib.nixvim.mkNullOrLuaFn ''
Selection for this prompt.
`fun(source: CopilotChat.config.source):CopilotChat.config.selection`
'';
Expand Down Expand Up @@ -170,13 +171,13 @@ lib.nixvim.plugins.mkNeovimPlugin {
};
};
in
helpers.defaultNullOpts.mkAttrsOf (with types; either str promptType) default ''
defaultNullOpts.mkAttrsOf (with types; either str promptType) default ''
Default prompts.
'';

window = {
layout =
helpers.defaultNullOpts.mkEnumFirstDefault
defaultNullOpts.mkEnumFirstDefault
[
"vertical"
"horizontal"
Expand All @@ -188,23 +189,19 @@ lib.nixvim.plugins.mkNeovimPlugin {
'';

width =
helpers.defaultNullOpts.mkNullableWithRaw
(with types; either (numbers.between 0.0 1.0) ints.positive)
0.5
defaultNullOpts.mkNullableWithRaw (with types; either (numbers.between 0.0 1.0) ints.positive) 0.5
''
Fractional width of parent, or absolute width in columns when > 1.
'';

height =
helpers.defaultNullOpts.mkNullableWithRaw
(with types; either (numbers.between 0.0 1.0) ints.positive)
0.5
defaultNullOpts.mkNullableWithRaw (with types; either (numbers.between 0.0 1.0) ints.positive) 0.5
''
Fractional height of parent, or absolute height in rows when > 1.
'';

relative =
helpers.defaultNullOpts.mkEnumFirstDefault
defaultNullOpts.mkEnumFirstDefault
[
"editor"
"win"
Expand All @@ -217,7 +214,7 @@ lib.nixvim.plugins.mkNeovimPlugin {
'';

border =
helpers.defaultNullOpts.mkEnum
defaultNullOpts.mkEnum
[
"none"
"single"
Expand All @@ -232,39 +229,39 @@ lib.nixvim.plugins.mkNeovimPlugin {
(Only for floating windows.)
'';

row = helpers.defaultNullOpts.mkUnsignedInt null ''
row = defaultNullOpts.mkUnsignedInt null ''
Row position of the window, default is centered.
(Only for floating windows.)
'';

col = helpers.defaultNullOpts.mkUnsignedInt null ''
col = defaultNullOpts.mkUnsignedInt null ''
Column position of the window, default is centered.
(Only for floating windows.)
'';

title = helpers.defaultNullOpts.mkStr "Copilot Chat" ''
title = defaultNullOpts.mkStr "Copilot Chat" ''
Title of chat window.
'';

footer = helpers.defaultNullOpts.mkStr null ''
footer = defaultNullOpts.mkStr null ''
Footer of chat window.
'';

zindex = helpers.defaultNullOpts.mkUnsignedInt 1 ''
zindex = defaultNullOpts.mkUnsignedInt 1 ''
Determines if window is on top or below other floating windows.
'';
};

mappings =
helpers.defaultNullOpts.mkAttrsOf
defaultNullOpts.mkAttrsOf
(types.submodule {
freeformType = with types; attrsOf anything;
options = {
normal = helpers.mkNullOrStr "Key for normal mode.";
normal = lib.nixvim.mkNullOrStr "Key for normal mode.";

insert = helpers.mkNullOrStr "Key for insert mode.";
insert = lib.nixvim.mkNullOrStr "Key for insert mode.";

detail = helpers.mkNullOrStr "A description for this binding.";
detail = lib.nixvim.mkNullOrStr "A description for this binding.";
};
})
{
Expand Down