willothy/veil.nvim

github github
pluginstartup
stars 69
issues 4
subscribers 4
forks 3
CREATED

2023-03-22

UPDATED

2 months ago


veil.nvim

A blazingly fast, animated, and infinitely customizeable startup / dashboard plugin

Warning
Work in progress, there may be some bugs :)

Features

  • Animated sections rendered with virtual text
  • Builtin "standard library"
    • Buttons builtin
    • Oldfiles builtin
    • Current dir builtin
    • Floating widget builtin
    • Ascii frame anim builtin
    • Vertical padding builtin
  • Static text sections
  • Dynamic text sections
    • Per-section state
  • Simple and extensible API
    • Rendering / API V2 (in progress)
  • Interactible components (use buttons with <CR>)
    • Cursor 'hover' events
    • Lock cursor to menus
  • Highlighting
  • Shortcut mappings
  • Startup in <1ms
  • Mouse events
  • API for advanced rendering / terminal graphics

Demo (default config)

https://user-images.githubusercontent.com/38540736/228553706-b68e99a7-c4d6-4803-a06e-4e3bb12109ea.mp4

Installation

{
  'willothy/veil.nvim',
  lazy = true,
  dependencies = {
    -- All optional, only required for the default setup.
    -- If you customize your config, these aren't necessary.
    "nvim-telescope/telescope.nvim",
    "nvim-lua/plenary.nvim",
    "nvim-telescope/telescope-file-browser.nvim"
  }
  config = true,
  -- or configure with:
  -- opts = { ... }
}

Configuration

The defaults assume you have Telescope installed because... you probably do.

local builtin = require("veil.builtin")

local default = {
  sections = {
    builtin.sections.animated(builtin.headers.frames_nvim, {
      hl = { fg = "#5de4c7" },
    }),
    builtin.sections.buttons({
      {
        icon = "",
        text = "Find Files",
        shortcut = "f",
        callback = function()
            require("telescope.builtin").find_files()
        end,
      },
      {
        icon = "",
        text = "Find Word",
        shortcut = "w",
        callback = function()
            require("telescope.builtin").live_grep()
        end,
      },
      {
        icon = "",
        text = "Buffers",
        shortcut = "b",
        callback = function()
            require("telescope.builtin").buffers()
        end,
      },
      {
        icon = "",
        text = "Config",
        shortcut = "c",
        callback = function()
          require("telescope").extensions.file_browser.file_browser({
            path = vim.fn.stdpath("config"),
          })
        end,
      },
    }),
    builtin.sections.oldfiles(),
  },
  mappings = {},
  startup = true,
  listed = false
}

Configuration Recipes

-- in your config:

local current_day = os.date("%A")

require('veil').setup({
  sections = {
    builtin.sections.animated(builtin.headers.frames_days_of_week[current_day], {
      hl = { fg = "#5de4c7" },
    }),
    -- other sections
    -- ...
  }
}