Dot_Files/.config/nvim/lua/plugins/configs/galaxyline.lua
2022-05-11 04:10:22 -05:00

644 lines
17 KiB
Lua
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 },
},
})