1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
-- Prefer the chezmoi-pinned Node 24 (host has Arch's system node 26, which
-- breaks copilot-language-server — see
-- ~/.local/share/chezmoi/run_onchange_after_install-copilot-node.sh). Fall
-- back to `node` on PATH for hosts that don't run chezmoi (remote-dev VM
-- via Nix Home-Manager, where home.nix pins nodejs_24 in the profile).
local pinned_node = vim.fs.joinpath(
vim.env.XDG_DATA_HOME or (vim.env.HOME .. "/.local/share"),
"copilot-node/bin/node"
)
local copilot_node = vim.fn.executable(pinned_node) == 1 and pinned_node
or "node"
require("copilot").setup({
suggestion = { enabled = false },
panel = { enabled = false },
copilot_node_command = copilot_node,
server_opts_overrides = {
settings = {
telemetry = {
telemetryLevel = "off",
},
},
},
nes = {
enabled = true,
keymap = {
accept_and_goto = "<leader>p",
accept = false,
dismiss = "<Esc>",
},
},
})
-- Accept NES in insert mode (copilot.lua only binds normal mode)
vim.keymap.set("i", "<C-f>", function()
local ok, nes = pcall(require, "copilot-lsp.nes")
if ok and nes.apply_pending_nes() then
return
end
-- Fallback: native <C-f> (scroll window forward)
local key = vim.api.nvim_replace_termcodes("<C-f>", true, false, true)
vim.api.nvim_feedkeys(key, "n", false)
end, { desc = "Accept Copilot NES / scroll forward" })
vim.keymap.set("n", "<leader>tc", function()
require("copilot.command").toggle()
end, { desc = "[T]oggle [C]opilot attachment" })
|