285 lines
6.9 KiB
Lua
285 lines
6.9 KiB
Lua
local gl = require('galaxyline')
|
||
local section = gl.section
|
||
local condition = require('galaxyline.condition')
|
||
|
||
-- TODO: move to util - credit to kraftwerk28/dotfiles
|
||
local function u(code)
|
||
if type(code) == 'string' then code = tonumber('0x' .. code) end
|
||
local c = string.char
|
||
if code <= 0x7f then return c(code) end
|
||
local t = {}
|
||
if code <= 0x07ff then
|
||
t[1] = c(bit.bor(0xc0, bit.rshift(code, 6)))
|
||
t[2] = c(bit.bor(0x80, bit.band(code, 0x3f)))
|
||
elseif code <= 0xffff then
|
||
t[1] = c(bit.bor(0xe0, bit.rshift(code, 12)))
|
||
t[2] = c(bit.bor(0x80, bit.band(bit.rshift(code, 6), 0x3f)))
|
||
t[3] = c(bit.bor(0x80, bit.band(code, 0x3f)))
|
||
else
|
||
t[1] = c(bit.bor(0xf0, bit.rshift(code, 18)))
|
||
t[2] = c(bit.bor(0x80, bit.band(bit.rshift(code, 12), 0x3f)))
|
||
t[3] = c(bit.bor(0x80, bit.band(bit.rshift(code, 6), 0x3f)))
|
||
t[4] = c(bit.bor(0x80, bit.band(code, 0x3f)))
|
||
end
|
||
return table.concat(t)
|
||
end
|
||
|
||
-- li - line icon
|
||
local li = {
|
||
-- block
|
||
b = '█',
|
||
-- bottom left
|
||
bl = u'e0b8', -- '',
|
||
-- bottom right
|
||
br = u'e0ba', -- '',
|
||
-- top left
|
||
tl = u'e0bc', -- '',
|
||
-- top right
|
||
tr = u'e0be' -- '',
|
||
}
|
||
|
||
-- taken from LunarVim
|
||
local colors = {
|
||
bg = '#292D38',
|
||
yellow = '#FFEB68',
|
||
dark_yellow = '#D7BA7D',
|
||
cyan = '#4EC9B0',
|
||
green = '#608B4E',
|
||
light_green = '#B5CEA8',
|
||
string_orange = '#CE9178',
|
||
orange = '#FF8800',
|
||
purple = '#C586C0',
|
||
magenta = '#D16D9E',
|
||
grey = '#858585',
|
||
blue = '#569CD6',
|
||
vivid_blue = '#4FC1FF',
|
||
light_blue = '#9CDCFE',
|
||
red = '#D16969',
|
||
error_red = '#F44747',
|
||
info_yellow = '#FFCC66',
|
||
white = '#FFFFFF'
|
||
}
|
||
|
||
-- list of windows for which short line will be used
|
||
-- short line is just a shorter status line. it's normally used in
|
||
-- places where it's not really needed/desired
|
||
gl.short_line_list = {'NvimTree', 'vista', 'dbui', 'packer'}
|
||
|
||
-- first section to the left will be a colored block shape that will
|
||
-- tell in which mode we're in
|
||
section.left[1] = {
|
||
ViMode = {
|
||
provider = function()
|
||
-- define color for each mode
|
||
local mode_color = {
|
||
n = colors.blue, -- normal
|
||
i = colors.grey, -- insert
|
||
v = colors.purple, -- visual
|
||
[''] = colors.purple, -- visual block
|
||
V = colors.purple, -- visual line
|
||
c = colors.dark_yellow, -- command
|
||
no = colors.blue, -- normal ??
|
||
s = colors.orange, -- select ??
|
||
S = colors.orange, -- select line ??
|
||
[''] = colors.orange, -- select block??
|
||
ic = colors.yellow,
|
||
R = colors.red, -- Replace
|
||
Rv = colors.red, -- replace visual?
|
||
cv = colors.blue, -- command ??
|
||
ce = colors.blue, -- command ??
|
||
r = colors.cyan, -- ??
|
||
rm = colors.cyan, -- ??
|
||
['r?'] = colors.cyan,
|
||
['!'] = colors.blue,
|
||
t = colors.blue
|
||
}
|
||
-- set color with nvim command
|
||
vim.api.nvim_command('hi GalaxyViMode guifg=' .. mode_color[vim.fn.mode()])
|
||
|
||
-- returns the text that will be displayed in this section
|
||
return li.b..li.tl..' '
|
||
end,
|
||
highlight = {colors.red, colors.bg}
|
||
}
|
||
}
|
||
|
||
-- git branch icon
|
||
section.left[2] = {
|
||
GitIcon = {
|
||
-- main text
|
||
provider = function()
|
||
return ' '
|
||
end,
|
||
-- enable only if vim is open in git workspace
|
||
condition = condition.check_git_workspace,
|
||
-- separator is the stuff after the main text
|
||
separator = ' ',
|
||
-- separator foreground & background color
|
||
separator_highlight = {'NONE', colors.bg},
|
||
-- main text foreground & background color
|
||
highlight = {colors.orange, colors.bg}
|
||
}
|
||
}
|
||
|
||
-- git branch name
|
||
section.left[3] = {
|
||
GitBranch = {
|
||
provider = 'GitBranch',
|
||
-- enable only if vim is open in git workspace
|
||
condition = condition.check_git_workspace,
|
||
separator = ' ',
|
||
separator_highlight = {'NONE', colors.bg},
|
||
highlight = {colors.grey, colors.bg}
|
||
}
|
||
}
|
||
|
||
-- git added files
|
||
section.left[4] = {
|
||
DiffAdd = {
|
||
provider = 'DiffAdd',
|
||
condition = condition.hide_in_width,
|
||
icon = ' ',
|
||
highlight = {colors.green, colors.bg}
|
||
}
|
||
}
|
||
|
||
-- git modified files
|
||
section.left[5] = {
|
||
DiffModified = {
|
||
provider = 'DiffModified',
|
||
condition = condition.hide_in_width,
|
||
icon = ' 柳',
|
||
highlight = {colors.blue, colors.bg}
|
||
}
|
||
}
|
||
|
||
-- git removed files
|
||
section.left[6] = {
|
||
DiffRemove = {
|
||
provider = 'DiffRemove',
|
||
condition = condition.hide_in_width,
|
||
icon = ' ',
|
||
highlight = {colors.red, colors.bg}
|
||
}
|
||
}
|
||
|
||
-- diagnostics
|
||
section.right[1] = {
|
||
DiagnosticError = {
|
||
provider = 'DiagnosticError',
|
||
icon = ' ',
|
||
highlight = {colors.error_red, colors.bg}
|
||
}
|
||
}
|
||
section.right[2] = {
|
||
DiagnosticWarn = {
|
||
provider = 'DiagnosticWarn',
|
||
icon = ' ',
|
||
highlight = {colors.orange, colors.bg}
|
||
}
|
||
}
|
||
section.right[3] = {
|
||
DiagnosticHint = {
|
||
provider = 'DiagnosticHint',
|
||
icon = ' ',
|
||
highlight = {colors.vivid_blue, colors.bg}
|
||
}
|
||
}
|
||
section.right[4] = {
|
||
DiagnosticInfo = {
|
||
provider = 'DiagnosticInfo',
|
||
icon = ' ',
|
||
highlight = {
|
||
colors.info_yellow,
|
||
colors.bg
|
||
}
|
||
}
|
||
}
|
||
|
||
-- cosmetics
|
||
section.right[5] = {
|
||
Space2 = {
|
||
provider = function()
|
||
return li.br..li.b
|
||
end,
|
||
separator = ' ',
|
||
separator_highlight = {'NONE', colors.bg},
|
||
highlight = {colors.white, colors.bg}
|
||
}
|
||
}
|
||
|
||
-- lsp info
|
||
section.right[7] = {
|
||
ShowLspClient = {
|
||
provider = 'GetLspClient',
|
||
condition = function()
|
||
local tbl = {['dashboard'] = true, [' '] = true}
|
||
if tbl[vim.bo.filetype] then return false end
|
||
return true
|
||
end,
|
||
separator = ' ',
|
||
separator_highlight = {colors.grey, colors.white},
|
||
icon = ' ',
|
||
highlight = {colors.grey, colors.white}
|
||
}
|
||
}
|
||
|
||
-- file type
|
||
section.right[8] = {
|
||
BufferType = {
|
||
provider = 'FileTypeName',
|
||
separator = li.b..li.tl..' ',
|
||
separator_highlight = {colors.white, colors.bg},
|
||
highlight = {colors.grey, colors.bg}
|
||
}
|
||
}
|
||
section.right[9] = {
|
||
FileEncode = {
|
||
provider = 'FileEncode',
|
||
condition = condition.hide_in_width,
|
||
separator = ' ',
|
||
separator_highlight = {'NONE', colors.bg},
|
||
highlight = {colors.grey, colors.bg}
|
||
}
|
||
}
|
||
-- cosmetics: right dash
|
||
section.right[10] = {
|
||
LastDash = {
|
||
provider = function()
|
||
return li.tr..li.b
|
||
end,
|
||
separator = ' ',
|
||
separator_highlight = {'NONE', colors.bg},
|
||
highlight = {colors.white, colors.bg}
|
||
}
|
||
}
|
||
|
||
-- short line settings
|
||
section.short_line_left[1] = {
|
||
BufferType = {
|
||
provider = 'FileTypeName',
|
||
separator = ' ',
|
||
separator_highlight = {'NONE', colors.bg},
|
||
highlight = {colors.grey, colors.bg}
|
||
}
|
||
}
|
||
section.short_line_left[2] = {
|
||
SFileName = {
|
||
provider = 'SFileName',
|
||
condition = condition.buffer_not_empty,
|
||
highlight = {
|
||
colors.grey,
|
||
colors.bg
|
||
}
|
||
}
|
||
}
|
||
section.short_line_right[1] = {
|
||
BufferIcon = {
|
||
provider = 'BufferIcon',
|
||
highlight = {
|
||
colors.grey,
|
||
colors.bg
|
||
}
|
||
}
|
||
}
|