1return {
2 "goolord/alpha-nvim",
3 dependencies = { "nvim-mini/mini.icons" },
4 event = "VimEnter",
5
6 config = function()
7 ------------------------------------------------------------------
8 -- Load Alpha
9 ------------------------------------------------------------------
10 local alpha = require("alpha")
11 local dashboard = require("alpha.themes.dashboard")
12 local utils = require("alpha.utils")
13
14 ------------------------------------------------------------------
15 -- ASCII Logo
16 ------------------------------------------------------------------
17 local fill = vim.fn.winheight(0) - 43
18 local logo = (fill >= 0 and [[
19
20
21
22
23
24
25
26
27
28
29 ]] or "") .. [[
30
31 ███████████ █████ ██
32 ███████████ █████
33 ████████████████ ███████████ ███ ███████
34 ████████████████ ████████████ █████ ██████████████
35 █████████████████████████████ █████ █████ ████ █████
36 ██████████████████████████████████ █████ █████ ████ █████
37 ██████ ███ █████████████████ ████ █████ █████ ████ ██████
38 ██████ ██ ███████████████ ██ █████████████████
39
40 ]]
41
42 -- Header: Logo
43 -------------------------------------------------------------------
44 local header_lines = vim.split(logo, "\n")
45 table.insert(header_lines, "") -- spacer
46
47 dashboard.section.header.val = header_lines
48
49 ------------------------------------------------------------------
50 -- Optional: Logo Highlighting (kept from your theme)
51 ------------------------------------------------------------------
52 local header_hl = {}
53
54 if fill >= 0 then
55 table.insert(header_hl, { { "Red", 1, 1 } })
56 table.insert(header_hl, { { "Red", 1, 1 } })
57 table.insert(header_hl, { { "Red", 1, 1 } })
58 table.insert(header_hl, { { "Red", 1, 1 } })
59 table.insert(header_hl, { { "Red", 1, 1 } })
60 table.insert(header_hl, { { "Red", 1, 1 } })
61 table.insert(header_hl, { { "Red", 1, 1 } })
62 table.insert(header_hl, { { "Red", 1, 1 } })
63 table.insert(header_hl, { { "Red", 1, 1 } })
64 table.insert(header_hl, { { "Red", 1, 1 } })
65 end
66 table.insert(header_hl, { { "AlphaHeader0_0", 46, 48 } }) -- Line 10
67 table.insert(header_hl, { -- Line 11
68 { "AlphaHeader1_0", 7, 22 },
69 { "AlphaHeader1_1", 33, 40 },
70 { "AlphaHeader1_2", 40, 50 },
71 })
72 table.insert(header_hl, { -- Line 12
73 { "AlphaHeader2_0", 6, 21 },
74 { "AlphaHeader2_1", 33, 45 },
75 })
76 table.insert(header_hl, { -- Line 13
77 { "AlphaHeader3_0", 6, 19 },
78 { "AlphaHeader3_1", 19, 20 },
79 { "AlphaHeader3_2", 20, 35 },
80 { "AlphaHeader3_3", 35, 45 },
81 { "AlphaHeader3_4", 45, 90 },
82 })
83 table.insert(header_hl, { -- Line 14
84 { "AlphaHeader4_0", 5, 18 },
85 { "AlphaHeader4_1", 18, 36 },
86 { "AlphaHeader4_2", 36, 45 },
87 { "AlphaHeader4_3", 45, 90 },
88 })
89 table.insert(header_hl, { -- Line 15
90 { "AlphaHeader5_0", 4, 17 },
91 { "AlphaHeader5_1", 17, 24 },
92 { "AlphaHeader5_2", 24, 28 },
93 { "AlphaHeader5_3", 28, 37 },
94 { "AlphaHeader5_4", 37, 46 },
95 { "AlphaHeader5_5", 46, 90 },
96 })
97 table.insert(header_hl, { -- Line 16
98 { "AlphaHeader6_0", 2, 17 },
99 { "AlphaHeader6_1", 17, 38 },
100 { "AlphaHeader6_2", 38, 45 },
101 { "AlphaHeader6_3", 46, 90 },
102 })
103 table.insert(header_hl, { -- Line 17
104 { "AlphaHeader7_0", 1, 17 },
105 { "AlphaHeader7_1", 17, 38 },
106 { "AlphaHeader7_2", 38, 45 },
107 { "AlphaHeader7_3", 46, 90 },
108 })
109 table.insert(header_hl, { -- Line 18
110 { "AlphaHeader8_0", 1, 37 },
111 { "AlphaHeader8_1", 37, 91 },
112 })
113
114 vim.api.nvim_set_hl(0, "AlphaHeader0_0", { fg = "#a6c9ab" })
115 vim.api.nvim_set_hl(0, "AlphaHeader1_0", { fg = "#bb7744" })
116 vim.api.nvim_set_hl(0, "AlphaHeader1_1", { fg = "#386c3f" })
117 vim.api.nvim_set_hl(0, "AlphaHeader1_2", { fg = "#a6c9ab" })
118 vim.api.nvim_set_hl(0, "AlphaHeader2_0", { fg = "#be7d46" })
119 vim.api.nvim_set_hl(0, "AlphaHeader2_1", { fg = "#3d7344" })
120 vim.api.nvim_set_hl(0, "AlphaHeader3_0", { fg = "#c18250" })
121 vim.api.nvim_set_hl(0, "AlphaHeader3_1", { fg = "#5c441e" })
122 vim.api.nvim_set_hl(0, "AlphaHeader3_2", { fg = "#d6c383" })
123 vim.api.nvim_set_hl(0, "AlphaHeader3_3", { fg = "#407b48" })
124 vim.api.nvim_set_hl(0, "AlphaHeader3_4", { fg = "#98c09c" })
125 vim.api.nvim_set_hl(0, "AlphaHeader4_0", { fg = "#c38950" })
126 vim.api.nvim_set_hl(0, "AlphaHeader4_1", { fg = "#e0c785" })
127 vim.api.nvim_set_hl(0, "AlphaHeader4_2", { fg = "#44844b" })
128 vim.api.nvim_set_hl(0, "AlphaHeader4_3", { fg = "#a0c4a3" })
129 vim.api.nvim_set_hl(0, "AlphaHeader5_0", { fg = "#c58f56" })
130 vim.api.nvim_set_hl(0, "AlphaHeader5_1", { fg = "#e2cb85" })
131 vim.api.nvim_set_hl(0, "AlphaHeader5_2", { fg = "#5c441e" })
132 vim.api.nvim_set_hl(0, "AlphaHeader5_3", { fg = "#e2cb85" })
133 vim.api.nvim_set_hl(0, "AlphaHeader5_4", { fg = "#488c51" })
134 vim.api.nvim_set_hl(0, "AlphaHeader5_5", { fg = "#a6c9ab" })
135 vim.api.nvim_set_hl(0, "AlphaHeader6_0", { fg = "#c7955b" })
136 vim.api.nvim_set_hl(0, "AlphaHeader6_1", { fg = "#e3cf88" })
137 vim.api.nvim_set_hl(0, "AlphaHeader6_2", { fg = "#4d9356" })
138 vim.api.nvim_set_hl(0, "AlphaHeader6_3", { fg = "#aecdb3" })
139 vim.api.nvim_set_hl(0, "AlphaHeader7_0", { fg = "#c89b62" })
140 vim.api.nvim_set_hl(0, "AlphaHeader7_1", { fg = "#e5d38a" })
141 vim.api.nvim_set_hl(0, "AlphaHeader7_2", { fg = "#509b59" })
142 vim.api.nvim_set_hl(0, "AlphaHeader7_3", { fg = "#b7d1b9" })
143 vim.api.nvim_set_hl(0, "AlphaHeader8_0", { fg = "#5c441e" })
144 vim.api.nvim_set_hl(0, "AlphaHeader8_1", { fg = "#2e4e2a" })
145
146 header_hl = utils.charhl_to_bytehl(header_hl, header_lines, false)
147 dashboard.section.header.opts.hl = header_hl
148
149 ------------------------------------------------------------------
150 -- Buttons
151 ------------------------------------------------------------------
152 local config_path = vim.fn.stdpath("config")
153
154 dashboard.section.buttons.val = {
155 dashboard.button("n", " New file", ":ene <BAR> startinsert<CR>"),
156 dashboard.button("r", " Recent files", ":Telescope oldfiles<CR>"),
157 dashboard.button("u", " Update plugins", "<cmd>Lazy update<CR>"),
158 dashboard.button("s", " Settings", ":e " .. config_path .. "<CR>"),
159 dashboard.button("q", " Quit", "<cmd>q<CR>"),
160 }
161
162 dashboard.section.buttons.opts.spacing = 1
163 dashboard.section.buttons.opts.position = "center"
164
165 ------------------------------------------------------------------
166 -- Footer: Plugin Stats (loaded after Lazy starts)
167 ------------------------------------------------------------------
168 vim.api.nvim_create_autocmd("User", {
169 pattern = "LazyVimStarted",
170 once = true,
171 callback = function()
172 local stats = require("lazy").stats()
173 local ms = math.floor(stats.startuptime * 100 + 0.5) / 100
174
175 dashboard.section.footer.val = {
176 "",
177 "⚡ Loaded " .. stats.count .. " plugins in " .. ms .. " ms",
178 }
179
180 pcall(vim.cmd.AlphaRedraw)
181 end,
182 })
183
184 ------------------------------------------------------------------
185 -- Clean UI while dashboard is open
186 ------------------------------------------------------------------
187 local group = vim.api.nvim_create_augroup("AlphaCleanUI", {})
188
189 -- Hide ruler & showcmd in dashboard
190 vim.api.nvim_create_autocmd("User", {
191 group = group,
192 pattern = "AlphaReady",
193 callback = function()
194 vim.opt.showcmd = false
195 vim.opt.ruler = false
196 end,
197 })
198
199 -- Restore UI after leaving dashboard
200 vim.api.nvim_create_autocmd("BufUnload", {
201 group = group,
202 pattern = "<buffer>",
203 callback = function()
204 vim.opt.showcmd = true
205 vim.opt.ruler = true
206 end,
207 })
208
209 vim.api.nvim_create_autocmd("VimEnter", {
210 callback = function()
211 require("alpha").start()
212 end,
213 })
214
215 ------------------------------------------------------------------
216 -- Final setup
217 ------------------------------------------------------------------
218 dashboard.opts.opts.noautocmd = true
219 alpha.setup(dashboard.opts)
220 end,
221}