Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions docs/release-notes/rl-0.8.md
Original file line number Diff line number Diff line change
Expand Up @@ -510,3 +510,9 @@

- Add inline typst concealing support under `vim.languages.typst` using
[typst-concealer].

[axelbdt](https://github.com/axelbdt):

[neocodeium]: https://github.com/monkoose/neocodeium

- Add [neocodeium] plugin in `vim.assistant.neocodeium` with `enable`, `setupOpts` and `keymaps`
1 change: 1 addition & 0 deletions modules/plugins/assistant/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@
./codecompanion
./supermaven-nvim
./avante
./neocodeium
];
}
33 changes: 33 additions & 0 deletions modules/plugins/assistant/neocodeium/config.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
config,
lib,
options,
...
}: let
inherit (lib.nvim.binds) mkKeymap;
cfg = config.vim.assistant.neocodeium;

inherit (options.vim.assistant.neocodeium) keymaps;
mkNeoCodeiumKey = act: (mkKeymap "i" cfg.keymaps.${act} "function() require('neocodeium').${act}() end" {
lua = true;
desc = keymaps.${act}.description;
});
in {
config = lib.mkIf cfg.enable {
vim = {
lazy.plugins.neocodeium = {
package = "neocodeium";
setupModule = "neocodeium";
inherit (cfg) setupOpts;
};
keymaps = [
(mkNeoCodeiumKey "accept")
(mkNeoCodeiumKey "accept_word")
(mkNeoCodeiumKey "accept_line")
(mkNeoCodeiumKey "cycle_or_complete")
(mkNeoCodeiumKey "cycle_or_complete_reverse")
(mkNeoCodeiumKey "clear")
];
};
};
}
6 changes: 6 additions & 0 deletions modules/plugins/assistant/neocodeium/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
imports = [
./neocodeium.nix
./config.nix
];
}
155 changes: 155 additions & 0 deletions modules/plugins/assistant/neocodeium/neocodeium.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
{lib, ...}: let
inherit
(lib.types)
nullOr
str
bool
int
attrsOf
listOf
enum
;
inherit (lib.options) mkOption mkEnableOption;
inherit (lib.nvim.types) mkPluginSetupOption luaInline;
inherit (lib.nvim.binds) mkMappingOption;
in {
options.vim.assistant.neocodeium = {
enable = mkEnableOption "NeoCodeium AI completion";

setupOpts = mkPluginSetupOption "NeoCodeium" {
enabled = mkOption {
type = nullOr bool;
default = null;
description = "Whether to start windsurf server. Can be manually enabled with `:NeoCodeium enable`";
};

bin = mkOption {
type = nullOr str;
default = null;
description = "Path to custom windsurf server binary";
};

manual = mkOption {
type = nullOr bool;
default = null;
description = "When true, autosuggestions are disabled. Use `require'neocodeium'.cycle_or_complete()` to show suggestions manually";
};

server = {
api_url = mkOption {
type = nullOr str;
default = null;
description = "API URL to use (for Enterprise mode)";
};
portal_url = mkOption {
type = nullOr str;
default = null;
description = "Portal URL to use (for registering a user and downloading the binary)";
};
};

show_label = mkOption {
type = nullOr bool;
default = null;
description = "Whether to show the number of suggestions label in the line number column";
};

debounce = mkOption {
type = nullOr bool;
default = null;
description = "Whether to enable suggestions debounce";
};

max_lines = mkOption {
type = nullOr int;
default = null;
example = 10000;
description = ''
Maximum number of lines parsed from loaded buffers (current buffer always fully parsed).
Set to `0` to disable parsing non-current buffers.
Set to `-1` to parse all lines
'';
};

silent = mkOption {
type = nullOr bool;
default = null;
description = "Whether to disable non-important messages";
};

disable_in_special_buftypes = mkOption {
type = nullOr bool;
default = null;
description = "Whether to disable suggestions in special buftypes like `nofile`";
};

log_level = mkOption {
type = nullOr (enum [
"trace"
"debug"
"info"
"warn"
"error"
]);
default = null;
example = "warn";
description = "Log level";
};

single_line = {
enabled = mkOption {
type = nullOr bool;
default = null;
description = "Whether to enable single line mode. Multi-line suggestions collapse into a single line";
};
label = mkOption {
type = nullOr str;
default = null;
example = "...";
description = "Label indicating that there is multi-line suggestion";
};
};

filter = mkOption {
type = nullOr luaInline;
default = null;
description = ''
Function that returns `true` if a buffer should be enabled and `false` if disabled.
You can still enable disabled buffer with `:NeoCodeium enable_buffer`
'';
};

filetypes = mkOption {
type = nullOr (attrsOf bool);
default = null;
example = {
help = false;
gitcommit = false;
};
description = ''
Filetypes to disable suggestions in.
You can still enable disabled buffer with `:NeoCodeium enable_buffer`
'';
};

root_dir = mkOption {
type = nullOr (listOf str);
default = null;
example = [
".git"
"package.json"
];
description = "List of directories and files to detect workspace root directory for Windsurf Chat";
};
};

keymaps = {
accept = mkMappingOption "Accept suggestion" "<A-f>";
accept_word = mkMappingOption "Accept word" "<A-w>";
accept_line = mkMappingOption "Accept line" "<A-a>";
cycle_or_complete = mkMappingOption "Cycle or complete" "<A-e>";
cycle_or_complete_reverse = mkMappingOption "Cycle or complete (reverse)" "<A-r>";
clear = mkMappingOption "Clear suggestion" "<A-c>";
};
};
}
16 changes: 16 additions & 0 deletions npins/sources.json
Original file line number Diff line number Diff line change
Expand Up @@ -1578,6 +1578,22 @@
"url": "https://github.com/nvim-neo-tree/neo-tree.nvim/archive/9130e58424ad95bf2dd8b40afbb8cf04d648638c.tar.gz",
"hash": "0zm40p718cvqg9ngzlnc56pbglrp7yp1580g0f1pfakkwdrvnhdv"
},
"neocodeium": {
"type": "GitRelease",
"repository": {
"type": "GitHub",
"owner": "monkoose",
"repo": "neocodeium"
},
"pre_releases": false,
"version_upper_bound": null,
"release_prefix": null,
"submodules": false,
"version": "v1.16.3",
"revision": "f67384cee91f8ffc0d2e09d257691b2461725d5b",
"url": "https://api.github.com/repos/monkoose/neocodeium/tarball/v1.16.3",
"hash": "1zr6rrvk00d3gwg7sf1vqd1z1gw2qwl0h08zcbc30x8v0iradsai"
},
"neocord": {
"type": "Git",
"repository": {
Expand Down