mirror of
https://github.com/NotAShelf/nvf.git
synced 2025-11-09 15:05:30 +00:00
104 lines
3.1 KiB
Nix
104 lines
3.1 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
...
|
|
}: let
|
|
inherit (lib.modules) mkIf;
|
|
|
|
cfg = config.vim.assistant.mcphub-nvim;
|
|
in {
|
|
config = mkIf cfg.enable {
|
|
vim = {
|
|
startPlugins = [
|
|
"plenary-nvim"
|
|
];
|
|
|
|
lazy.plugins = {
|
|
mcphub-nvim = {
|
|
package = "mcphub-nvim";
|
|
setupModule = "mcphub";
|
|
inherit (cfg) setupOpts;
|
|
event = ["DeferredUIEnter"];
|
|
};
|
|
};
|
|
|
|
# avante-nvim
|
|
assistant.avante-nvim.setupOpts = {
|
|
system_prompt = lib.generators.mkLuaInline ''
|
|
function()
|
|
local hub = require("mcphub").get_hub_instance()
|
|
return hub and hub:get_active_servers_prompt() or ""
|
|
end
|
|
'';
|
|
custom_tools = lib.generators.mkLuaInline ''
|
|
function()
|
|
return {
|
|
require("mcphub.extensions.avante").mcp_tool(),
|
|
}
|
|
end
|
|
'';
|
|
};
|
|
|
|
# codecompanion-nvim
|
|
assistant.codecompanion-nvim.setupOpts.extensions.mcphub = {
|
|
callback = "mcphub.extensions.codecompanion";
|
|
opts = {
|
|
## MCP Tools
|
|
make_tools = true;
|
|
show_server_tools_in_chat = true;
|
|
add_mcp_prefix_to_tool_names = false;
|
|
show_result_in_chat = true;
|
|
format_tool = null;
|
|
## MCP Resources
|
|
make_vars = true;
|
|
## MCP Prompts
|
|
make_slash_commands = true;
|
|
};
|
|
};
|
|
|
|
# lualine
|
|
statusline.lualine.setupOpts.sections.lualine_x = lib.generators.mkLuaInline ''
|
|
{{
|
|
function()
|
|
-- Check if MCPHub is loaded
|
|
if not vim.g.loaded_mcphub then
|
|
return " -"
|
|
end
|
|
|
|
local count = vim.g.mcphub_servers_count or 0
|
|
local status = vim.g.mcphub_status or "stopped"
|
|
local executing = vim.g.mcphub_executing
|
|
|
|
-- Show "-" when stopped
|
|
if status == "stopped" then
|
|
return " -"
|
|
end
|
|
|
|
-- Show spinner when executing, starting, or restarting
|
|
if executing or status == "starting" or status == "restarting" then
|
|
local frames = { "⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏" }
|
|
local frame = math.floor(vim.loop.now() / 100) % #frames + 1
|
|
return " " .. frames[frame]
|
|
end
|
|
|
|
return " " .. count
|
|
end,
|
|
color = function()
|
|
if not vim.g.loaded_mcphub then
|
|
return { fg = "#6c7086" } -- Gray for not loaded
|
|
end
|
|
|
|
local status = vim.g.mcphub_status or "stopped"
|
|
if status == "ready" or status == "restarted" then
|
|
return { fg = "#50fa7b" } -- Green for connected
|
|
elseif status == "starting" or status == "restarting" then
|
|
return { fg = "#ffb86c" } -- Orange for connecting
|
|
else
|
|
return { fg = "#ff5555" } -- Red for error/stopped
|
|
end
|
|
end,
|
|
},}
|
|
'';
|
|
};
|
|
};
|
|
}
|