my dotfiles for arch
1local function getLen(str, start_pos)
2 local byte = string.byte(str, start_pos)
3 if not byte then
4 return nil
5 end
6
7 return (byte < 0x80 and 1) or (byte < 0xE0 and 2) or (byte < 0xF0 and 3) or (byte < 0xF8 and 4) or 1
8end
9
10local function colorize(header, header_color_map, colors)
11 for letter, color in pairs(colors) do
12 local color_name = "AlphaJemuelKwelKwelWalangTatay" .. letter
13 vim.api.nvim_set_hl(0, color_name, color)
14 colors[letter] = color_name
15 end
16
17 local colorized = {}
18
19 for i, line in ipairs(header_color_map) do
20 local colorized_line = {}
21 local pos = 0
22
23 for j = 1, #line do
24 local start = pos
25 pos = pos + getLen(header[i], start + 1)
26
27 local color_name = colors[line:sub(j, j)]
28 if color_name then
29 table.insert(colorized_line, { color_name, start, pos })
30 end
31 end
32
33 table.insert(colorized, colorized_line)
34 end
35
36 return colorized
37end
38
39local M = {}
40
41M.setup = function(dashboard)
42 local color = require("util.color")
43 local alpha = require("alpha")
44
45 local mocha = require("catppuccin.palettes").get_palette("mocha")
46
47 local color_map = {
48 [[ AAAA]],
49 [[AAAAAA AAAA]],
50 [[AA AAAA AAAA KKHHKKHHHH]],
51 [[AAAA AAAA AA HHBBKKKKKKKKKKKKKK]],
52 [[ AAAAAA AAKKBBHHKKBBYYBBKKKKHHKKKKKK]],
53 [[ AAAA BBAAKKHHBBBBKKKKBBYYBBHHHHKKKKKK]],
54 [[ BBAABBKKYYYYHHKKYYYYKKKKBBBBBBZZZZZZ]],
55 [[ YYBBYYBBKKYYYYYYYYYYKKKKBBKKAAAAZZOOZZZZ]],
56 [[ XXXXYYYYBBYYYYYYYYBBBBBBKKKKBBBBAAAAZZZZ]],
57 [[ XXXXUUUUYYYYBBYYYYYYBBKKBBZZOOAAZZOOAAAAAA]],
58 [[ ZZZZZZXXUUXXXXYYYYYYYYBBAAAAZZOOOOAAOOZZZZAAAA]],
59 [[ ZZUUZZXXUUUUXXXXUUXXFFFFFFFFAAAAOOZZAAZZZZ AA]],
60 [[ RRRRUUUUZZZZZZZZXXOOFFFFOOZZOOAAAAAAZZZZAA]],
61 [[ CCSSUUUUZZXXXXZZXXOOFFFFOOZZOOOOZZOOAAAA]],
62 [[ CCCCUUUUUUUUUURRRROOFFFFOOZZOOOOZZOOZZZZ]],
63 [[ CCCCUUUUUUUUSSCCCCEEQQQQOOZZOOOOZZOOZZZZ]],
64 [[ CCCCUUGGUUUUCCCCCCEEQQQQOOZZOOOOZZEEZZ]],
65 [[ RRRRGGGGUUGGCCCCCCOOOOOOOOZZOOEEZZII]],
66 [[ IIRRGGGGGGCCCCCCOOOOOOOOZZEEII]],
67 [[ GGRRCCCCCCOOOOEEEEII II]],
68 [[ RRRRRREEEE IIII]],
69 [[ II]],
70 [[]],
71 }
72
73 local yellow = "#FAC87C"
74 local orange = "#BF854E"
75 local maroon = "#502E2B"
76 local brown = "#38291B"
77 local colors = {
78 ["A"] = { fg = mocha.rosewater },
79 ["Y"] = { fg = yellow },
80 ["B"] = { fg = color.darken(yellow, 5) },
81 ["X"] = { fg = color.darken(yellow, 20) },
82 ["U"] = { fg = color.darken(yellow, 25) },
83 ["F"] = { fg = color.darken(yellow, 35) },
84 ["O"] = { fg = color.darken(yellow, 45) },
85 ["K"] = { fg = maroon },
86 ["H"] = { fg = color.darken(maroon, 10) },
87 ["Z"] = { fg = mocha.crust },
88 ["G"] = { fg = color.darken(yellow, 25) },
89 ["R"] = { fg = orange },
90 ["Q"] = { fg = color.darken(orange, 20) },
91 ["E"] = { fg = color.darken(orange, 35) },
92 ["I"] = { fg = brown },
93 ["C"] = { fg = mocha.mantle },
94 ["S"] = { fg = mocha.subtext1 },
95 }
96
97 local header = {}
98 for _, line in ipairs(color_map) do
99 local header_line = [[]]
100 for i = 1, #line do
101 if line:sub(i, i) ~= " " then
102 header_line = header_line .. "█"
103 else
104 header_line = header_line .. " "
105 end
106 end
107 table.insert(header, header_line)
108 end
109
110 local header_add = [[ N E O B E E ]]
111 table.insert(header, header_add)
112
113 local hl_add = {}
114 for i = 1, #header_add do
115 table.insert(hl_add, { "NeoBeeTitle", 1, i })
116 end
117
118 dashboard.section.header.val = header
119 local colorized = colorize(header, color_map, colors)
120
121 table.insert(colorized, hl_add)
122
123 dashboard.section.header.opts = {
124 hl = colorized,
125 position = "center",
126 }
127
128 dashboard.section.buttons.val = {
129 dashboard.button("SPC e e", " New file", "<Cmd>ene <CR>"),
130 dashboard.button("SPC f f", " Find file"),
131 dashboard.button("SPC s s", " NeoBee config", "<Cmd>Neotree reveal ~/.config/nvim<CR>"),
132 dashboard.button("SPC q q", " Quit", "<Cmd>qa<CR>"),
133 }
134 for _, a in ipairs(dashboard.section.buttons.val) do
135 a.opts.width = 49
136 a.opts.cursor = -2
137 end
138
139 alpha.setup(dashboard.config)
140end
141
142return M