alpha.lua 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. local M = {}
  2. function M.config()
  3. local lvim_dashboard = require "lvim.core.alpha.dashboard"
  4. local lvim_startify = require "lvim.core.alpha.startify"
  5. lvim.builtin.alpha = {
  6. dashboard = {
  7. config = {},
  8. section = lvim_dashboard.get_sections(),
  9. opts = { autostart = true },
  10. },
  11. startify = {
  12. config = {},
  13. section = lvim_startify.get_sections(),
  14. opts = { autostart = true },
  15. },
  16. active = true,
  17. mode = "dashboard",
  18. }
  19. end
  20. local function resolve_buttons(theme_name, entries)
  21. local selected_theme = require("alpha.themes." .. theme_name)
  22. local val = {}
  23. for _, entry in pairs(entries) do
  24. local on_press = function()
  25. local sc_ = entry[1]:gsub("%s", ""):gsub("SPC", "<leader>")
  26. local key = vim.api.nvim_replace_termcodes(sc_, true, false, true)
  27. vim.api.nvim_feedkeys(key, "normal", false)
  28. end
  29. local button_element = selected_theme.button(entry[1], entry[2], entry[3])
  30. -- this became necessary after recent changes in alpha.nvim (06ade3a20ca9e79a7038b98d05a23d7b6c016174)
  31. button_element.on_press = on_press
  32. button_element.opts =
  33. vim.tbl_extend("force", button_element.opts, entry[4] or lvim.builtin.alpha[theme_name].section.buttons.opts)
  34. table.insert(val, button_element)
  35. end
  36. return val
  37. end
  38. local function resolve_config(theme_name)
  39. local selected_theme = require("alpha.themes." .. theme_name)
  40. local resolved_section = selected_theme.section
  41. local section = lvim.builtin.alpha[theme_name].section
  42. for name, el in pairs(section) do
  43. for k, v in pairs(el) do
  44. if name:match "buttons" and k == "entries" then
  45. resolved_section[name].val = resolve_buttons(theme_name, v)
  46. elseif v then
  47. resolved_section[name][k] = v
  48. end
  49. end
  50. resolved_section[name].opts = el.opts or {}
  51. end
  52. local opts = lvim.builtin.alpha[theme_name].opts or {}
  53. selected_theme.config.opts = vim.tbl_extend("force", selected_theme.config.opts, opts)
  54. return selected_theme.config
  55. end
  56. local function configure_additional_autocmds()
  57. local group = "_dashboard_settings"
  58. vim.api.nvim_create_augroup(group, {})
  59. vim.api.nvim_create_autocmd("FileType", {
  60. group = group,
  61. pattern = "alpha",
  62. command = "set showtabline=0 | autocmd BufLeave <buffer> set showtabline=" .. vim.opt.showtabline._value,
  63. })
  64. if not lvim.builtin.lualine.options.globalstatus then
  65. -- https://github.com/goolord/alpha-nvim/issues/42
  66. vim.api.nvim_create_autocmd("FileType", {
  67. group = group,
  68. pattern = "alpha",
  69. command = "set laststatus=0 | autocmd BufUnload <buffer> set laststatus=" .. vim.opt.laststatus._value,
  70. })
  71. end
  72. end
  73. function M.setup()
  74. local status_ok, alpha = pcall(require, "alpha")
  75. if not status_ok then
  76. return
  77. end
  78. local mode = lvim.builtin.alpha.mode
  79. local config = lvim.builtin.alpha[mode].config
  80. -- this makes it easier to use a completely custom configuration
  81. if vim.tbl_isempty(config) then
  82. config = resolve_config(mode)
  83. end
  84. alpha.setup(config)
  85. configure_additional_autocmds()
  86. end
  87. return M