local repo = require("git.repo") local HIGHLIGHTS = { GitDeleted = "Removed", GitIgnored = "Comment", GitUnstaged = "Changed", GitRenamed = "GitStaged", GitSha = "Identifier", GitStaged = "Constant", GitUnmerged = "Todo", GitUnpulled = "Removed", GitUnpushed = "Added", GitUntracked = "Added", } local M = {} function M.status() return vim.b.git_status or "" end ---@param path string ---@return string? function M.head(path) return repo.head(path) end function M.setup() for name, link in pairs(HIGHLIGHTS) do vim.api.nvim_set_hl(0, name, { link = link, default = true }) end vim.filetype.add({ pattern = { ["git://[^/]+/(.+)"] = function(_, bufnr, inner) return vim.filetype.match({ filename = inner, buf = bufnr }) end, }, }) local group = vim.api.nvim_create_augroup("ow.git", { clear = true }) vim.api.nvim_create_autocmd( { "BufReadPost", "BufNewFile", "BufWritePost", "FileChangedShellPost" }, { group = group, callback = function(args) repo.refresh_buf(args.buf) end, } ) vim.api.nvim_create_autocmd({ "BufDelete", "BufWipeout" }, { group = group, callback = function(args) repo.unregister(args.buf) end, }) vim.api.nvim_create_autocmd("FocusGained", { group = group, callback = function() repo.refresh_buf(vim.api.nvim_get_current_buf()) end, }) vim.api.nvim_create_autocmd("VimLeavePre", { group = group, callback = function() repo.stop_all() end, }) vim.keymap.set("n", "gg", function() require("git.status_win").toggle() end, { desc = "Toggle git status sidebar" }) end return M