galaxyline is a light-weight and Super Fast statusline plugin. Galaxyline componentizes Vim's statusline by having a provider for each text area.
This means you can use the api provided by galaxyline to create the statusline that you want, easily.
Requires neovim 0.5.0+
- vim-plug
Plug 'glepnir/galaxyline.nvim' , {'branch': 'main'}
" If you want to display icons, then use one of these plugins:
Plug 'kyazdani42/nvim-web-devicons' " lua
Plug 'ryanoasis/vim-devicons' " vimscript
- packer.nvim
use {
'glepnir/galaxyline.nvim',
branch = 'main',
-- your statusline
config = function() require'my_statusline' end,
-- some optional icons
requires = {'kyazdani42/nvim-web-devicons', opt = true}
}
The type of all of these section variables:
-
require('galaxyline').short_line_list
some special filetypes that show a short statusline likeLuaTree defx coc-explorer vista
etc. -
require('galaxyline').section.left
the statusline left section. -
require('galaxyline').section.mid
the statusline mid section. -
require('galaxyline').section.right
the stautsline right section. -
require('galaxyline').section.short_line_left
the statusline left section when filetype is inshort_line_list
and for inactive window -
require('galaxyline').section.short_line_right
statusline right section when filetype is inshort_line_list
and for inactive window
Example of a FileSize component in the left section:
require('galaxyline').section.left[1]= {
FileSize = {
provider = 'FileSize',
condition = function()
if vim.fn.empty(vim.fn.expand('%:t')) ~= 1 then
return true
end
return false
end,
icon = ' ',
highlight = {colors.green,colors.purple},
separator = '',
separator_highlight = {colors.purple,colors.darkblue},
}
}
provider
can be a string, function or table. When it's a string, it will match
the default provider group. If it doesn't match an existing group you will get
an error. You can also use multiple default providers in provider
. If you are
using multiple then you must provide an array table for provider
.
-- source provider function
local diagnostic = require('galaxyline.provider_diagnostic')
local vcs = require('galaxyline.provider_vcs')
local fileinfo = require('galaxyline.provider_fileinfo')
local extension = require('galaxyline.provider_extensions')
local colors = require('galaxyline.colors')
local buffer = require('galaxyline.provider_buffer')
local whitespace = require('galaxyline.provider_whitespace')
local lspclient = require('galaxyline.provider_lsp')
-- provider
BufferIcon = buffer.get_buffer_type_icon,
BufferNumber = buffer.get_buffer_number,
FileTypeName = buffer.get_buffer_filetype,
-- Git Provider
GitBranch = vcs.get_git_branch,
DiffAdd = vcs.diff_add, -- support vim-gitgutter vim-signify gitsigns
DiffModified = vcs.diff_modified, -- support vim-gitgutter vim-signify gitsigns
DiffRemove = vcs.diff_remove, -- support vim-gitgutter vim-signify gitsigns
-- File Provider
LineColumn = fileinfo.line_column,
FileFormat = fileinfo.get_file_format,
FileEncode = fileinfo.get_file_encode,
FileSize = fileinfo.get_file_size,
FileIcon = fileinfo.get_file_icon,
FileName = fileinfo.get_current_file_name,
LinePercent = fileinfo.current_line_percent,
ScrollBar = extension.scrollbar_instance,
VistaPlugin = extension.vista_nearest,
-- Whitespace
Whitespace = whitespace.get_item,
-- Diagnostic Provider
DiagnosticError = diagnostic.get_diagnostic_error,
DiagnosticWarn = diagnostic.get_diagnostic_warn,
DiagnosticHint = diagnostic.get_diagnostic_hint,
DiagnosticInfo = diagnostic.get_diagnostic_info,
-- LSP
GetLspClient = lspclient.get_lsp_client,
-- public libs
require('galaxyline.provider_fileinfo').get_file_icon_color -- get file icon color
-- custom file icon with color
local my_icons = require('galaxyline.provider_fileinfo').define_file_icon() -- get file icon color
my_icons['your file type here'] = { color code, icon}
-- if your filetype does is not defined in neovim you can use file extensions
my_icons['your file ext in here'] = { color code, icon}
-- built-in condition
local condition = require('galaxyline.condition')
condition.buffer_not_empty -- if buffer not empty return true else false
condition.hide_in_width -- if winwidth(0)/ 2 > 40 true else false
-- find git root, you can use this to check if the project is a git workspace
condition.check_git_workspace()
-- built-in theme
local colors = require('galaxyline.theme').default
bg = '#202328',
fg = '#bbc2cf',
yellow = '#ECBE7B',
cyan = '#008080',
darkblue = '#081633',
green = '#98be65',
orange = '#FF8800',
violet = '#a9a1e1',
magenta = '#c678dd',
blue = '#51afef';
red = '#ec5f67';
You can also use the source of the provider function.
-
condition
is a function that must return a boolean. If it returns true then it will load the component. -
icon
is a string that will be added to the head of the provider result. It can also be a function that returns a string. -
highlight
is a string, function or table that can be used in two ways. The first is to pass three elements: the first element isfg
, the second isbg
, and the third isgui
. The second method is to pass a highlight group as a string (such asIncSearch
) that galaxyline will link to. -
separator
is a string, function or table. notice that table type only work in mid section, It is not just a separator. Any statusline item can be defined here, like%<
,%{}
,%n
, and so on. -
separator_highlight
same as highlight -
event
type is string. You configure a plugin's event that will reload the statusline.
- author: glepnir
- author: ChristianChiarulli
- author: BenoitPingris
- author: Th3Whit3Wolf
- author: voitd
You can find more custom galaxyline examples here
MIT