add beacon

This commit is contained in:
jmarkin 2025-10-04 16:10:56 +03:00
parent 0a97211f75
commit 1c89b79802
6 changed files with 209 additions and 141 deletions

View file

@ -1,5 +1,21 @@
{
"nodes": {
"beacon-nvim": {
"flake": false,
"locked": {
"lastModified": 1719294964,
"narHash": "sha256-x/79mRkwwT+sNrnf8QqocsaQtM+Rx6BUvVj5Nnv5JDY=",
"owner": "DanilaMihailov",
"repo": "beacon.nvim",
"rev": "098ff96c33874339d5e61656f3050dbd587d6bd5",
"type": "github"
},
"original": {
"owner": "DanilaMihailov",
"repo": "beacon.nvim",
"type": "github"
}
},
"blink-pairs": {
"inputs": {
"fenix": "fenix",
@ -401,6 +417,7 @@
},
"root": {
"inputs": {
"beacon-nvim": "beacon-nvim",
"blink-pairs": "blink-pairs",
"cmp-diag-codes": "cmp-diag-codes",
"diaglist-nvim": "diaglist-nvim",

View file

@ -34,6 +34,11 @@
flake = false;
};
beacon-nvim = {
url = "github:DanilaMihailov/beacon.nvim";
flake = false;
};
stay-in-place-nvim = {
url = "github:gbprod/stay-in-place.nvim";
flake = false;

View file

@ -1,4 +1,7 @@
{ inputs, pkgs, mkNvimPlugin, ... }:
let
beacon-nvim = (mkNvimPlugin inputs.beacon-nvim "beacon.nvim");
in
with pkgs.vimPlugins; [
{
plugin = nui-nvim;
@ -39,4 +42,37 @@ with pkgs.vimPlugins; [
}
dropbar-nvim
{
plugin = beacon-nvim;
optional = true;
type = "lua";
config = /*lua*/''
if not vim.g.neovide then
lze.load({
"${beacon-nvim.pname}",
after = function()
require("beacon").setup {
enabled = function()
local line_count = vim.api.nvim_buf_line_count(vim.api.nvim_get_current_buf())
if line_count > 1000 then
return false
end
return true
end, --- (boolean | fun():boolean) check if enabled
speed = 2, --- integer speed at wich animation goes
width = 20, --- integer width of the beacon window
winblend = 70, --- integer starting transparency of beacon window :h winblend
fps = 60, --- integer how smooth the animation going to be
min_jump = 10, --- integer what is considered a jump. Number of lines
cursor_events = { "CursorMoved" }, -- table<string> what events trigger check for cursor moves
window_events = { "WinEnter", "FocusGained" }, -- table<string> what events trigger cursor highlight
highlight = { bg = "white", ctermbg = 15 }, -- vim.api.keyset.highlight table passed to vim.api.nvim_set_hl
}
end,
event = { "BufAdd" },
})
end
'';
}
]

View file

@ -5,6 +5,147 @@ vim.g.did_load_ai_plugin = true
local g = vim.g
local opts = {
mode = "agentic",
debug = false,
providers = {},
web_search_engine = {},
behaviour = {
auto_set_keymaps = true,
auto_set_highlight_group = true,
auto_focus_sidebar = true,
auto_suggestions = false,
auto_suggestions_respect_ignore = true,
auto_apply_diff_after_generation = false,
jump_result_buffer_on_finish = false,
support_paste_from_clipboard = true,
minimize_diff = true,
enable_token_counting = true,
use_cwd_as_project_root = true,
auto_focus_on_diff_view = true,
},
selection = {
enabled = false,
hint_display = "delayed",
},
rag_service = { -- RAG Service configuration
enabled = false,
host_mount = os.getenv("HOME"),
runner = "nix", -- Runner for the RAG service (can use docker or nix)
docker_extra_args = "",
},
mappings = {
suggestion = {
accept = "<Tab>",
next = "<M-]>",
prev = "<M-[>",
dismiss = "<C-]>",
},
diff = {
ours = "gH",
theirs = "gh",
all_theirs = "gA",
both = "gB",
cursor = "gc",
next = "]x",
prev = "[x",
},
jump = {
next = "]]",
prev = "[[",
},
submit = {
normal = "<CR>",
insert = "<C-s>",
},
cancel = {
normal = { "<C-c>", "<Esc>", "q" },
insert = { "<C-c>" },
},
ask = "<leader>aa",
new_ask = "<leader>an",
zen_mode = "<leader>az",
edit = "<leader>ae",
refresh = "<leader>ar",
focus = "<leader>af",
stop = "<leader>aS",
toggle = {
default = "<leader>at",
debug = "<leader>ad",
selection = "<leader>aC",
suggestion = "<leader>as",
repomap = "<leader>aR",
},
sidebar = {
expand_tool_use = "<S-Tab>",
next_prompt = "<up>",
prev_prompt = "<down>",
apply_all = "A",
apply_cursor = "a",
retry_user_request = "r",
edit_user_request = "e",
switch_windows = "<Tab>",
reverse_switch_windows = "<S-Tab>",
toggle_code_window = "x",
remove_file = "d",
add_file = "@",
close = { "q" },
---@alias AvanteCloseFromInput { normal: string | nil, insert: string | nil }
---@type AvanteCloseFromInput | nil
close_from_input = nil, -- e.g., { normal = "<Esc>", insert = "<C-d>" }
---@alias AvanteToggleCodeWindowFromInput { normal: string | nil, insert: string | nil }
---@type AvanteToggleCodeWindowFromInput | nil
toggle_code_window_from_input = nil, -- e.g., { normal = "x", insert = "<C-;>" }
},
files = {
add_current = "<leader>ac", -- Add current buffer to selected files
add_all_buffers = "<leader>aB", -- Add all buffer files to selected files
},
select_model = "<leader>a?", -- Select model command
select_history = "<leader>ah", -- Select history command
confirm = {
focus_window = "<C-w>f",
code = "c",
resp = "r",
input = "i",
},
},
windows = {
---@alias AvantePosition "right" | "left" | "top" | "bottom" | "smart"
---@type AvantePosition
position = "smart",
edit = {
start_insert = false, -- Start insert mode when opening the edit window
},
},
repo_map = {
ignore_patterns = {
"%.git",
"%.worktree",
"__pycache__",
"node_modules",
"target",
"build",
"dist",
"BUILD",
"vendor%.",
"%.min%.",
".devenv%.",
".direnv%.",
}, -- ignore files matching these
negate_patterns = {}, -- negate ignore files matching these.
},
selector = {
provider = "fzf_lua",
},
}
-- ollama setup
g.ollama_host = vim.env.OLLAMA_HOST or "localhost"
g.ollama_port = vim.env.OLLAMA_PORT or "11434"
@ -44,6 +185,10 @@ local ollama_modify_config = function(cfg)
require("avante").setup(cfg)
end
vim.api.nvim_create_user_command("AvanteOllama", function(_)
ollama_modify_config(opts)
end, {})
-- airun setup
g.airun_url = vim.env.AI_RUN_URL
g.airun_endpoint = string.format("%s/v1", g.airun_url)
@ -102,139 +247,15 @@ local airun_modify_config = function(cfg)
require("avante").setup(cfg)
end
vim.api.nvim_create_user_command("AvanteAIRun", function(_)
airun_modify_config(opts)
end, {})
lze.load({
"avante.nvim",
event = vim.g.post_load_events,
on_require = { "avante", "avante_lib", "avante.api" },
after = function()
local opts = {
mode = "agentic",
debug = false,
providers = {},
web_search_engine = {},
behaviour = {
auto_set_keymaps = true,
auto_set_highlight_group = true,
auto_focus_sidebar = true,
auto_suggestions = false,
auto_suggestions_respect_ignore = true,
auto_apply_diff_after_generation = false,
jump_result_buffer_on_finish = false,
support_paste_from_clipboard = true,
minimize_diff = true,
enable_token_counting = true,
use_cwd_as_project_root = true,
auto_focus_on_diff_view = true,
},
rag_service = { -- RAG Service configuration
enabled = false,
host_mount = os.getenv("HOME"),
runner = "nix", -- Runner for the RAG service (can use docker or nix)
docker_extra_args = "",
},
mappings = {
suggestion = {
accept = "<Tab>",
next = "<M-]>",
prev = "<M-[>",
dismiss = "<C-]>",
},
diff = {
ours = "gH",
theirs = "gh",
all_theirs = "gA",
both = "gB",
cursor = "gc",
next = "]x",
prev = "[x",
},
jump = {
next = "]]",
prev = "[[",
},
submit = {
normal = "<CR>",
insert = "<C-s>",
},
cancel = {
normal = { "<C-c>", "<Esc>", "q" },
insert = { "<C-c>" },
},
ask = "<leader>aa",
new_ask = "<leader>an",
zen_mode = "<leader>az",
edit = "<leader>ae",
refresh = "<leader>ar",
focus = "<leader>af",
stop = "<leader>aS",
toggle = {
default = "<leader>at",
debug = "<leader>ad",
selection = "<leader>aC",
suggestion = "<leader>as",
repomap = "<leader>aR",
},
sidebar = {
expand_tool_use = "<S-Tab>",
next_prompt = "<up>",
prev_prompt = "<down>",
apply_all = "A",
apply_cursor = "a",
retry_user_request = "r",
edit_user_request = "e",
switch_windows = "<c-n>",
toggle_code_window = "x",
remove_file = "d",
add_file = "@",
close = { "q" },
---@alias AvanteCloseFromInput { normal: string | nil, insert: string | nil }
---@type AvanteCloseFromInput | nil
close_from_input = nil, -- e.g., { normal = "<Esc>", insert = "<C-d>" }
---@alias AvanteToggleCodeWindowFromInput { normal: string | nil, insert: string | nil }
---@type AvanteToggleCodeWindowFromInput | nil
toggle_code_window_from_input = nil, -- e.g., { normal = "x", insert = "<C-;>" }
},
files = {
add_current = "<leader>ac", -- Add current buffer to selected files
add_all_buffers = "<leader>aB", -- Add all buffer files to selected files
},
select_model = "<leader>a?", -- Select model command
select_history = "<leader>ah", -- Select history command
confirm = {
focus_window = "<C-w>f",
code = "c",
resp = "r",
input = "i",
},
},
repo_map = {
ignore_patterns = {
"%.git",
"%.worktree",
"__pycache__",
"node_modules",
"target",
"build",
"dist",
"BUILD",
"vendor%.",
"%.min%.",
".devenv%.",
".direnv%.",
}, -- ignore files matching these
negate_patterns = {}, -- negate ignore files matching these.
},
selector = {
provider = "fzf_lua",
},
}
require("avante_lib").load()
airun_modify_config(opts)
end,

View file

@ -68,15 +68,3 @@ end, {})
vim.api.nvim_create_user_command("UnicodeUndoEscape", function(_)
vim.cmd([[:%s/\\u\(\x\{4\}\)/\=nr2char('0x'.submatch(1),1)/g]])
end, {})
vim.api.nvim_create_user_command("DevenvUP", function()
local term = require("terminal")
local bufnr = term.open("devenv up", nil)
vim.keymap.set("t", "<c-\\><c-\\>", [[<C-\><C-n>^]], { buffer = bufnr })
vim.keymap.set("t", "<c-\\><c-n>", [[<C-\><C-n>^]], { buffer = bufnr })
end, {})
vim.api.nvim_create_user_command("DevenvTest", function()
local term = require("terminal")
term.open("devenv test", "vsplit")
end, {})

View file

@ -19,12 +19,13 @@ vim.keymap.set({ "n" }, { "<leader>q", "<space>q" }, ":q<cr>", { desc = "Quit",
vim.keymap.set({ "n", "v" }, "<C-d>", "10jzz")
vim.keymap.set({ "n", "v" }, "<C-u>", "10kzz")
vim.keymap.set({ "n", "v" }, "<C-e>", "<C-u>")
vim.keymap.set({ "n" }, "<C-w>>", "10<C-w>>")
vim.keymap.set({ "n" }, "<C-w><", "10<C-w><")
vim.keymap.set({ "n" }, "<C-w>+", "5<C-w>+")
vim.keymap.set({ "n" }, "<C-w>-", "5<C-w>-")
vim.keymap.set({ 'n' }, 'o', 'o<Esc>', { desc = 'Add line under' })
vim.keymap.set({ 'n' }, 'O', 'O<Esc>', { desc = 'Add line prev' })
vim.keymap.set({ "v" }, "p", "pgvy", { desc = "Disable yank on paste" })
vim.keymap.set({ "n" }, { "<leader>w", "<leader>'" }, ":w<CR>", { silent = true, desc = "normal mode: save" })