diff options
author | LostNeophyte <[email protected]> | 2023-02-11 14:41:45 +0100 |
---|---|---|
committer | LostNeophyte <[email protected]> | 2023-02-11 14:44:24 +0100 |
commit | 7be867e2aac31ef04565eaba6b416ede766c06d7 (patch) | |
tree | 413dc6c0e82b04e14f505b7f291ed56f97dea9ea /lua/lvim/core/builtins/alpha.lua | |
parent | ed5b43bba06e6d1ef7b6bd7ed95c55b64e2df3c8 (diff) |
refactor(builtins): move builtins to ./builtins
Diffstat (limited to 'lua/lvim/core/builtins/alpha.lua')
-rw-r--r-- | lua/lvim/core/builtins/alpha.lua | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/lua/lvim/core/builtins/alpha.lua b/lua/lvim/core/builtins/alpha.lua new file mode 100644 index 00000000..3270d01b --- /dev/null +++ b/lua/lvim/core/builtins/alpha.lua @@ -0,0 +1,87 @@ +local M = {} + +function M.config() + local lvim_dashboard = require "lvim.core.builtins.alpha.dashboard" + local lvim_startify = require "lvim.core.builtins.alpha.startify" + lvim.builtin.alpha = { + dashboard = { + config = {}, + section = lvim_dashboard.get_sections(), + opts = { autostart = true }, + }, + startify = { + config = {}, + section = lvim_startify.get_sections(), + opts = { autostart = true }, + }, + active = true, + mode = "dashboard", + } +end + +local function resolve_buttons(theme_name, button_section) + if button_section.val and #button_section.val > 0 then + return button_section.val + end + + local selected_theme = require("alpha.themes." .. theme_name) + local val = {} + for _, entry in pairs(button_section.entries) do + local on_press = function() + local sc_ = entry[1]:gsub("%s", ""):gsub("SPC", "<leader>") + local key = vim.api.nvim_replace_termcodes(sc_, true, false, true) + vim.api.nvim_feedkeys(key, "normal", false) + end + local button_element = selected_theme.button(entry[1], entry[2], entry[3]) + -- this became necessary after recent changes in alpha.nvim (06ade3a20ca9e79a7038b98d05a23d7b6c016174) + button_element.on_press = on_press + + button_element.opts = vim.tbl_extend("force", button_element.opts, entry[4] or button_section.opts or {}) + + table.insert(val, button_element) + end + return val +end + +local function resolve_config(theme_name) + local selected_theme = require("alpha.themes." .. theme_name) + local resolved_section = selected_theme.section + local section = lvim.builtin.alpha[theme_name].section + + for name, el in pairs(section) do + for k, v in pairs(el) do + if name:match "buttons" and k == "entries" then + resolved_section[name].val = resolve_buttons(theme_name, el) + elseif v then + resolved_section[name][k] = v + end + end + + resolved_section[name].opts = el.opts or {} + end + + local opts = lvim.builtin.alpha[theme_name].opts or {} + selected_theme.config.opts = vim.tbl_extend("force", selected_theme.config.opts, opts) + + return selected_theme.config +end + +function M.setup() + local status_ok, alpha = pcall(require, "alpha") + if not status_ok then + return + end + local mode = lvim.builtin.alpha.mode + local config = lvim.builtin.alpha[mode].config + + -- this makes it easier to use a completely custom configuration + if vim.tbl_isempty(config) then + config = resolve_config(mode) + end + + alpha.setup(config) + + return alpha +end + +return M |