feat(ansible): install tmux/mc/git/nvim with laptop dotfiles
This commit is contained in:
191
ansible/files/operator-dotfiles/nvim/lua/plugins.lua
Normal file
191
ansible/files/operator-dotfiles/nvim/lua/plugins.lua
Normal file
@@ -0,0 +1,191 @@
|
||||
-- ======================================================================
|
||||
-- plugins.lua — Plugin specifications for lazy.nvim
|
||||
-- ======================================================================
|
||||
|
||||
return {
|
||||
-- File explorer
|
||||
{
|
||||
"preservim/nerdtree",
|
||||
cmd = { "NERDTree", "NERDTreeToggle", "NERDTreeFind", "NERDTreeFocus" },
|
||||
},
|
||||
|
||||
-- Git integration
|
||||
{
|
||||
"tpope/vim-fugitive",
|
||||
event = "VeryLazy",
|
||||
},
|
||||
|
||||
-- Commenting
|
||||
{
|
||||
"tpope/vim-commentary",
|
||||
event = "VeryLazy",
|
||||
},
|
||||
|
||||
-- LSP and completion
|
||||
{
|
||||
"neoclide/coc.nvim",
|
||||
branch = "release",
|
||||
build = "npm ci",
|
||||
event = "VeryLazy",
|
||||
},
|
||||
|
||||
-- REPL integration (tmux)
|
||||
{
|
||||
"jpalardy/vim-slime",
|
||||
init = function()
|
||||
vim.g.slime_target = "tmux"
|
||||
if vim.fn.exists("g:slime_python_ipython") == 0 then
|
||||
vim.g.slime_python_ipython = 1
|
||||
end
|
||||
end,
|
||||
},
|
||||
|
||||
-- OSC52 clipboard (remote SSH/tmux)
|
||||
{
|
||||
"ojroques/vim-oscyank",
|
||||
event = "VimEnter",
|
||||
init = function()
|
||||
vim.g.oscyank_term = "tmux"
|
||||
vim.g.oscyank_silent = true
|
||||
end,
|
||||
config = function()
|
||||
local grp = vim.api.nvim_create_augroup("osc52_yank", { clear = true })
|
||||
vim.api.nvim_create_autocmd("TextYankPost", {
|
||||
group = grp,
|
||||
callback = function()
|
||||
if vim.v.event.operator == "y" and vim.v.event.regname == "" then
|
||||
vim.cmd([[OSCYankRegister "]])
|
||||
end
|
||||
end,
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
|
||||
-- Debugging (DAP)
|
||||
{
|
||||
"mfussenegger/nvim-dap",
|
||||
config = function()
|
||||
local dap = require("dap")
|
||||
|
||||
dap.adapters.gdb = {
|
||||
type = "executable",
|
||||
command = "gdb-multiarch",
|
||||
args = { "-i", "dap" },
|
||||
}
|
||||
|
||||
local function pick_elf()
|
||||
return vim.fn.input("ELF: ", vim.fn.getcwd() .. "/", "file")
|
||||
end
|
||||
|
||||
local function normalize_target(t)
|
||||
t = t or ""
|
||||
if vim.trim then
|
||||
t = vim.trim(t)
|
||||
else
|
||||
t = t:gsub("^%s+", ""):gsub("%s+$", "")
|
||||
end
|
||||
t = t:gsub("^target%s+extended%-remote%s+", "")
|
||||
t = t:gsub("^target%s+remote%s+", "")
|
||||
t = t:gsub("^extended%-remote%s+", "")
|
||||
t = t:gsub("^remote%s+", "")
|
||||
return t
|
||||
end
|
||||
|
||||
local function pick_target()
|
||||
local default = normalize_target(vim.env.HAZARD3_GDB_TARGET)
|
||||
if default == "" then
|
||||
default = "localhost:3333"
|
||||
end
|
||||
return normalize_target(vim.fn.input("GDB target (host:port): ", default))
|
||||
end
|
||||
|
||||
local hazard3_attach = {
|
||||
name = "Hazard3 (attach gdb-remote)",
|
||||
type = "gdb",
|
||||
request = "attach",
|
||||
program = pick_elf,
|
||||
target = pick_target,
|
||||
cwd = "${workspaceFolder}",
|
||||
}
|
||||
|
||||
local function add_cfg(ft, cfg)
|
||||
dap.configurations[ft] = dap.configurations[ft] or {}
|
||||
for _, existing in ipairs(dap.configurations[ft]) do
|
||||
if existing.name == cfg.name then
|
||||
return
|
||||
end
|
||||
end
|
||||
table.insert(dap.configurations[ft], cfg)
|
||||
end
|
||||
|
||||
for _, ft in ipairs({ "c", "cpp", "asm", "" }) do
|
||||
add_cfg(ft, hazard3_attach)
|
||||
end
|
||||
|
||||
pcall(function()
|
||||
vim.api.nvim_create_user_command("Hazard3Attach", function()
|
||||
dap.run(hazard3_attach)
|
||||
end, { desc = "DAP: Hazard3 attach" })
|
||||
end)
|
||||
|
||||
vim.fn.sign_define("DapBreakpoint", { text = "●", texthl = "DiagnosticError" })
|
||||
vim.fn.sign_define("DapStopped", { text = "▶", texthl = "DiagnosticInfo", linehl = "Visual" })
|
||||
|
||||
pcall(function()
|
||||
require("hazard3_dap").setup()
|
||||
end)
|
||||
end,
|
||||
},
|
||||
|
||||
{
|
||||
"rcarriga/nvim-dap-ui",
|
||||
dependencies = {
|
||||
"mfussenegger/nvim-dap",
|
||||
"nvim-neotest/nvim-nio",
|
||||
},
|
||||
config = function()
|
||||
local dap = require("dap")
|
||||
local dapui = require("dapui")
|
||||
|
||||
dapui.setup({
|
||||
-- ASCII/unicode-friendly icons (no codicons required)
|
||||
icons = { expanded = "v", collapsed = ">", current_frame = ">" },
|
||||
controls = {
|
||||
enabled = true,
|
||||
element = "repl",
|
||||
icons = {
|
||||
pause = "||",
|
||||
play = ">",
|
||||
step_into = "↓",
|
||||
step_over = "→",
|
||||
step_out = "↑",
|
||||
step_back = "←",
|
||||
run_last = "↻",
|
||||
terminate = "X",
|
||||
disconnect = "D",
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
dap.listeners.after.event_initialized["dapui"] = function()
|
||||
dapui.open()
|
||||
end
|
||||
dap.listeners.before.event_terminated["dapui"] = function()
|
||||
dapui.close()
|
||||
end
|
||||
dap.listeners.before.event_exited["dapui"] = function()
|
||||
dapui.close()
|
||||
end
|
||||
end,
|
||||
},
|
||||
|
||||
{
|
||||
"theHamsta/nvim-dap-virtual-text",
|
||||
dependencies = {
|
||||
"mfussenegger/nvim-dap",
|
||||
},
|
||||
opts = {},
|
||||
},
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user