main
59c7d64 · 8 days ago 139 commits
  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}