Home

Awesome

veil.nvim

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

UPDATE 12/25/2023:

Everything below this notice is deprecated, pending a complete rewrite. As seen in #14, I intend to rebuild Veil as a composable floating-window-based UI library providing rendering, placement, interaction, and query primitives. The architecture should allow for complex startup screens with widgets and graphs, interactable items, animated headers (like before), and much more. Floating windows should also make supporting mouse interaction for heretics (/j) much easier.

Warning
I would not recommend using the current implementation, as I am not maintaining it and it is likely very buggy.

Features

Demo (default config)

<!--https://user-images.githubusercontent.com/38540736/227105511-7988cd83-be56-4606-a32d-07d6245d1307.mp4--> <!--https://user-images.githubusercontent.com/38540736/227207398-b8f7af6a-0e88-4874-93fa-196e78c14938.mp4-->

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

Installation

<details> <summary>Using lazy.nvim</summary>
{
  '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 = { ... }
}
</details>

Configuration

<details> <summary>Veil comes with the following defaults</summary> <br/>

The defaults assume you have Telescope installed because... you probably do.<br/>

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
}

</details>

Configuration Recipes

<details> <summary>Days of week header by <a href="https://github.com/coopikoop">@coopikoop</a></summary>
-- 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
    -- ...
  }
}

</details>