馃 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
11---@param cfg? lylla.config
12function M.setup(cfg)
13 cfg = cfg or {}
14 local config = require("lylla.config")
15 config.set(config.override(cfg))
16end
17
18function M.inithls()
19 local utils = require("lylla.utils")
20 vim.iter(pairs(default_hls)):each(function(mode, defaulthl)
21 local name = utils.get_modehl_name(mode)
22
23 local hl = require("lylla.config").get().hls[mode]
24 if hl then
25 vim.api.nvim_set_hl(0, name, hl)
26 return
27 end
28
29 if vim.tbl_isempty(vim.api.nvim_get_hl(0, { name = name })) then
30 vim.api.nvim_set_hl(0, name, defaulthl)
31 end
32 end)
33end
34
35function M.resethl()
36 local utils = require("lylla.utils")
37 vim.iter(pairs(default_hls)):each(function(mode, _)
38 local name = utils.get_modehl_name(mode)
39 vim.api.nvim_set_hl(0, name, {})
40 end)
41end
42
43function M.init()
44 vim.api.nvim_create_autocmd("WinNew", {
45 group = vim.api.nvim_create_augroup("lylla:win:new", { clear = true }),
46 callback = function()
47 local win = vim.api.nvim_get_current_win()
48 require("lylla.statusline"):new(win):init()
49 end,
50 })
51 local win = vim.api.nvim_get_current_win()
52 require("lylla.statusline"):new(win):init()
53
54 vim.api.nvim_create_autocmd("WinClosed", {
55 group = vim.api.nvim_create_augroup("lylla:close", { clear = true }),
56 callback = function(ev)
57 local stl = require("lylla.statusline").wins[ev.match]
58 if stl then
59 stl:close()
60 end
61 end,
62 })
63
64 vim.api.nvim_create_autocmd("ColorSchemePre", {
65 group = vim.api.nvim_create_augroup("lylla:resethl", { clear = true }),
66 callback = function()
67 M.resethl()
68 end,
69 })
70 vim.api.nvim_create_autocmd("ColorScheme", {
71 group = vim.api.nvim_create_augroup("lylla:inithls", { clear = true }),
72 callback = function()
73 M.inithls()
74 end,
75 })
76 M.inithls()
77end
78
79return M