Skip to main content

Dashboard, UI & Notifications

All UI elements in LazyVim are controlled entirely via keyboard. This page covers every UI component and how to use them without touching the mouse.

Dashboard

The dashboard appears when you open Neovim with no file. It provides quick access to common actions:

┌──────────────────────────────────────┐
│ │
│ ██╗ █████╗ ... │
│ ██║ ██╔══██╗ ... │
│ ... LazyVim logo ... │
│ │
│  f Find File │
│  n New File │
│  g Find Text │
│  r Recent Files │
│  c Config │
│  s Restore Session │
│  x Lazy Extras │
│ 󰒲 l Lazy │
│  q Quit │
│ │
└──────────────────────────────────────┘

Dashboard Keys (Keyboard)

KeyAction
fFind files (Telescope/Snacks picker)
nNew file
gFind text (grep)
rRecent files
cOpen config (~/.config/nvim)
sRestore last session
xOpen LazyExtras browser
lOpen Lazy plugin manager
qQuit Neovim

Customize the Dashboard

lua/plugins/dashboard.lua
return {
"snacks.nvim",
opts = {
dashboard = {
preset = {
-- Custom header ASCII art
header = [[
╔══════════════════════════════╗
║ MY NEOVIM CONFIG ║
╚══════════════════════════════╝
]],
-- Custom key entries
keys = {
{ icon = " ", key = "f", desc = "Find File", action = ":lua Snacks.dashboard.pick('files')" },
{ icon = " ", key = "n", desc = "New File", action = ":ene | startinsert" },
{ icon = " ", key = "g", desc = "Find Text", action = ":lua Snacks.dashboard.pick('live_grep')" },
{ icon = " ", key = "r", desc = "Recent Files", action = ":lua Snacks.dashboard.pick('oldfiles')" },
{ icon = " ", key = "c", desc = "Config", action = ":lua Snacks.dashboard.pick('files', {cwd = vim.fn.stdpath('config')})" },
{ icon = " ", key = "s", desc = "Restore Session", section = "session" },
{ icon = " ", key = "x", desc = "Lazy Extras", action = ":LazyExtras" },
{ icon = "󰒲 ", key = "l", desc = "Lazy", action = ":Lazy" },
{ icon = " ", key = "q", desc = "Quit", action = ":qa" },
},
},
},
},
}

Alternative Dashboards

Enable via extras:

{ import = "lazyvim.plugins.extras.ui.alpha" } -- Alpha dashboard
{ import = "lazyvim.plugins.extras.ui.mini-starter" } -- Mini starter

Bufferline (Tab Bar)

Bufferline shows open buffers as tabs at the top. It shows filetype icons, diagnostics, and modified indicators.

Keyboard Buffer Management

KeyAction
<S-h>Previous buffer
<S-l>Next buffer
[bPrevious buffer
]bNext buffer
<leader>bbSwitch to last buffer
<leader>bdDelete current buffer
<leader>boDelete other buffers
<leader>biDelete invisible buffers
<leader>bDDelete buffer and close window
<leader>bpPin buffer
<leader>bPDelete all non-pinned buffers
<leader>blDelete buffers to the left
<leader>brDelete buffers to the right
<leader>bjPick buffer (fuzzy)

Pin Buffers

Pinning protects buffers from bulk delete.

  1. Open the buffer you want to keep
  2. <leader>bp to pin it (appears with a pin icon)
  3. <leader>bP deletes all unpinned buffers at once

Buffer Navigation Workflow

With many files open:

<S-l> ← Move forward one buffer
<S-h> ← Move backward
<leader>bj ← Type buffer name to jump directly
<leader>bb ← Toggle between two files
<leader>bd ← Close current buffer when done

Lualine (Statusline)

Lualine displays information at the bottom of the screen in three areas: left, center (global), right.

Statusline Sections

[NORMAL] [main] [~/project/src/app.py] [✕ 3 ⚠ 2] [git:main] [+1 ~0 -0] [14:25] [ 14:30]
↑mode ↑branch ↑file path ↑diagnostics ↑git ↑diff ↑line:col ↑clock
SectionShowsPurpose
lualine_aModeNORMAL, INSERT, VISUAL, etc.
lualine_bGit branchCurrent branch name
lualine_cRoot dir, diagnostics, file icon, file path, Trouble symbolsBuffer context
lualine_xProfiler, Noice command/mode, DAP status, updates, git diffStatus indicators
lualine_yProgress, line:columnCursor location
lualine_zCurrent timeClock

Statusline Is Keyboard-Readable

  • Mode: Tells you what mode you are in without looking at the cursor
  • Diagnostics: See ✕ 3 ⚠ 2 means 3 errors, 2 warnings
  • Git branch: Shows main, feature/xyz, etc.
  • Diff: +1 ~0 -0 = 1 added, 0 modified, 0 removed lines
  • Plugin updates: Shows when updates are available

Customize the Statusline

lua/plugins/statusline.lua
return {
"nvim-lualine/lualine.nvim",
opts = function(_, opts)
-- Add a custom section
table.insert(opts.sections.lualine_x, {
function() return "📦" end,
})
end,
}

Noice (Notifications & Messages)

Noice replaces the default command-line and message UI with a modern overlay.

Keyboard Notification Controls

KeyAction
<leader>nShow notification history
<leader>unDismiss all visible notifications
<leader>snlShow last notification
<leader>snhShow full notification history
<leader>snaShow all (history + current)
<leader>sndDismiss all
<leader>sntOpen notification picker (Telescope/Snacks)

Command-Line Mode

Noice enhances the command line (: mode):

KeyAction
:Opens enhanced command line (inline, not at bottom)
<S-Enter>Redirect cmdline output to a split
<c-f> / <c-b>Scroll forward/backward in Noice windows

Noice Presets

Noice uses presets to control behavior:

  • bottom_search: Search results (/ ?) appear at bottom instead of inline
  • command_palette: Command history appears as a floating palette
  • long_message_to_split: Long messages open in a split instead of blocking

Daily Workflow

1. Type :command ← Noice shows it inline near cursor
2. Press Enter ← Command runs
3. See result as notification
4. <leader>n ← Check notification history if needed
5. <leader>snl ← See the last message again
6. <leader>snd ← Dismiss all when clutter builds up

UI Toggles (Keyboard)

These toggle various UI elements. All start with <leader>u:

Visibility Toggles

KeyToggleWhat It Does
<leader>ulLine NumbersShow/hide absolute line numbers
<leader>uLRelative NumbersShow/hide relative line numbers
<leader>usSpellingHighlight misspelled words
<leader>uwLine WrapSoft-wrap long lines
<leader>ucConceal LevelHide/show markup characters
<leader>uATablineShow/hide the bufferline tab bar
<leader>ugIndent GuidesShow/hide vertical indent lines
<leader>uGGit SignsShow/hide git change indicators
<leader>uSSmooth ScrollEnable/disable animated scrolling

Diagnostics Toggles

KeyToggleWhat It Does
<leader>udDiagnosticsShow/hide all diagnostic signs
<leader>uhInlay HintsShow/hide LSP inline type hints

Visual Toggles

KeyToggleWhat It Does
<leader>ubDark BackgroundSwitch between light/dark theme variant
<leader>uDDimmingDim inactive windows/buffers
<leader>uaAnimationsEnable/disable snacks animations
<leader>uTTreesitterEnable/disable Treesitter highlighting
<leader>uCColorschemesOpen colorscheme picker
<leader>uzZen ModeFull-screen focus mode (no tabs/status)
<leader>uZ / <leader>wmZoom ModeMaximize current window

Info Toggles

KeyAction
<leader>uiInspect highlight group under cursor
<leader>uIInspect Treesitter node under cursor

Toggle Workflow

1. Open a file
2. <leader>uw ← Toggle wrap for long lines
3. <leader>ug ← Toggle indent guides for alignment
4. <leader>us ← Toggle spell check for editing prose
5. <leader>uL ← Toggle relative numbers for editing
6. <leader>uz ← Zen mode — no distractions
7. <leader>uz again ← Exit zen mode
8. <leader>uc ← Cycle colorschemes to try different themes

Zoom vs Zen Mode

ModeKeyWhat It Does
Zoom<leader>wm or <leader>uZMaximize current window (hides other splits temporarily)
Zen<leader>uzFull-screen, no tabs/statusline, centered content

Both are toggles — press the same key again to restore.

UI Component Summary

ComponentPurposeToggle/Open
DashboardStartup screenAuto on nvim with no file
BufferlineTab bar for buffers<leader>uA to toggle
LualineStatusline at bottomAlways visible
NoiceNotifications & command UI<leader>n for history
ExplorerFile tree sidebar<leader>e
PickerFuzzy finder overlay<leader>ff etc.