From 78d3ae31d1ef9ddf8c612682a005551f92ad71ed Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Mon, 6 Feb 2023 04:14:01 +0300 Subject: [PATCH] feat: TabNine and Copilot assistants --- flake.lock | 34 ++++++++++++++++++++++++++++++++++ flake.nix | 18 +++++++++++++++++- modules/assistant/copilot.nix | 24 ++++++++++++++++++++++++ modules/assistant/default.nix | 6 ++++++ modules/assistant/tabnine.nix | 28 ++++++++++++++++++++++++++++ modules/lib/types-plugin.nix | 2 ++ modules/modules.nix | 1 + 7 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 modules/assistant/copilot.nix create mode 100644 modules/assistant/default.nix create mode 100644 modules/assistant/tabnine.nix diff --git a/flake.lock b/flake.lock index c51b214..4786d1a 100644 --- a/flake.lock +++ b/flake.lock @@ -208,6 +208,22 @@ "type": "github" } }, + "copilot-lua": { + "flake": false, + "locked": { + "lastModified": 1675346663, + "narHash": "sha256-+a286iUK7UijcbRLb8gXwmDFZAf1gYupS5f9EHB+dxU=", + "owner": "zbirenbaum", + "repo": "copilot.lua", + "rev": "a54e7b11a2c6efc9ddd3f42e56cf7d9eed1a9683", + "type": "github" + }, + "original": { + "owner": "zbirenbaum", + "repo": "copilot.lua", + "type": "github" + } + }, "crates-nvim": { "flake": false, "locked": { @@ -961,6 +977,7 @@ "cmp-vsnip": "cmp-vsnip", "codewindow-nvim": "codewindow-nvim", "colorizer": "colorizer", + "copilot-lua": "copilot-lua", "crates-nvim": "crates-nvim", "dashboard-nvim": "dashboard-nvim", "discord-nvim": "discord-nvim", @@ -1005,6 +1022,7 @@ "rust-tools": "rust-tools", "scrollbar-nvim": "scrollbar-nvim", "sqls-nvim": "sqls-nvim", + "tabnine-nvim": "tabnine-nvim", "tabular": "tabular", "telescope": "telescope", "tidalcycles": "tidalcycles", @@ -1108,6 +1126,22 @@ "type": "github" } }, + "tabnine-nvim": { + "flake": false, + "locked": { + "lastModified": 1675586775, + "narHash": "sha256-7vd+moqQ5bA58VXlHSWXcJbI6ovp7z2Nf6Cn7cq08Ps=", + "owner": "codota", + "repo": "tabnine-nvim", + "rev": "85b3ad6df16ad09f8c486ec4c21defa75cebe22c", + "type": "github" + }, + "original": { + "owner": "codota", + "repo": "tabnine-nvim", + "type": "github" + } + }, "tabular": { "flake": false, "locked": { diff --git a/flake.nix b/flake.nix index 0874f1f..67e7a9b 100644 --- a/flake.nix +++ b/flake.nix @@ -168,6 +168,11 @@ vim.ui = { noice.enable = true; }; + + vim.assistant = { + copilot.enable = false; + tabnine.enable = false; # FIXME: this is not working because the plugin depends on an internal script to be ran by the package manager + }; }; }; @@ -560,12 +565,23 @@ flake = false; }; - # UI44444 + # UI noice-nvim = { url = "github:folke/noice.nvim"; flake = false; }; + # Assistant + copilot-lua = { + url = "github:zbirenbaum/copilot.lua"; + flake = false; + }; + + tabnine-nvim = { + url = "github:codota/tabnine-nvim"; + flake = false; + }; + # Dependencies plenary-nvim = { # (required by crates-nvim) diff --git a/modules/assistant/copilot.nix b/modules/assistant/copilot.nix new file mode 100644 index 0000000..c6bb1ec --- /dev/null +++ b/modules/assistant/copilot.nix @@ -0,0 +1,24 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.assistant.copilot; +in { + options.vim.assistant.copilot = { + enable = mkEnableOption "Enable GitHub Copilot"; + }; + + config = mkIf cfg.enable { + vim.startPlugins = ["copilot-lua"]; + + vim.luaConfigRC.copilot = nvim.dag.entryAnywhere '' + require("copilot").setup({ + -- available options: https://github.com/zbirenbaum/copilot.lua + }) + ''; + }; +} diff --git a/modules/assistant/default.nix b/modules/assistant/default.nix new file mode 100644 index 0000000..3ae3509 --- /dev/null +++ b/modules/assistant/default.nix @@ -0,0 +1,6 @@ +_: { + imports = [ + ./copilot.nix + ./tabnine.nix + ]; +} diff --git a/modules/assistant/tabnine.nix b/modules/assistant/tabnine.nix new file mode 100644 index 0000000..bb8cecc --- /dev/null +++ b/modules/assistant/tabnine.nix @@ -0,0 +1,28 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.assistant.tabnine; +in { + options.vim.assistant.tabnine = { + enable = mkEnableOption "Enable TabNine assistant"; + }; + + config = mkIf cfg.enable { + vim.startPlugins = ["tabnine-nvim"]; + + vim.luaConfigRC.tabnine-nvim = nvim.dag.entryAnywhere '' + require('tabnine').setup({ + disable_auto_comment=true, + accept_keymap="", + dismiss_keymap = "", + debounce_ms = 800, + execlude_filetypes = {"TelescopePrompt", "NvimTree", "alpha"} + }) + ''; + }; +} diff --git a/modules/lib/types-plugin.nix b/modules/lib/types-plugin.nix index 4b52b19..7678951 100644 --- a/modules/lib/types-plugin.nix +++ b/modules/lib/types-plugin.nix @@ -62,6 +62,8 @@ with lib; let "toggleterm-nvim" "noice-nvim" "nui-nvim" + "copilot-lua" + "tabnine-nvim" ]; # You can either use the name of the plugin or a package. pluginsType = with types; listOf (nullOr (either (enum availablePlugins) package)); diff --git a/modules/modules.nix b/modules/modules.nix index 54d32c4..cde9f07 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -29,6 +29,7 @@ ./notes ./terminal ./ui + ./assistant ]; pkgsModule = {config, ...}: {