feat: copilot completions in nvim-cmp sources

This commit is contained in:
raf 2023-07-24 16:51:24 +03:00
commit 4233a2c20d
No known key found for this signature in database
GPG key ID: 02D1DD3FA08B6B29
7 changed files with 55 additions and 11 deletions

View file

@ -21,16 +21,21 @@ with builtins; let
'';
in {
config = mkIf cfg.enable {
vim.startPlugins = [
"copilot-lua"
cfg.copilotNodePackage
];
vim.startPlugins =
[
"copilot-lua"
cfg.copilotNodePackage
]
++ lib.optionals (cfg.cmp.enable) [
"copilot-cmp"
];
vim.luaConfigRC.copilot = nvim.dag.entryAnywhere ''
require("copilot").setup({
-- available options: https://github.com/zbirenbaum/copilot.lua
copilot_node_command = "${cfg.copilot_node_command}",
copilot_node_command = "${cfg.copilotNodeCommand}",
panel = {
enabled = ${lib.boolToString (!cfg.cmp.enable)},
keymap = {
jump_prev = false,
jump_next = false,
@ -44,6 +49,7 @@ in {
},
},
suggestion = {
enabled = ${lib.boolToString (!cfg.cmp.enable)},
keymap = {
accept = false,
accept_word = false,
@ -54,6 +60,10 @@ in {
},
},
})
${lib.optionalString (cfg.cmp.enable) ''
require("copilot_cmp").setup()
''}
'';
vim.maps.normal = mkMerge [

View file

@ -10,6 +10,7 @@ with builtins; let
in {
options.vim.assistant.copilot = {
enable = mkEnableOption "GitHub Copilot AI assistant";
cmp.enable = mkEnableOption "nvim-cmp integration for GitHub Copilot";
panel = {
position = mkOption {
@ -91,16 +92,22 @@ in {
};
};
copilot_node_command = mkOption {
copilotNodeCommand = mkOption {
type = types.str;
default = "${lib.getExe cfg.copilotNodePackage}";
description = "Path to nodejs";
description = ''
The command that will be executed to initiate nodejs for GitHub Copilot.
Recommended to leave as default.
'';
};
copilotNodePackage = mkOption {
type = with types; nullOr package; # TODO - maybe accept a path as well? imperative users might want to use something like nvm
default = pkgs.nodejs-slim; # this will likely need to be downgraded because Copilot does not stay up to date with NodeJS
description = "The package that will be used for Copilot. NodeJS v18 is recommended.";
type = with types; nullOr package;
default = pkgs.nodejs-slim;
description = ''
The nodeJS package that will be used for GitHub Copilot. If you are using a custom node command
you may want to set this option to null so that the package is not pulled from nixpkgs.
'';
};
};
}

View file

@ -49,6 +49,7 @@ in {
"buffer" = "[Buffer]";
"crates" = "[Crates]";
"path" = "[Path]";
"copilot" = "[Copilot]";
};
vim.maps.insert = mkMerge [