github github
stars 398
issues 9
subscribers 3
forks 32



5 months ago


The fully customizable greeter for neovim


  • Fully customizable
  • Themes
  • Easier customization with building blocks


Use your favourite package manager and call setup function. Plenary.nvim is a dependency and must be installed. For the default setup telescope.nvim is needed.

use {
  requires = {"nvim-telescope/telescope.nvim", "nvim-lua/plenary.nvim"},
  config = function()


Call the setup function with your configurations.

  section_1 = <section> -- for the structure of a section see below
  section_2 = <section> -- as much sections as you like
  options = {
      mapping_keys = true, -- display mapping (e.g. <leader>ff)

      -- if < 1 fraction of screen width
      -- if > 1 numbers of column
      cursor_column = 0.5,

      after = function() -- function that gets executed at the end
        <lua commands>
      empty_lines_between_mappings = true, -- add an empty line between mapping/commands
      disable_statuslines = true, -- disable status-, buffer- and tablines
      paddings = {1,2}, -- amount of empty lines before each section (must be equal to amount of sections)
  mappings = {
    execute_command = "<CR>",
    open_file = "o",
    open_file_split = "<c-o>",
    open_section = "<TAB>",
    open_help = "?",
  colors = {
    background = "#1f2227",
    folded_section = "#56b6c2", -- the color of folded sections
      -- this can also be changed with the `StartupFoldedSection` highlight group
  parts = {"section_1", "section_2"} -- all sections in order

You could also put the configurations into a file. For example /lua/config/startup_nvim.lua. The file should then look like this:

local settings = {<settings>}
return settings

The plugin setup should then require the file:

use {
  requires = {"nvim-telescope/telescope.nvim", "nvim-lua/plenary.nvim"},
  config = function()

The filetype of the startup screen is startup. You can use this to disable plugins like statuslines.

The Structure of a section

section = {
    -- "text" -> text that will be displayed
    -- "mapping" -> create mappings for commands that can be used
    -- use mappings.execute_command on the commands to execute
    -- "oldfiles" -> display oldfiles (can be opened with mappings.open_file/open_file_split)
    type = "text", -- can be mapping or oldfiles
    oldfiles_directory = false, -- if the oldfiles of the current directory should be displayed
    align = "center", -- "center", "left" or "right"
    fold_section = false, -- whether to fold or not
    title = "title", -- title for the folded section
    -- if < 1 fraction of screen width
    -- if > 1 numbers of column
    margin = 5, -- the margin for left or right alignment
    -- type of content depends on `type`
    -- "text" -> a table with string or a function that requires a function that returns a table of strings
    -- "mapping" -> a table with tables in the format:
    -- {
    --   {<displayed_command_name>, <command>, <mapping>}
    --   {<displayed_command_name>, <command>, <mapping>}
    -- }
    -- e.g. {" Find File", "Telescope find_files", "<leader>ff" }
    -- "oldfiles" -> ""
    content = <content>
    highlight = "String", -- highlight group in which the section text should be highlighted
    default_color = "#FF0000", -- a hex color that gets used if you don't specify `highlight`
    oldfiles_amount = 5, -- the amount of oldfiles to be displayed

User Mappings

You can easily add your own mappings with a function. You just have to provide a table with keys, command pairs like this:

  ["<leader>ff"]="<cmd>Telescope find_files<CR>",
  ["<leader>lg"]="<cmd>Telescope live_grep<CR>"

Those mappings will automatically be added to the help.


You can use some functions from lua/startup/functions.lua. For that you would use:

type = "text",
content = function()

The functions are documented in :help startup_nvim.functions.


content = {
    "This is:",
    "by max397574"
content = function()
    local clock = " " .. "%H:%M"
    local date = " " .. "%d-%m-%y"
    return {clock,date}

With a separate function:

local function time()
    local clock = " " .. "%H:%M"
    local date = " " .. "%d-%m-%y"
    return {clock,date}

settings = {
    content = time()
content = {
  [" Find File"] = { "Telescope find_files", "<leader>ff" },
  [" Find Word"] = { "Telescope live_grep", "<leader>lg" },
  [" Recent Files"] = { "Telescope oldfiles", "<leader>of" },
  [" File Browser"] = { "Telescope file_browser", "<leader>fb" },
  [" Colorschemes"] = { "Telescope colorscheme", "<leader>cs" },
  [" New File"] = { "lua require'startup'.new_file()", "<leader>nf" },

Check out the themes for full examples.


At the moment there are three themes:

  • dashboard (default)
  • evil
  • startify

You can use themes like this:

require("startup").setup({theme = "dashboard"}) -- put theme name here


The dashboard theme is a simple theme with some commands and a header.

dashboard theme


The startify theme is a theme like vim-startify. It has oldfiles, bookmarks and a random quote. You can open the oldfiles with the number written before it ([2] ~/.config/nvim/init.lua can be opened by pressing 2). You can open a bookmark with the key written in front of it.

Customize bookmarks with vim.g.startup_booksmarks:

vim.g.startup_bookmarks = {
  ["Q"] = '~/.config/qtile/',
  ["I"] = '~/.config/nvim/init.lua',
  ["F"] = '~/.config/fish/',
  ["K"] = '~/.config/kitty/kitty.conf',
  ["A"] = '~/.config/alacritty/alacritty.yml',



The evil theme is just a bloated theme with oldfiles, commands, additional info and a quote.

evil theme

Custom theme

You can put your theme in lua/startup/themes/my_theme.lua The file has to return settings with the structure like you put them into setup(). You can also overwrite a theme (e.g. dashboard). Just copy all the setting from it and change whatever you want. You can use some functions from lua/startup/functions.lua with require("startup.functions").function_name(). They are documented in :help startup_nvim.functions. The same applies to headers. Here you can use them with require("startup.headers").header_name. They are documented in :help startup_nvim.headers. A good tool to create your own headers is image to braille.

Conflicts with other plugins like auto-session

If this plugin conflict with other plugins you can disable it on startup. For this you need to set vim.g.startup_disable_on_startup to true. You can do that like this:

config = function()
    vim.g.startup_disable_on_startup = true

You can still display it later then with :Startup display.
👀 Screenshots

Easily open Files (in splits)


Builtin Key Help (user mappings included)

key help

Folds and commands with mappings

folds mappings


  • Thanks to Binx, for making that logo for free!

Similar plugins:

❤️ Support

If you like the projects I do and they can help you in your life you can support my work with github sponsors. Every support motivates me to continue working on my open source projects.