馃 a tiny, customizable statusline for neovim
1local M = {}
2
3---@type table<'normal'|'visual'|'command'|'insert', vim.api.keyset.highlight>
4local default_hls = {
5 normal = { link = "MiniIconsAzure" },
6 visual = { link = "MiniIconsPurple" },
7 command = { link = "MiniIconsOrange" },
8 insert = { link = "MiniIconsGrey" },
9}
10
11function M.inithls()
12 local utils = require("lylla.utils")
13 vim.iter(pairs(default_hls)):each(function(mode, defaulthl)
14 local name = utils.get_modehl_name(mode)
15
16 local hl = require("lylla.config").get().hls[mode]
17 if hl then
18 vim.api.nvim_set_hl(0, name, hl)
19 return
20 end
21
22 if vim.tbl_isempty(vim.api.nvim_get_hl(0, { name = name })) then
23 vim.api.nvim_set_hl(0, name, defaulthl)
24 end
25 end)
26end
27
28function M.resethl()
29 local utils = require("lylla.utils")
30 vim.iter(pairs(default_hls)):each(function(mode, _)
31 local name = utils.get_modehl_name(mode)
32 vim.api.nvim_set_hl(0, name, {})
33 end)
34end
35
36function M.init()
37 vim.api.nvim_create_autocmd("WinNew", {
38 group = vim.api.nvim_create_augroup("lylla:win:new", { clear = true }),
39 callback = function()
40 local win = vim.api.nvim_get_current_win()
41 require("lylla.statusline"):new(win):init()
42 require("lylla.winbar"):new(win):init()
43 end,
44 })
45 local win = vim.api.nvim_get_current_win()
46 require("lylla.statusline"):new(win):init()
47 require("lylla.winbar"):new(win):init()
48
49 vim.api.nvim_create_autocmd("WinClosed", {
50 group = vim.api.nvim_create_augroup("lylla:close", { clear = true }),
51 callback = function(ev)
52 local stl = require("lylla.statusline").wins[ev.match]
53 if stl then
54 stl:close()
55 end
56 local wbar = require("lylla.winbar").wins[ev.match]
57 if wbar then
58 wbar:close()
59 end
60 end,
61 })
62
63 vim.api.nvim_create_autocmd("ColorSchemePre", {
64 group = vim.api.nvim_create_augroup("lylla:resethl", { clear = true }),
65 callback = function()
66 M.resethl()
67 end,
68 })
69 vim.api.nvim_create_autocmd("ColorScheme", {
70 group = vim.api.nvim_create_augroup("lylla:inithls", { clear = true }),
71 callback = function()
72 M.inithls()
73 end,
74 })
75 M.inithls()
76end
77
78return M