vim.pack.add({ "https://github.com/lewis6991/gitsigns.nvim", }) require("gitsigns").setup({ on_attach = function(bufnr) local gitsigns = require("gitsigns") local function map(mode, l, r, opts) opts = opts or {} opts.buffer = bufnr vim.keymap.set(mode, l, r, opts) end map("n", "]c", function() if vim.wo.diff then vim.cmd.normal({ "]c", bang = true }) else gitsigns.nav_hunk("next") end end) map("n", "[c", function() if vim.wo.diff then vim.cmd.normal({ "[c", bang = true }) else gitsigns.nav_hunk("prev") end end) map("n", "hs", gitsigns.stage_hunk) map("n", "hr", gitsigns.reset_hunk) map("v", "hs", function() gitsigns.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) end) map("v", "hr", function() gitsigns.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) end) map("n", "hS", gitsigns.stage_buffer) map("n", "hR", gitsigns.reset_buffer) map("n", "hp", gitsigns.preview_hunk) map("n", "hi", gitsigns.preview_hunk_inline) map("n", "hb", function() gitsigns.blame_line({ full = true }) end) map("n", "hd", gitsigns.diffthis) map("n", "hD", function() gitsigns.diffthis("~") end) map("n", "hQ", function() gitsigns.setqflist("all") end) map("n", "hq", gitsigns.setqflist) map("n", "tb", gitsigns.toggle_current_line_blame) map("n", "tw", gitsigns.toggle_word_diff) end, }) local lazygit_buf = nil local lazygit_win = nil local function get_geometry() local width = math.floor(vim.o.columns * 0.8) local height = math.floor(vim.o.lines * 0.8) return { relative = "editor", row = math.floor((vim.o.lines - height) / 2), col = math.floor((vim.o.columns - width) / 2), width = width, height = height, border = "rounded", style = "minimal", } end local function toggle_lazygit() if lazygit_win and vim.api.nvim_win_is_valid(lazygit_win) then vim.api.nvim_win_close(lazygit_win, true) lazygit_win = nil return end if not lazygit_buf or not vim.api.nvim_buf_is_valid(lazygit_buf) then lazygit_buf = vim.api.nvim_create_buf(false, true) end lazygit_win = vim.api.nvim_open_win(lazygit_buf, true, get_geometry()) local autocmd_id autocmd_id = vim.api.nvim_create_autocmd("VimResized", { callback = function() if lazygit_win and vim.api.nvim_win_is_valid(lazygit_win) then vim.api.nvim_win_set_config(lazygit_win, get_geometry()) else vim.api.nvim_del_autocmd(autocmd_id) end end, }) if vim.bo[lazygit_buf].buftype ~= "terminal" then vim.fn.termopen("lazygit", { on_exit = function() if lazygit_win and vim.api.nvim_win_is_valid(lazygit_win) then vim.api.nvim_win_close(lazygit_win, true) lazygit_win = nil end lazygit_buf = nil end, }) end vim.cmd("startinsert") end vim.keymap.set("n", "gg", toggle_lazygit)