plugins/copilot-chat: helpers -> lib.nixvim

This commit is contained in:
Heitor Augusto 2025-05-18 15:26:09 -03:00
parent 68dd111eb3
commit 928fc1a16f
No known key found for this signature in database
GPG key ID: 53C04F8F46A1A344

View file

@ -1,10 +1,7 @@
{
lib,
helpers,
...
}:
{ lib, ... }:
let
inherit (lib) types;
inherit (lib.nixvim) defaultNullOpts;
in
lib.nixvim.plugins.mkNeovimPlugin {
name = "copilot-chat";
@ -15,72 +12,72 @@ lib.nixvim.plugins.mkNeovimPlugin {
maintainers = [ lib.maintainers.GaetanLepage ];
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"
@ -90,18 +87,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')
@ -118,22 +115,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`
'';
@ -172,13 +169,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"
@ -190,23 +187,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"
@ -219,7 +212,7 @@ lib.nixvim.plugins.mkNeovimPlugin {
'';
border =
helpers.defaultNullOpts.mkEnum
defaultNullOpts.mkEnum
[
"none"
"single"
@ -234,39 +227,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.";
};
})
{