my dotfiles for arch
1local fallback_palette = {
2 color0 = "#191724",
3 color1 = "#eb6f92",
4 color2 = "#31748f",
5 color3 = "#f6c177",
6 color4 = "#9ccfd8",
7 color5 = "#c4a7e7",
8 color6 = "#ebbcba",
9 color7 = "#908caa",
10 color8 = "#26233a",
11 color9 = "#eb6f92",
12 color10 = "#31748f",
13 color11 = "#f6c177",
14 color12 = "#9ccfd8",
15 color13 = "#c4a7e7",
16 color14 = "#ebbcba",
17 color15 = "#e0def4",
18}
19
20local function build_theme()
21 local c = _G.matugen_palette or fallback_palette
22 local bg_base = "NONE"
23 local dark = "#000000"
24 local color = require("util.color")
25
26 return {
27 normal = {
28 a = { bg = c.color4, fg = dark, gui = "bold" },
29 b = { bg = color.darken(c.color4, 50), fg = c.color15 },
30 c = { bg = c.color0, fg = c.color15 },
31 },
32 insert = {
33 a = { bg = c.color2, fg = dark, gui = "bold" },
34 b = { bg = color.darken(c.color2, 50), fg = c.color15 },
35 },
36 visual = {
37 a = { bg = c.color5, fg = dark, gui = "bold" },
38 b = { bg = color.darken(c.color5, 50), fg = c.color15 },
39 },
40 replace = {
41 a = { bg = c.color3, fg = dark, gui = "bold" },
42 b = { bg = color.darken(c.color3, 50), fg = c.color15 },
43 },
44 command = {
45 a = { bg = c.color1, fg = dark, gui = "bold" },
46 b = { bg = color.darken(c.color1, 50), fg = c.color15 },
47 },
48 inactive = {
49 a = { bg = bg_base, fg = c.color7, gui = "bold" },
50 b = { bg = bg_base, fg = c.color7 },
51 },
52 }
53end
54
55local function setup_macro_refresh(lualine)
56 vim.api.nvim_create_autocmd("RecordingEnter", {
57 callback = function()
58 lualine.refresh({ place = { "statusline" } })
59 end,
60 })
61 vim.api.nvim_create_autocmd("RecordingLeave", {
62 callback = function()
63 local timer = vim.loop.new_timer()
64 timer:start(
65 50,
66 0,
67 vim.schedule_wrap(function()
68 lualine.refresh({ place = { "statusline" } })
69 end)
70 )
71 end,
72 })
73end
74
75local function macro_recording_status()
76 return {
77 "macro-recording",
78 fmt = function()
79 local register = vim.fn.reg_recording()
80 return register == "" and "" or "RECORDING @" .. register
81 end,
82 }
83end
84
85local function heart()
86 return [[♥ ]]
87end
88
89return {
90 "nvim-lualine/lualine.nvim",
91 event = "VeryLazy",
92 dependencies = { "nvim-tree/nvim-web-devicons" },
93 init = function()
94 vim.opt.laststatus = 0
95 end,
96 config = function()
97 vim.opt.laststatus = 3
98
99 local lualine = require("lualine")
100 setup_macro_refresh(lualine)
101
102 local function do_setup()
103 lualine.setup({
104 options = {
105 theme = build_theme(),
106 component_separators = "",
107 section_separators = { left = "", right = "" },
108 disabled_filetypes = { "alpha" },
109 },
110 sections = {
111 lualine_a = {
112 { "mode", separator = { left = "", right = "" }, right_padding = 2 },
113 macro_recording_status(),
114 },
115 lualine_b = { "diff", "diagnostics" },
116 lualine_c = { { "filename", path = 1 } },
117 lualine_x = { "filetype" },
118 lualine_y = { "progress" },
119 lualine_z = {
120 { "location", separator = { left = "" }, left_padding = 2 },
121 { heart, separator = { right = "" } },
122 },
123 },
124 extensions = { "nvim-tree", "fzf" },
125 })
126 end
127
128 do_setup()
129
130 -- Re-setup lualine when matugen reloads theme
131 vim.api.nvim_create_autocmd("User", {
132 pattern = "MatugenReload",
133 callback = do_setup,
134 })
135 end,
136}