feat: copilot completions in nvim-cmp sources

This commit is contained in:
NotAShelf 2023-07-24 16:51:24 +03:00
parent 111c2ad317
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

@ -202,7 +202,10 @@ inputs: let
};
vim.assistant = {
copilot.enable = isMaximal;
copilot = {
enable = isMaximal;
cmp.enable = isMaximal;
};
};
vim.session = {

View File

@ -224,6 +224,22 @@
"type": "github"
}
},
"copilot-cmp": {
"flake": false,
"locked": {
"lastModified": 1683831407,
"narHash": "sha256-+MzEGnhlrYRvAfskOwmw69OC1CsPXt7s3z+xPe9XPqs=",
"owner": "zbirenbaum",
"repo": "copilot-cmp",
"rev": "c2cdb3c0f5078b0619055af192295830a7987790",
"type": "github"
},
"original": {
"owner": "zbirenbaum",
"repo": "copilot-cmp",
"type": "github"
}
},
"copilot-lua": {
"flake": false,
"locked": {
@ -1352,6 +1368,7 @@
"cmp-vsnip": "cmp-vsnip",
"codewindow-nvim": "codewindow-nvim",
"comment-nvim": "comment-nvim",
"copilot-cmp": "copilot-cmp",
"copilot-lua": "copilot-lua",
"crates-nvim": "crates-nvim",
"dashboard-nvim": "dashboard-nvim",

View File

@ -481,6 +481,11 @@
flake = false;
};
copilot-cmp = {
url = "github:zbirenbaum/copilot-cmp";
flake = false;
};
# Session management
nvim-session-manager = {
url = "github:Shatur/neovim-session-manager";

View File

@ -87,6 +87,7 @@ with lib; let
"nvim-surround"
"nvim-dap"
"nvim-dap-ui"
"copilot-cmp"
];
# You can either use the name of the plugin or a package.
pluginsType = with types;

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 [