aboutsummaryrefslogtreecommitdiff
path: root/config/nvim/lua/core/statusline.lua
diff options
context:
space:
mode:
authorben <ben@nagy.contact>2025-05-03 14:28:00 -0700
committerben <ben@nagy.contact>2025-05-03 14:28:00 -0700
commitc1e58a905bbdddf109dd3b7473edb2e8076d708b (patch)
tree47388a1dd7beae74e9b4753761b80c239a1b2ef9 /config/nvim/lua/core/statusline.lua
parentdec61653987f584822f87515281e9f82aaac972f (diff)
current neovim config (lua)
Diffstat (limited to 'config/nvim/lua/core/statusline.lua')
-rw-r--r--config/nvim/lua/core/statusline.lua82
1 files changed, 82 insertions, 0 deletions
diff --git a/config/nvim/lua/core/statusline.lua b/config/nvim/lua/core/statusline.lua
new file mode 100644
index 0000000..cc4bd09
--- /dev/null
+++ b/config/nvim/lua/core/statusline.lua
@@ -0,0 +1,82 @@
+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