Dot_Files/.config/nvim/lua/plugins/configs/galaxyline.lua

644 lines
17 KiB
Lua
Raw Normal View History

2022-05-11 04:10:22 -05:00
local gl = require('galaxyline')
local condition = require('galaxyline.condition')
local gps = require('nvim-gps')
local get_relative_gitpath = function()
local fpath = vim.fn.expand('%:h')
local fname = vim.fn.expand('%:t')
local gitpath = vim.fn.systemlist('git rev-parse --show-toplevel')[1]
local ellipsis = '...'
local relative_gitpath = fpath:gsub(gitpath, '') .. '/' .. fname
if vim.fn.winwidth(0) < 200 and #relative_gitpath > 30 then
return ellipsis .. relative_gitpath:sub(25, #relative_gitpath)
end
return relative_gitpath
end
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
local function highlight(group, fg, bg, gui)
local cmd = string.format('highlight %s guifg=%s guibg=%s', group, fg, bg)
if gui ~= nil then
cmd = cmd .. ' gui=' .. gui
end
vim.cmd(cmd)
end
local lineLengthWarning = 80
local lineLengthError = 120
local leftbracket = '' -- Curve.
local rightbracket = '' -- Curve.
gl.short_line_list = { 'NvimTree', 'vista', 'dbui', 'packer', 'tagbar' }
local gls = gl.section
local colors = {
bg = nil,
modetext = '#000000',
giticon = '#FF8800',
gitbg = '#5C2C2E',
gittext = '#C5C5C5',
diagerror = '#F44747',
diagwarn = '#FF8800',
diaghint = '#4FC1FF',
diaginfo = '#FFCC66',
lspicon = '#68AF00',
lspbg = '#304B2E',
lsptext = '#C5C5C5',
typeicon = '#FF8800',
typebg = '#5C2C2E',
typetext = '#C5C5C5',
statsicon = '#9CDCFE',
statsbg = '#5080A0',
statstext = '#000000',
lineokfg = '#000000',
lineokbg = '#5080A0',
linelongerrorfg = '#FF0000',
linelongwarnfg = '#FFFF00',
linelongbg = '#5080A0',
shortbg = '#DCDCAA',
shorttext = '#000000',
shortrightbg = '#3F3F3F',
shortrighttext = '#7C4C4E',
gpsbg = '#5C00A3',
gpstext = '#C5C5C5',
red = '#D16969',
yellow = '#DCDCAA',
magenta = '#D16D9E',
green = '#608B4E',
orange = '#FF8800',
purple = '#C586C0',
blue = '#569CD6',
cyan = '#4EC9B0',
}
local mode_map = {
['n'] = { '#569CD6', 'NORMAL' },
['i'] = { '#D16969', 'INSERT' },
['R'] = { '#D16969', 'REPLACE' },
['c'] = { '#608B4E', 'COMMAND' },
['v'] = { '#C586C0', 'VISUAL' },
['V'] = { '#C586C0', 'VIS-LN' },
[''] = { '#C586C0', 'VIS-BLK' },
['s'] = { '#FF8800', 'SELECT' },
['S'] = { '#FF8800', 'SEL-LN' },
[''] = { '#DCDCAA', 'SEL-BLK' },
['t'] = { '#569CD6', 'TERMINAL' },
['Rv'] = { '#D16D69', 'VIR-REP' },
['rm'] = { '#FF0000', '- More -' },
['r'] = { '#FF0000', '- Hit-Enter -' },
['r?'] = { '#FF0000', '- Confirm -' },
['cv'] = { '#569CD6', 'Vim Ex Mode' },
['ce'] = { '#569CD6', 'Normal Ex Mode' },
['!'] = { '#569CD6', 'Shell Running' },
['ic'] = { '#DCDCAA', 'Insert mode completion |compl-generic|' },
['no'] = { '#DCDCAA', 'Operator-pending' },
['nov'] = { '#DCDCAA', 'Operator-pending (forced charwise |o_v|)' },
['noV'] = { '#DCDCAA', 'Operator-pending (forced linewise |o_V|)' },
['noCTRL-V'] = { '#DCDCAA', 'Operator-pending (forced blockwise |o_CTRL-V|) CTRL-V is one character' },
['niI'] = { '#DCDCAA', 'Normal using |i_CTRL-O| in |Insert-mode|' },
['niR'] = { '#DCDCAA', 'Normal using |i_CTRL-O| in |Replace-mode|' },
['niV'] = { '#DCDCAA', 'Normal using |i_CTRL-O| in |Virtual-Replace-mode|' },
['ix'] = { '#DCDCAA', 'Insert mode |i_CTRL-X| completion' },
['Rc'] = { '#DCDCAA', 'Replace mode completion |compl-generic|' },
['Rx'] = { '#DCDCAA', 'Replace mode |i_CTRL-X| completion' },
}
local icons = {
vim = u('e62b'),
dos = u('e70f'),
unix = u('f17c'),
mac = u('f179'),
}
local function setLineWidthColours()
local colbg = colors.statsbg
local linebg = colors.statsbg
if vim.fn.col('.') > lineLengthError then
colbg = colors.linelongerrorfg
elseif vim.fn.col('.') > lineLengthWarning then
colbg = colors.linelongwarnfg
end
if vim.fn.strwidth(vim.fn.getline('.')) > lineLengthError then
linebg = colors.linelongerrorfg
elseif vim.fn.strwidth(vim.fn.getline('.')) > lineLengthWarning then
linebg = colors.linelongwarnfg
end
highlight('LinePosHighlightStart', colbg, colors.statsbg)
highlight('LinePosHighlightColNum', colors.statstext, colbg)
highlight('LinePosHighlightMid', linebg, colbg)
highlight('LineLenHighlightLenNum', colors.statstext, linebg)
highlight('LinePosHighlightEnd', linebg, colors.statsbg)
end
gls.left = {}
table.insert(gls.left, {
ViModeSpaceOnFarLeft = {
provider = function()
return ' '
end,
highlight = { colors.giticon, colors.bg },
},
})
table.insert(gls.left, {
ViModeLeft = {
provider = function()
highlight('ViModeHighlight', mode_map[vim.fn.mode()][1], colors.bg)
return leftbracket
end,
highlight = 'ViModeHighlight',
},
})
table.insert(gls.left, {
ViModeIconAndText = {
provider = function()
highlight('GalaxyViMode', colors.modetext, mode_map[vim.fn.mode()][1])
return icons['vim'] .. ' ' .. mode_map[vim.fn.mode()][2]
end,
highlight = 'GalaxyViMode',
},
})
table.insert(gls.left, {
ViModeRight = {
provider = function()
return rightbracket
end,
separator = ' ',
separator_highlight = 'ViModeHighlight',
highlight = 'ViModeHighlight',
},
})
table.insert(gls.left, {
GitStart = {
provider = function()
return leftbracket
end,
condition = condition.check_git_workspace,
highlight = { colors.giticon, colors.bg },
},
})
table.insert(gls.left, {
GitIcon = {
provider = function()
return ''
end,
condition = condition.check_git_workspace,
separator = '',
separator_highlight = { 'NONE', colors.giticon },
highlight = { colors.gitbg, colors.giticon },
},
})
table.insert(gls.left, {
GitMid = {
provider = function()
return rightbracket .. ' '
end,
condition = condition.check_git_workspace,
highlight = { colors.giticon, colors.gitbg },
},
})
table.insert(gls.left, {
GitBranch = {
provider = 'GitBranch',
condition = condition.check_git_workspace,
separator = ' ',
separator_highlight = { 'NONE', colors.gitbg },
highlight = { colors.gittext, colors.gitbg },
},
})
table.insert(gls.left, {
DiffAdd = {
provider = 'DiffAdd',
condition = condition.check_git_workspace,
icon = '',
highlight = { colors.green, colors.gitbg },
},
})
table.insert(gls.left, {
DiffModified = {
provider = 'DiffModified',
condition = condition.check_git_workspace,
icon = '',
highlight = { colors.blue, colors.gitbg },
},
})
table.insert(gls.left, {
DiffRemove = {
provider = 'DiffRemove',
condition = condition.check_git_workspace,
icon = '',
highlight = { colors.red, colors.gitbg },
},
})
table.insert(gls.left, {
EndGit = {
provider = function()
return rightbracket
end,
condition = condition.check_git_workspace,
separator = ' ',
separator_highlight = { colors.gitbg, colors.bg },
highlight = { colors.gitbg, colors.bg },
},
})
table.insert(gls.left, {
LspStart = {
provider = function()
return leftbracket
end,
highlight = { colors.lspicon, colors.bg },
},
})
table.insert(gls.left, {
LspIcon = {
provider = function()
local name = ''
if gl.lspclient ~= nil then
name = gl.lspclient()
end
return '' .. name
end,
highlight = { colors.lspbg, colors.lspicon },
},
})
table.insert(gls.left, {
LspMid = {
provider = function()
return rightbracket .. ' '
end,
highlight = { colors.lspicon, colors.lspbg },
},
})
table.insert(gls.left, {
ShowLspClient = {
provider = 'GetLspClient',
highlight = { colors.textbg, colors.lspbg },
},
})
table.insert(gls.left, {
LspSpace = {
provider = function()
return ' '
end,
highlight = { colors.lspicon, colors.lspbg },
},
})
table.insert(gls.left, {
DiagnosticError = {
provider = 'DiagnosticError',
icon = '',
separator_highlight = { colors.gitbg, colors.bg },
highlight = { colors.diagerror, colors.lspbg },
},
})
table.insert(gls.left, {
DiagnosticWarn = {
provider = 'DiagnosticWarn',
icon = '',
highlight = { colors.diagwarn, colors.lspbg },
},
})
table.insert(gls.left, {
DiagnosticHint = {
provider = 'DiagnosticHint',
icon = '',
highlight = { colors.diaghint, colors.lspbg },
},
})
table.insert(gls.left, {
DiagnosticInfo = {
provider = 'DiagnosticInfo',
icon = '',
highlight = { colors.diaginfo, colors.lspbg },
},
})
table.insert(gls.left, {
LspSectionEnd = {
provider = function()
return rightbracket .. ' '
end,
highlight = { colors.lspbg, colors.bg },
},
})
table.insert(gls.left, {
nvimGPS = {
provider = function()
return gps.get_location()
end,
condition = function()
return gps.is_available() and #gps.get_location() > 0
end,
highlight = { colors.gpstext, colors.bg },
},
})
gls.right = {}
table.insert(gls.right, {
TypeStart = {
provider = function()
return leftbracket
end,
highlight = { colors.typeicon, colors.bg },
},
})
table.insert(gls.right, {
TypeFileFormatIcon = {
provider = function()
local icon = icons[vim.bo.fileformat] or ''
return string.format(' %s', icon)
end,
highlight = { colors.typebg, colors.typeicon },
},
})
table.insert(gls.right, {
TypeMid = {
provider = function()
return rightbracket .. ' '
end,
highlight = { colors.typeicon, colors.typebg },
},
})
table.insert(gls.right, {
FileName = {
provider = function()
if #vim.fn.expand('%:p') == 0 then
return ''
end
return get_relative_gitpath() .. ' '
end,
separator_highlight = { 'NONE', colors.typebg },
highlight = { colors.typetext, colors.typebg },
},
})
table.insert(gls.right, {
FileIcon = {
provider = 'FileIcon',
highlight = { colors.typeicon, colors.typebg },
},
})
table.insert(gls.right, {
BufferType = {
provider = 'FileTypeName',
highlight = { colors.typetext, colors.typebg },
},
})
table.insert(gls.right, {
FileSize = {
provider = 'FileSize',
separator = '',
separator_highlight = { colors.typeicon, colors.typebg },
highlight = { colors.typetext, colors.typebg },
},
})
table.insert(gls.right, {
FileEncode = {
provider = 'FileEncode',
separator = '',
separator_highlight = { colors.typeicon, colors.typebg },
highlight = { colors.typetext, colors.typebg },
},
})
table.insert(gls.right, {
TypeSectionEnd = {
provider = function()
return rightbracket
end,
highlight = { colors.typebg, colors.bg },
},
})
table.insert(gls.right, {
Space = {
provider = function()
return ' '
end,
highlight = { colors.typebg, colors.bg },
},
})
table.insert(gls.right, {
StatsSectionStart = {
provider = function()
return leftbracket
end,
highlight = { colors.statsicon, colors.bg },
},
})
table.insert(gls.right, {
StatsIcon = {
provider = function()
return ''
end,
highlight = { colors.statsbg, colors.statsicon },
},
})
table.insert(gls.right, {
StatsMid = {
provider = function()
return rightbracket .. ' '
end,
highlight = { colors.statsicon, colors.statsbg },
},
})
table.insert(gls.right, {
PerCent = {
provider = 'LinePercent',
highlight = { colors.statstext, colors.statsbg },
},
})
table.insert(gls.right, {
VerticalPosAndSize = {
provider = function()
return string.format('%4i /%4i ', vim.fn.line('.'), vim.fn.line('$'))
end,
separator = '',
separator_highlight = { colors.statsicon, colors.statsbg },
highlight = { colors.statstext, colors.statsbg },
},
})
table.insert(gls.right, {
CursorColumnStart = {
provider = function()
return leftbracket
end,
separator = '',
separator_highlight = { colors.statsicon, colors.statsbg },
highlight = 'LinePosHighlightStart',
},
})
table.insert(gls.right, {
CursorColumn = {
provider = function()
setLineWidthColours()
return '' .. string.format('%3i', vim.fn.col('.')) .. ' /'
end,
highlight = 'LinePosHighlightColNum',
},
})
table.insert(gls.right, {
LineLengthStart = {
provider = function()
return ' ' .. leftbracket
end,
highlight = 'LinePosHighlightMid',
},
})
table.insert(gls.right, {
LineLength = {
provider = function()
return ' ' .. string.format('%3i', string.len(vim.fn.getline('.')))
end,
highlight = 'LineLenHighlightLenNum',
},
})
table.insert(gls.right, {
LineLengthEnd = {
provider = function()
return ' ' .. rightbracket .. ' '
end,
highlight = 'LinePosHighlightEnd',
},
})
table.insert(gls.right, {
TabOrSpace = {
provider = function()
if vim.bo.expandtab then
return ''
else
return ''
end
end,
condition = condition.hide_in_width,
highlight = { colors.statsicon, colors.statsbg },
},
})
table.insert(gls.right, {
Tabstop = {
provider = function()
if vim.bo.expandtab then
return vim.bo.shiftwidth
else
return vim.bo.shiftwidth
end
end,
condition = condition.hide_in_width,
highlight = { colors.statstext, colors.statsbg },
},
})
table.insert(gls.right, {
StatsSpcSectionEnd = {
provider = function()
return rightbracket .. ' '
end,
highlight = { colors.statsbg, colors.bg },
},
})
gls.short_line_left = {}
table.insert(gls.short_line_left, {
ShortSectionStart = {
provider = function()
return leftbracket
end,
highlight = { colors.shortbg, colors.bg },
},
})
table.insert(gls.short_line_left, {
ShortSectionSpace = {
provider = function()
return ' '
end,
highlight = { colors.shorttext, colors.shortbg },
},
})
table.insert(gls.short_line_left, {
LeftShortName = {
provider = 'FileTypeName',
highlight = { colors.shorttext, colors.shortbg },
},
})
table.insert(gls.short_line_left, {
ShortSectionMid = {
provider = function()
return ' '
end,
highlight = { colors.shortbg, colors.shortbg },
},
})
table.insert(gls.short_line_left, {
LeftShortFileName = {
provider = 'SFileName',
condition = condition.buffer_not_empty,
separator_highlight = { colors.shorttext, colors.shortbg },
highlight = { colors.shorttext, colors.shortbg },
},
})
table.insert(gls.short_line_left, {
ShortSectionEnd = {
provider = function()
return rightbracket
end,
highlight = { colors.shortbg, colors.bg },
},
})
gls.short_line_right = {}
table.insert(gls.short_line_right, {
BufferIcon = {
provider = 'BufferIcon',
separator_highlight = { colors.shorttext, colors.bg },
highlight = { colors.shortrighttext, colors.bg },
},
})