mirror of
				https://github.com/NotAShelf/nvf.git
				synced 2025-10-31 02:52:37 +00:00 
			
		
		
		
	feat: improved alpha dashboard theme
This commit is contained in:
		
					parent
					
						
							
								ede1e7cb2b
							
						
					
				
			
			
				commit
				
					
						8caf286177
					
				
			
		
					 1 changed files with 198 additions and 1 deletions
				
			
		|  | @ -17,8 +17,205 @@ in { | ||||||
|       "alpha-nvim" |       "alpha-nvim" | ||||||
|     ]; |     ]; | ||||||
| 
 | 
 | ||||||
|  |     # the credit for this configuration goes to https://github.com/Rishabh672003 | ||||||
|  |     # good work, honestly | ||||||
|     vim.luaConfigRC.alpha = nvim.dag.entryAnywhere '' |     vim.luaConfigRC.alpha = nvim.dag.entryAnywhere '' | ||||||
|       require'alpha'.setup(require'alpha.themes.startify'.config) |       local alpha = require("alpha") | ||||||
|  |       local plenary_path = require("plenary.path") | ||||||
|  |       local dashboard = require("alpha.themes.dashboard") | ||||||
|  |       local cdir = vim.fn.getcwd() | ||||||
|  |       local if_nil = vim.F.if_nil | ||||||
|  | 
 | ||||||
|  |       local nvim_web_devicons = { | ||||||
|  |       	enabled = true, | ||||||
|  |       	highlight = true, | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       local function get_extension(fn) | ||||||
|  |       	local match = fn:match("^.+(%..+)$") | ||||||
|  |       	local ext = "" | ||||||
|  |       	if match ~= nil then | ||||||
|  |       		ext = match:sub(2) | ||||||
|  |       	end | ||||||
|  |       	return ext | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       local function icon(fn) | ||||||
|  |       	local nwd = require("nvim-web-devicons") | ||||||
|  |       	local ext = get_extension(fn) | ||||||
|  |       	return nwd.get_icon(fn, ext, { default = true }) | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       local function file_button(fn, sc, short_fn) | ||||||
|  |       	short_fn = short_fn or fn | ||||||
|  |       	local ico_txt | ||||||
|  |       	local fb_hl = {} | ||||||
|  | 
 | ||||||
|  |       	if nvim_web_devicons.enabled then | ||||||
|  |       		local ico, hl = icon(fn) | ||||||
|  |       		local hl_option_type = type(nvim_web_devicons.highlight) | ||||||
|  |       		if hl_option_type == "boolean" then | ||||||
|  |       			if hl and nvim_web_devicons.highlight then | ||||||
|  |       				table.insert(fb_hl, { hl, 0, 3 }) | ||||||
|  |       			end | ||||||
|  |       		end | ||||||
|  |       		if hl_option_type == "string" then | ||||||
|  |       			table.insert(fb_hl, { nvim_web_devicons.highlight, 0, 3 }) | ||||||
|  |       		end | ||||||
|  |       		ico_txt = ico .. "  " | ||||||
|  |       	else | ||||||
|  |       		ico_txt = "" | ||||||
|  |       	end | ||||||
|  |       	local file_button_el = dashboard.button(sc, ico_txt .. short_fn, "<cmd>e " .. fn .. " <CR>") | ||||||
|  |       	local fn_start = short_fn:match(".*[/\\]") | ||||||
|  |       	if fn_start ~= nil then | ||||||
|  |       		table.insert(fb_hl, { "Comment", #ico_txt - 2, #fn_start + #ico_txt }) | ||||||
|  |       	end | ||||||
|  |       	file_button_el.opts.hl = fb_hl | ||||||
|  |       	return file_button_el | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       local default_mru_ignore = { "gitcommit" } | ||||||
|  | 
 | ||||||
|  |       local mru_opts = { | ||||||
|  |       	ignore = function(path, ext) | ||||||
|  |       		return (string.find(path, "COMMIT_EDITMSG")) or (vim.tbl_contains(default_mru_ignore, ext)) | ||||||
|  |       	end, | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       --- @param start number | ||||||
|  |       --- @param cwd string optional | ||||||
|  |       --- @param items_number number optional number of items to generate, default = 10 | ||||||
|  |       local function mru(start, cwd, items_number, opts) | ||||||
|  |       	opts = opts or mru_opts | ||||||
|  |       	items_number = if_nil(items_number, 15) | ||||||
|  | 
 | ||||||
|  |       	local oldfiles = {} | ||||||
|  |       	for _, v in pairs(vim.v.oldfiles) do | ||||||
|  |       		if #oldfiles == items_number then | ||||||
|  |       			break | ||||||
|  |       		end | ||||||
|  |       		local cwd_cond | ||||||
|  |       		if not cwd then | ||||||
|  |       			cwd_cond = true | ||||||
|  |       		else | ||||||
|  |       			cwd_cond = vim.startswith(v, cwd) | ||||||
|  |       		end | ||||||
|  |       		local ignore = (opts.ignore and opts.ignore(v, get_extension(v))) or false | ||||||
|  |       		if (vim.fn.filereadable(v) == 1) and cwd_cond and not ignore then | ||||||
|  |       			oldfiles[#oldfiles + 1] = v | ||||||
|  |       		end | ||||||
|  |       	end | ||||||
|  |       	local target_width = 35 | ||||||
|  | 
 | ||||||
|  |       	local tbl = {} | ||||||
|  |       	for i, fn in ipairs(oldfiles) do | ||||||
|  |       		local short_fn | ||||||
|  |       		if cwd then | ||||||
|  |       			short_fn = vim.fn.fnamemodify(fn, ":.") | ||||||
|  |       		else | ||||||
|  |       			short_fn = vim.fn.fnamemodify(fn, ":~") | ||||||
|  |       		end | ||||||
|  | 
 | ||||||
|  |       		if #short_fn > target_width then | ||||||
|  |       			short_fn = plenary_path.new(short_fn):shorten(1, { -2, -1 }) | ||||||
|  |       			if #short_fn > target_width then | ||||||
|  |       				short_fn = plenary_path.new(short_fn):shorten(1, { -1 }) | ||||||
|  |       			end | ||||||
|  |       		end | ||||||
|  | 
 | ||||||
|  |       		local shortcut = tostring(i + start - 1) | ||||||
|  | 
 | ||||||
|  |       		local file_button_el = file_button(fn, shortcut, short_fn) | ||||||
|  |       		tbl[i] = file_button_el | ||||||
|  |       	end | ||||||
|  |       	return { | ||||||
|  |       		type = "group", | ||||||
|  |       		val = tbl, | ||||||
|  |       		opts = {}, | ||||||
|  |       	} | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       local default_header = { | ||||||
|  |       	type = "text", | ||||||
|  |       	val = { | ||||||
|  |       		[[███    ██ ███████  ██████  ██    ██ ██ ███    ███]], | ||||||
|  |       		[[████   ██ ██      ██    ██ ██    ██ ██ ████  ████]], | ||||||
|  |       		[[██ ██  ██ █████   ██    ██ ██    ██ ██ ██ ████ ██]], | ||||||
|  |       		[[██  ██ ██ ██      ██    ██  ██  ██  ██ ██  ██  ██]], | ||||||
|  |       		[[██   ████ ███████  ██████    ████   ██ ██      ██]], | ||||||
|  | 
 | ||||||
|  |       		-- [[                               __                ]], | ||||||
|  |       		-- [[  ___     ___    ___   __  __ /\_\    ___ ___    ]], | ||||||
|  |       		-- [[ / _ `\  / __`\ / __`\/\ \/\ \\/\ \  / __` __`\  ]], | ||||||
|  |       		-- [[/\ \/\ \/\  __//\ \_\ \ \ \_/ |\ \ \/\ \/\ \/\ \ ]], | ||||||
|  |       		-- [[\ \_\ \_\ \____\ \____/\ \___/  \ \_\ \_\ \_\ \_\]], | ||||||
|  |       		-- [[ \/_/\/_/\/____/\/___/  \/__/    \/_/\/_/\/_/\/_/]], | ||||||
|  |       	}, | ||||||
|  |       	opts = { | ||||||
|  |       		position = "center", | ||||||
|  |       		hl = "Type", | ||||||
|  |       		-- wrap = "overflow"; | ||||||
|  |       	}, | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       local section_mru = { | ||||||
|  |       	type = "group", | ||||||
|  |       	val = { | ||||||
|  |       		{ | ||||||
|  |       			type = "text", | ||||||
|  |       			val = "Recent files", | ||||||
|  |       			opts = { | ||||||
|  |       				hl = "SpecialComment", | ||||||
|  |       				shrink_margin = false, | ||||||
|  |       				position = "center", | ||||||
|  |       			}, | ||||||
|  |       		}, | ||||||
|  |       		{ type = "padding", val = 1 }, | ||||||
|  |       		{ | ||||||
|  |       			type = "group", | ||||||
|  |       			val = function() | ||||||
|  |       				return { mru(0, cdir) } | ||||||
|  |       			end, | ||||||
|  |       			opts = { shrink_margin = false }, | ||||||
|  |       		}, | ||||||
|  |       	}, | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       local buttons = { | ||||||
|  |       	type = "group", | ||||||
|  |       	val = { | ||||||
|  |       		{ type = "text", val = "Quick links", opts = { hl = "SpecialComment", position = "center" } }, | ||||||
|  |       		{ type = "padding", val = 1 }, | ||||||
|  |       		dashboard.button("e", "  New file", "<cmd>ene<CR>"), | ||||||
|  |       		dashboard.button("SPC f", "  Find file"), | ||||||
|  |       		dashboard.button("SPC F", "  Live grep"), | ||||||
|  |       		dashboard.button("SPC p", "  Projects"), | ||||||
|  |       		dashboard.button("q", "  Quit", "<cmd>qa<CR>"), | ||||||
|  |       	}, | ||||||
|  |       	position = "center", | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       local config = { | ||||||
|  |       	layout = { | ||||||
|  |       		{ type = "padding", val = 2 }, | ||||||
|  |       		default_header, | ||||||
|  |       		{ type = "padding", val = 2 }, | ||||||
|  |       		section_mru, | ||||||
|  |       		{ type = "padding", val = 2 }, | ||||||
|  |       		buttons, | ||||||
|  |       	}, | ||||||
|  |       	opts = { | ||||||
|  |       		margin = 5, | ||||||
|  |       		setup = function() | ||||||
|  |       			vim.cmd([[ | ||||||
|  |                   autocmd alpha_temp DirChanged * lua require('alpha').redraw() | ||||||
|  |                   ]]) | ||||||
|  |       		end, | ||||||
|  |       	}, | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       alpha.setup(config) | ||||||
|     ''; |     ''; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 NotAShelf
				NotAShelf