nvim-hardline

July 18, 2023 ยท View on GitHub

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'}

With lazy.nvim:

-- init.lua:
{'ojroques/nvim-hardline'},

-- plugins/hardline.lua:
return {
'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,  -- disable 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

PartDescription
cwdCurrent working directory
filenameFilename and file status (readonly, modified, ...)
filetypeFiletype
gitGit hunks (requires vim-gitgutter / vim-signify / gitsigns.nvim) and Git branch (requires vim-fugitive / gina.vim / vim-branchname / gitsigns.nvim)
lineLine and column positions
lspDiagnostics from Neovim LSP client
modeCurrent mode
treesitter-contextCurrent treesitter node (requires nvim-gps)
whitespaceTrailing whitespaces, mixed indent and Git conflict markers warnings
wordcountCurrent word count (enabled only for some filetypes)

License

LICENSE