staline.nvim icon indicating copy to clipboard operation
staline.nvim copied to clipboard

A modern lightweight statusline and bufferline plugin for neovim in lua.

staline.nvim

TLDR;
staline(statusline): A simple statusline for neovim written in lua.
stabline(s-tabline): A simple bufferline for neovim written in lua. (sry didnt get a better name.)

Requirements

  • Requires neovim version >= 0.7
  • vim.opt.laststatus=2 in your init.lua for statusline. (or 3 for global line)
  • vim.opt.showtabline=2 in your init.lua for bufferline.
  • vim.opt.termguicolors must be set.

Installation

  • Vim-plug:
    Plug 'tamton-aquib/staline.nvim'
    
  • Packer
    use 'tamton-aquib/staline.nvim'
    

NOTE: Doing this will install both staline and stabline.
But separate setup() is required for each to load up.

Statusline

Screenshots

normal insert command visual

Configuration

require('staline').setup()
Click to see default configuration
require('staline').setup {
    defaults = {
        expand_null_ls = false,  -- This expands out all the null-ls sources to be shown
        left_separator  = "",
        right_separator = "",
        full_path       = false,
        line_column     = "[%l/%L] :%c 並%p%% ", -- `:h stl` to see all flags.

        fg              = "#000000",  -- Foreground text color.
        bg              = "none",     -- Default background is transparent.
        inactive_color  = "#303030",
        inactive_bgcolor = "none",
        true_colors     = false,      -- true lsp colors.
        font_active     = "none",     -- "bold", "italic", "bold,italic", etc

        mod_symbol      = "  ",
        lsp_client_symbol = " ",
        branch_symbol   = " ",
        cool_symbol     = " ",       -- Change this to override default OS icon.
        null_ls_symbol = "",          -- A symbol to indicate that a source is coming from null-ls
    },
    mode_colors = {
        n = "#2bbb4f",
        i = "#986fec",
        c = "#e27d60",
        v = "#4799eb",   -- etc..
    },
    mode_icons = {
        n = " ",
        i = " ",
        c = " ",
        v = " ",   -- etc..
    },
    sections = {
        left = { '- ', '-mode', 'left_sep_double', ' ', 'branch' },
        mid  = { 'file_name' },
        right = { 'cool_symbol','right_sep_double', '-line_column' },
    },
    special_table = {
        NvimTree = { 'NvimTree', ' ' },
        packer = { 'Packer',' ' },        -- etc
    },
    lsp_symbols = {
        Error=" ",
        Info=" ",
        Warn=" ",
        Hint="",
    },
}

To know more about colors and highlights, check highlights wiki

Sections:

section use
mode shows the mode
branch shows git branch
file_name shows filename
file_size shows file size
cool_symbol an icon according to the OS type (cutomizable)
lsp lsp diagnostics (number of errors, warnings, etc)
lsp_name lsp client name
line_column shows line, column, percentage, etc
left_sep single left separator
right_sep single right separator
left_sep_double Double left separator with a shade of gray
right_sep_double Double right separator with a shade of gray
cwd Current working directory

A section (left, right or mid) can take:

  • Already defnined section or a simple string:
    • "branch"
    • "a simple string"
  • An array of { highlight, string }
    • { "DiagnosticsError", "danger_icon" }
    • { "CustomHighlight", "simple_string" }
  • A function for dynamic content
    unction()
       return "computed_dynamic_string"
    nd
    

lsp, lsp_name, file_size sections are not included in the default settings.

Showcase

  • Evil Line: evil_line

  • Pebble Line: pebble_line

  • Simple Line: simple_line

Check out wiki to see some premade configs and tips.

Bufferline

Screenshots

bar mode slant mode arrow mode bubble mode

  • Configuration
    equire('stabline').setup()
    
  • The Default configuration looks something like:
    equire('stabline').setup {
    style       = "bar", -- others: arrow, slant, bubble
    stab_left   = "┃",
    stab_right  = " ",
    
    -- fg          = Default is fg of "Normal".
    -- bg          = Default is bg of "Normal".
    inactive_bg = "#1e2127",
    inactive_fg = "#aaaaaa",
    -- stab_bg     = Default is darker version of bg.,
    
    font_active = "bold",
    exclude_fts = { 'NvimTree', 'dashboard', 'lir' },
    stab_start  = "",   -- The starting of stabline
    stab_end    = "",
    
    
My personal config as of editing this file:

my stabline config

require('stabline').setup {
	style = "slant",
	bg = "#986fec",
	fg = "black",
	stab_right = "",
}

Features

  • Lightweight and Fast. staline+stabline took < 1ms. (packers profiling)
  • Unicode current mode info. Needs a Nerd Font to be installed.
  • Has few builtin sections to chose from.
  • Uses nvim-web-devicons if installed, else uses a default table.

Cons

  • No mouse functions for stabline.
  • No ordering or sorting functions for stabline.
  • No lsp info in stabline.
  • No git related info on staline except branch name.

Inspirations:

TODO

  • [x] ~User configuration options. Needs more work.~
  • [x] ~Git info. Only branch info for now, (or ever)~
  • [x] ~Adding "opt-in" bufferline function.~
  • [x] ~Add config options for bufferline.~
  • [x] ~lsp client name in staline.~
  • [ ] buf numbers in stabline.
  • [ ] transparency problem when changed to 0.7 api.