diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index 4c2d2d02..8c88cd56 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -447,6 +447,13 @@ - Add [neogit], an interactive and powerful Git interface for Neovim, inspired by Magit - Allow deregistering which-key binds or groups by setting them to `null` +[justDeeevin](https://github.com/justDeeevin): + +[supermaven-nvim]: https://github.com/supermaven-inc/supermaven-nvim + +- Add [supermaven-nvim] plugin in `vim.assistant.supermaven-nvim` with `enable` and + `setupOpts` + [trueNAHO](https://github.com/trueNAHO): - `flake-parts`'s `nixpkgs-lib` input follows nvf's `nixpkgs` input to reduce diff --git a/modules/plugins/assistant/default.nix b/modules/plugins/assistant/default.nix index ab50ea4f..a4da583a 100644 --- a/modules/plugins/assistant/default.nix +++ b/modules/plugins/assistant/default.nix @@ -3,6 +3,7 @@ ./chatgpt ./copilot ./codecompanion + ./supermaven-nvim ./avante ]; } diff --git a/modules/plugins/assistant/supermaven-nvim/config.nix b/modules/plugins/assistant/supermaven-nvim/config.nix new file mode 100644 index 00000000..55d401a5 --- /dev/null +++ b/modules/plugins/assistant/supermaven-nvim/config.nix @@ -0,0 +1,17 @@ +{ + config, + lib, + ... +}: let + cfg = config.vim.assistant.supermaven-nvim; +in { + config = lib.mkIf cfg.enable { + vim.lazy.plugins = { + supermaven-nvim = { + package = "supermaven-nvim"; + setupModule = "supermaven-nvim"; + inherit (cfg) setupOpts; + }; + }; + }; +} diff --git a/modules/plugins/assistant/supermaven-nvim/default.nix b/modules/plugins/assistant/supermaven-nvim/default.nix new file mode 100644 index 00000000..0da957cb --- /dev/null +++ b/modules/plugins/assistant/supermaven-nvim/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./supermaven-nvim.nix + ./config.nix + ]; +} diff --git a/modules/plugins/assistant/supermaven-nvim/supermaven-nvim.nix b/modules/plugins/assistant/supermaven-nvim/supermaven-nvim.nix new file mode 100644 index 00000000..0d1efd19 --- /dev/null +++ b/modules/plugins/assistant/supermaven-nvim/supermaven-nvim.nix @@ -0,0 +1,94 @@ +{lib, ...}: let + inherit + (lib.types) + nullOr + str + bool + attrsOf + ints + enum + ; + inherit (lib.options) mkOption mkEnableOption; + inherit (lib.nvim.types) mkPluginSetupOption luaInline; +in { + options.vim.assistant.supermaven-nvim = { + enable = mkEnableOption "Supermaven AI assistant"; + + setupOpts = mkPluginSetupOption "Supermaven" { + keymaps = { + accept_suggestion = mkOption { + type = nullOr str; + default = null; + example = ""; + description = "The key to accept a suggestion"; + }; + clear_suggestion = mkOption { + type = nullOr str; + default = null; + example = ""; + description = "The key to clear a suggestion"; + }; + accept_word = mkOption { + type = nullOr str; + default = null; + example = ""; + description = "The key to accept a word"; + }; + }; + ignore_file = mkOption { + type = nullOr (attrsOf bool); + default = null; + example = { + markdown = true; + }; + description = "List of fileto ignore"; + }; + color = { + suggestion_color = mkOption { + type = nullOr str; + default = null; + example = "#ffffff"; + description = "The hex color of the suggestion"; + }; + cterm = mkOption { + type = nullOr ints.u8; + default = null; + example = 244; + description = "The cterm color of the suggestion"; + }; + }; + log_level = mkOption { + type = nullOr (enum [ + "off" + "trace" + "debug" + "info" + "warn" + "error" + ]); + default = null; + example = "info"; + description = "The log level. Set to `\"off\"` to disable completely"; + }; + disable_inline_completion = mkOption { + type = nullOr bool; + default = null; + description = "Disable inline completion for use with cmp"; + }; + disable_keymaps = mkOption { + type = nullOr bool; + default = null; + description = "Disable built-in keymaps for more manual control"; + }; + condition = mkOption { + type = nullOr luaInline; + default = null; + description = '' + Condition function to check for stopping supermaven. + + A returned `true` means to stop supermaven + ''; + }; + }; + }; +} diff --git a/npins/sources.json b/npins/sources.json index 6b51ae44..5a962940 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -2335,6 +2335,19 @@ "url": "https://github.com/nanotee/sqls.nvim/archive/d1bc5421ef3e8edc5101e37edbb7de6639207a09.tar.gz", "hash": "1j4n5c8h1iriqzsjxr0wvz70g9lf6d4lm3nyxlpwy9dqmbj8w0kd" }, + "supermaven-nvim": { + "type": "Git", + "repository": { + "type": "GitHub", + "owner": "supermaven-inc", + "repo": "supermaven-nvim" + }, + "branch": "main", + "submodules": false, + "revision": "07d20fce48a5629686aefb0a7cd4b25e33947d50", + "url": "https://github.com/supermaven-inc/supermaven-nvim/archive/07d20fce48a5629686aefb0a7cd4b25e33947d50.tar.gz", + "hash": "1h9h98wsnfhkfdmdxjvr2d4idhrvp4i56pp4q6l0m4d2i0ldcgfp" + }, "tabular": { "type": "Git", "repository": {