nix/homes/modules/programs/neovim/lua/plugins/git.lua

93 lines
2.6 KiB
Lua

return {
{
"vim-fugitive",
enabled = nixCats("git.merge") or false,
cmd = { "Git", "Gvdiffsplit" },
},
{
"resolve-nvim",
enabled = nixCats("git.merge") or false,
event = { "BufReadPre", "BufNewFile" },
after = function(plugin)
require("resolve").setup({
default_keymaps = false,
on_conflicts_resolved = function(info)
-- NOTE: am not sure if i wanna stage files automatically
-- local filepath = vim.api.nvim_buf_get_name(info.bufnr)
-- vim.fn.system({ "git", "add", filepath })
-- vim.notify("conflicts resolved :3 file staged yayayayy <3", vim.log.levels.INFO)
vim.notify("conflicts resolved :3", vim.log.levels.INFO)
end,
})
end,
},
{
"gitsigns.nvim",
enabled = nixCats("git.gitsigns") or false,
after = function(plugin)
require("gitsigns").setup({
signs = {
add = { text = "" },
change = { text = "" },
delete = { text = "_" },
topdelete = { text = "" },
changedelete = { text = "~" },
untracked = { text = "" },
},
signs_staged = {
add = { text = "" },
change = { text = "" },
delete = { text = "_" },
topdelete = { text = "" },
changedelete = { text = "~" },
untracked = { text = "" },
},
on_attach = function(bufnr)
local gitsigns = require("gitsigns")
-- toggle git blame
vim.keymap.set("n", "<leader>gb", function()
local wins = vim.api.nvim_list_wins()
for _, win in ipairs(wins) do
local buf = vim.api.nvim_win_get_buf(win)
local ft = vim.api.nvim_get_option_value("filetype", { buf = buf })
if ft == "gitsigns-blame" then
vim.api.nvim_win_close(win, true)
return
end
end
vim.cmd("Gitsigns blame")
end)
vim.keymap.set("n", "<leader>bl", gitsigns.toggle_current_line_blame)
vim.keymap.set("n", "]c", function()
if vim.wo.diff then
vim.cmd.normal({ "]c", bang = true })
else
gitsigns.nav_hunk("next")
end
end)
vim.keymap.set("n", "[c", function()
if vim.wo.diff then
vim.cmd.normal({ "[c", bang = true })
else
gitsigns.nav_hunk("prev")
end
end)
vim.keymap.set("n", "<leader>hs", gitsigns.stage_hunk)
vim.keymap.set("n", "<leader>hu", gitsigns.undo_stage_hunk)
vim.keymap.set("n", "<leader>hS", gitsigns.stage_buffer)
vim.keymap.set("n", "<leader>hU", gitsigns.reset_buffer_index)
vim.keymap.set("n", "<leader>hi", gitsigns.toggle_current_line_blame)
vim.keymap.set("n", "<leader>hp", gitsigns.preview_hunk_inline)
end,
})
end,
},
}