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 = { vim.assistant = {
copilot.enable = isMaximal; copilot = {
enable = isMaximal;
cmp.enable = isMaximal;
};
}; };
vim.session = { vim.session = {

View file

@ -224,6 +224,22 @@
"type": "github" "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": { "copilot-lua": {
"flake": false, "flake": false,
"locked": { "locked": {
@ -1352,6 +1368,7 @@
"cmp-vsnip": "cmp-vsnip", "cmp-vsnip": "cmp-vsnip",
"codewindow-nvim": "codewindow-nvim", "codewindow-nvim": "codewindow-nvim",
"comment-nvim": "comment-nvim", "comment-nvim": "comment-nvim",
"copilot-cmp": "copilot-cmp",
"copilot-lua": "copilot-lua", "copilot-lua": "copilot-lua",
"crates-nvim": "crates-nvim", "crates-nvim": "crates-nvim",
"dashboard-nvim": "dashboard-nvim", "dashboard-nvim": "dashboard-nvim",

View file

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

View file

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

View file

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

View file

@ -10,6 +10,7 @@ with builtins; let
in { in {
options.vim.assistant.copilot = { options.vim.assistant.copilot = {
enable = mkEnableOption "GitHub Copilot AI assistant"; enable = mkEnableOption "GitHub Copilot AI assistant";
cmp.enable = mkEnableOption "nvim-cmp integration for GitHub Copilot";
panel = { panel = {
position = mkOption { position = mkOption {
@ -91,16 +92,22 @@ in {
}; };
}; };
copilot_node_command = mkOption { copilotNodeCommand = mkOption {
type = types.str; type = types.str;
default = "${lib.getExe cfg.copilotNodePackage}"; 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 { copilotNodePackage = mkOption {
type = with types; nullOr package; # TODO - maybe accept a path as well? imperative users might want to use something like nvm type = with types; nullOr package;
default = pkgs.nodejs-slim; # this will likely need to be downgraded because Copilot does not stay up to date with NodeJS default = pkgs.nodejs-slim;
description = "The package that will be used for Copilot. NodeJS v18 is recommended."; 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]"; "buffer" = "[Buffer]";
"crates" = "[Crates]"; "crates" = "[Crates]";
"path" = "[Path]"; "path" = "[Path]";
"copilot" = "[Copilot]";
}; };
vim.maps.insert = mkMerge [ vim.maps.insert = mkMerge [