mirror of
https://github.com/nix-community/nixvim.git
synced 2025-07-22 11:45:28 +02:00
plugins/copilot-chat: helpers
-> lib.nixvim
This commit is contained in:
parent
68dd111eb3
commit
928fc1a16f
1 changed files with 44 additions and 51 deletions
|
@ -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.";
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue