/nvim-hardline

A simple Neovim statusline written in Lua

Primary LanguageLuaBSD 2-Clause "Simplified" LicenseBSD-2-Clause

nvim-hardline

A statusline / bufferline for Neovim written in Lua. It is inspired by vim-airline but aims to be as light and simple as possible.

Note: I won't add new features/parts/themes if I don't need them. Feel free to submit PRs or fork the plugin though.

screenshot

Installation

With packer.nvim:

use {'ojroques/nvim-hardline'}

With paq-nvim:

paq {'ojroques/nvim-hardline'}

Usage

In your init.lua:

require('hardline').setup {}

If you're using a .vimrc or init.vim:

lua require('hardline').setup {}

Configuration

You can pass options to the setup() function. Here are all available options with their default settings:

require('hardline').setup {
  bufferline = false,  -- enable bufferline
  bufferline_settings = {
    exclude_terminal = false,  -- don't show terminal buffers in bufferline
    show_index = false,        -- show buffer indexes (not the actual buffer numbers) in bufferline
  },
  theme = 'default',   -- change theme
  sections = {         -- define sections
    {class = 'mode', item = require('hardline.parts.mode').get_item},
    {class = 'high', item = require('hardline.parts.git').get_item, hide = 100},
    {class = 'med', item = require('hardline.parts.filename').get_item},
    '%<',
    {class = 'med', item = '%='},
    {class = 'low', item = require('hardline.parts.wordcount').get_item, hide = 100},
    {class = 'error', item = require('hardline.parts.lsp').get_error},
    {class = 'warning', item = require('hardline.parts.lsp').get_warning},
    {class = 'warning', item = require('hardline.parts.whitespace').get_item},
    {class = 'high', item = require('hardline.parts.filetype').get_item, hide = 60},
    {class = 'mode', item = require('hardline.parts.line').get_item},
  },
}

You can define your own sections using the sections list. Each element of that list is a table with the following attributes:

  • class: the section colorscheme. The following classes are currently available:
    • mode: change color based on the current mode.
    • low, med, high: colors for different levels of importance.
    • bufferline: colors for the bufferline.
    • error, warning: colors for the diagnostics of Neovim built-in LSP client.
  • item: the actual text being displayed. Must be a string or a function returning a string.
  • hide: threshold (in number of characters) below which the section will be hidden.

Available section parts

Part Description
cwd Current working directory
filename Filename and file status (readonly, modified, ...)
filetype Filetype
git Git hunks (requires vim-gitgutter / vim-signify / gitsigns.nvim) and Git branch (requires vim-fugitive / gina.vim / vim-branchname / gitsigns.nvim)
line Line and column positions
lsp Diagnostics from Neovim LSP client
mode Current mode
treesitter-context Current treesitter node (requires nvim-gps)
whitespace Trailing whitespaces, mixed indent and Git conflict markers warnings
wordcount Current word count (enabled only for some filetypes)

License

LICENSE