local M = {} local branch_cache = "" local last_check = 0 local check_interval = 1000 -- Check git branch every 1 second local function async_git_branch() local check_time = vim.loop.now() if check_time - last_check < check_interval then return branch_cache end last_check = check_time local stdout = vim.loop.new_pipe(false) local stderr = vim.loop.new_pipe(false) local handle handle = vim.loop.spawn("git", { args = { "branch", "--show-current" }, stdio = { nil, stdout, stderr } }, function(code, signal) stdout:close() stderr:close() handle:close() end) if handle then stdout:read_start(vim.schedule_wrap(function(err, data) if data then branch_cache = data:gsub("\n", "") end end)) end return branch_cache end function M.statusline_git() local branch_name = async_git_branch() return #branch_name > 0 and ' ' .. branch_name .. ' ' or '' end -- Rest of your statusline.lua remains exactly the same function M.setup() vim.cmd('highlight clear StatusLine') vim.cmd('highlight clear StatusLineNC') local highlights = { StatusLineGit = { bg = "#161616", fg = "#D8DEE9" }, StatusLineBuffer = { bg = "NONE", fg = "#D8DEE9" }, StatusLine = { bg = "NONE", fg = "#D8DEE9" }, StatusLineFiletype = { bg = "NONE", fg = "#D8DEE9" }, StatusLinePath = { bg = "NONE", fg = "#D8DEE9" }, StatusLineModified = { bg = "NONE", fg = "#D8DEE9" }, } for name, colors in pairs(highlights) do vim.api.nvim_set_hl(0, name, colors) end vim.opt.statusline = table.concat({ "%#StatusLineGit#%{v:lua.require'core.statusline'.statusline_git()}", "%#StatusLineBuffer# %n ", "%#StatusLine#%{&ff} ", "%#StatusLineFiletype#%y", "%#StatusLinePath# %<%{expand('%:p:h')}/%f", "%#StatusLineModified#%m", "%=", "%#StatusLine#%5l", "/%L:%v ", "%{char2nr(getline('.')[col('.')-1])} " }) end vim.api.nvim_create_autocmd("ColorScheme", { pattern = "*", callback = function() M.setup() end, }) return M