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, ... }:
lib,
helpers,
...
}:
let let
inherit (lib) types; inherit (lib) types;
inherit (lib.nixvim) defaultNullOpts;
in in
lib.nixvim.plugins.mkNeovimPlugin { lib.nixvim.plugins.mkNeovimPlugin {
name = "copilot-chat"; name = "copilot-chat";
@ -15,72 +12,72 @@ lib.nixvim.plugins.mkNeovimPlugin {
maintainers = [ lib.maintainers.GaetanLepage ]; maintainers = [ lib.maintainers.GaetanLepage ];
settingsOptions = { settingsOptions = {
debug = helpers.defaultNullOpts.mkBool false '' debug = defaultNullOpts.mkBool false ''
Enable debug logging. Enable debug logging.
''; '';
proxy = helpers.defaultNullOpts.mkStr null '' proxy = defaultNullOpts.mkStr null ''
Custom proxy to use, formatted as `[protocol://]host[:port]`. Custom proxy to use, formatted as `[protocol://]host[:port]`.
''; '';
allow_insecure = helpers.defaultNullOpts.mkBool false '' allow_insecure = defaultNullOpts.mkBool false ''
Allow insecure server connections. 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. 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'. GPT model to use, 'gpt-3.5-turbo' or 'gpt-4'.
''; '';
temperature = helpers.defaultNullOpts.mkProportion 0.1 '' temperature = defaultNullOpts.mkProportion 0.1 ''
GPT temperature. GPT temperature.
''; '';
question_header = helpers.defaultNullOpts.mkStr "## User " '' question_header = defaultNullOpts.mkStr "## User " ''
Header to use for user questions. Header to use for user questions.
''; '';
answer_header = helpers.defaultNullOpts.mkStr "## Copilot " '' answer_header = defaultNullOpts.mkStr "## Copilot " ''
Header to use for AI answers. Header to use for AI answers.
''; '';
error_header = helpers.defaultNullOpts.mkStr "## Error " '' error_header = defaultNullOpts.mkStr "## Error " ''
Header to use for errors. Header to use for errors.
''; '';
separator = helpers.defaultNullOpts.mkStr "" '' separator = defaultNullOpts.mkStr "" ''
Separator to use in chat. Separator to use in chat.
''; '';
show_folds = helpers.defaultNullOpts.mkBool true '' show_folds = defaultNullOpts.mkBool true ''
Shows folds for sections in chat. 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. 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-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. 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. Clears chat on every new prompt.
''; '';
highlight_selection = helpers.defaultNullOpts.mkBool true '' highlight_selection = defaultNullOpts.mkBool true ''
Highlight selection. Highlight selection.
''; '';
context = context =
helpers.defaultNullOpts.mkEnum defaultNullOpts.mkEnum
[ [
"buffers" "buffers"
"buffer" "buffer"
@ -90,18 +87,18 @@ lib.nixvim.plugins.mkNeovimPlugin {
Default context to use, `"buffers"`, `"buffer"` or `null` (can be specified manually in prompt via @). 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. Default path to stored history.
''; '';
callback = helpers.defaultNullOpts.mkLuaFn null '' callback = defaultNullOpts.mkLuaFn null ''
Callback to use when ask response is received. Callback to use when ask response is received.
`fun(response: string, source: CopilotChat.config.source)` `fun(response: string, source: CopilotChat.config.source)`
''; '';
selection = selection =
helpers.defaultNullOpts.mkLuaFn defaultNullOpts.mkLuaFn
'' ''
function(source) function(source)
local select = require('CopilotChat.select') local select = require('CopilotChat.select')
@ -118,22 +115,22 @@ lib.nixvim.plugins.mkNeovimPlugin {
promptType = types.submodule { promptType = types.submodule {
freeformType = with types; attrsOf anything; freeformType = with types; attrsOf anything;
options = { 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. Callback to trigger when this prompt is executed.
`fun(response: string, source: CopilotChat.config.source)` `fun(response: string, source: CopilotChat.config.source)`
''; '';
selection = helpers.mkNullOrLuaFn '' selection = lib.nixvim.mkNullOrLuaFn ''
Selection for this prompt. Selection for this prompt.
`fun(source: CopilotChat.config.source):CopilotChat.config.selection` `fun(source: CopilotChat.config.source):CopilotChat.config.selection`
''; '';
@ -172,13 +169,13 @@ lib.nixvim.plugins.mkNeovimPlugin {
}; };
}; };
in in
helpers.defaultNullOpts.mkAttrsOf (with types; either str promptType) default '' defaultNullOpts.mkAttrsOf (with types; either str promptType) default ''
Default prompts. Default prompts.
''; '';
window = { window = {
layout = layout =
helpers.defaultNullOpts.mkEnumFirstDefault defaultNullOpts.mkEnumFirstDefault
[ [
"vertical" "vertical"
"horizontal" "horizontal"
@ -190,23 +187,19 @@ lib.nixvim.plugins.mkNeovimPlugin {
''; '';
width = width =
helpers.defaultNullOpts.mkNullableWithRaw defaultNullOpts.mkNullableWithRaw (with types; either (numbers.between 0.0 1.0) ints.positive) 0.5
(with types; either (numbers.between 0.0 1.0) ints.positive)
0.5
'' ''
Fractional width of parent, or absolute width in columns when > 1. Fractional width of parent, or absolute width in columns when > 1.
''; '';
height = height =
helpers.defaultNullOpts.mkNullableWithRaw defaultNullOpts.mkNullableWithRaw (with types; either (numbers.between 0.0 1.0) ints.positive) 0.5
(with types; either (numbers.between 0.0 1.0) ints.positive)
0.5
'' ''
Fractional height of parent, or absolute height in rows when > 1. Fractional height of parent, or absolute height in rows when > 1.
''; '';
relative = relative =
helpers.defaultNullOpts.mkEnumFirstDefault defaultNullOpts.mkEnumFirstDefault
[ [
"editor" "editor"
"win" "win"
@ -219,7 +212,7 @@ lib.nixvim.plugins.mkNeovimPlugin {
''; '';
border = border =
helpers.defaultNullOpts.mkEnum defaultNullOpts.mkEnum
[ [
"none" "none"
"single" "single"
@ -234,39 +227,39 @@ lib.nixvim.plugins.mkNeovimPlugin {
(Only for floating windows.) (Only for floating windows.)
''; '';
row = helpers.defaultNullOpts.mkUnsignedInt null '' row = defaultNullOpts.mkUnsignedInt null ''
Row position of the window, default is centered. Row position of the window, default is centered.
(Only for floating windows.) (Only for floating windows.)
''; '';
col = helpers.defaultNullOpts.mkUnsignedInt null '' col = defaultNullOpts.mkUnsignedInt null ''
Column position of the window, default is centered. Column position of the window, default is centered.
(Only for floating windows.) (Only for floating windows.)
''; '';
title = helpers.defaultNullOpts.mkStr "Copilot Chat" '' title = defaultNullOpts.mkStr "Copilot Chat" ''
Title of chat window. Title of chat window.
''; '';
footer = helpers.defaultNullOpts.mkStr null '' footer = defaultNullOpts.mkStr null ''
Footer of chat window. Footer of chat window.
''; '';
zindex = helpers.defaultNullOpts.mkUnsignedInt 1 '' zindex = defaultNullOpts.mkUnsignedInt 1 ''
Determines if window is on top or below other floating windows. Determines if window is on top or below other floating windows.
''; '';
}; };
mappings = mappings =
helpers.defaultNullOpts.mkAttrsOf defaultNullOpts.mkAttrsOf
(types.submodule { (types.submodule {
freeformType = with types; attrsOf anything; freeformType = with types; attrsOf anything;
options = { 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.";
}; };
}) })
{ {