neovim-confs/lua/plex/plugins/lualine.lua

286 lines
7.2 KiB
Lua
Raw Permalink Normal View History

2023-09-06 00:26:45 +02:00
-- Plugin: Lualine
2023-09-06 01:26:46 +02:00
-- https://github.com/rafi/vim-config
2023-09-06 00:26:45 +02:00
return {
-----------------------------------------------------------------------------
{
'nvim-lualine/lualine.nvim',
dependencies = {
'nvim-lua/plenary.nvim',
'nvim-tree/nvim-web-devicons',
},
event = 'VeryLazy',
init = function()
vim.g.qf_disable_statusline = true
end,
opts = function()
2023-09-06 10:19:56 +02:00
local icons = require('plex.config').icons
local get_color = require('plex.lib.color').get_color
2023-09-06 00:26:45 +02:00
local fg = function(...) return { fg = get_color('fg', ...) } end
local function filepath()
2023-09-06 10:19:56 +02:00
local fpath = require('plex.lib.badge').filepath(0, 3, 5)
2023-09-06 00:26:45 +02:00
-- % char must be escaped in statusline.
return fpath:gsub('%%', '%%%%')
end
local function is_file_window()
return vim.bo.buftype == ''
end
local function is_min_width(min)
if vim.o.laststatus > 2 then
return vim.o.columns > min
end
return vim.fn.winwidth(0) > min
end
local active = {
fg = get_color('fg', { 'StatusLine' }, '#000000'),
bg = get_color('bg', { 'StatusLine' }, '#000000'),
}
local inactive = {
fg = get_color('fg', { 'StatusLineNC' }, '#666656'),
bg = get_color('bg', { 'StatusLineNC' }, '#000000'),
}
local theme = {
normal = {
a = active,
b = active,
c = active,
x = active,
y = {
fg = active.fg,
2023-09-06 10:19:56 +02:00
bg = require('plex.lib.color').brightness_modifier(active.bg, -20),
2023-09-06 00:26:45 +02:00
},
z = {
fg = active.fg,
2023-09-06 10:19:56 +02:00
bg = require('plex.lib.color').brightness_modifier(active.bg, 63),
2023-09-06 00:26:45 +02:00
},
},
inactive = {
a = inactive, b = inactive, c = inactive,
x = inactive, y = inactive, z = inactive,
},
}
return {
options = {
theme = theme,
globalstatus = true,
always_divide_middle = false,
disabled_filetypes = { statusline = { 'dashboard', 'alpha' } },
component_separators = '',
section_separators = '',
},
extensions = {
'man',
},
sections = {
lualine_a = {
-- Left edge block.
{
function() return '' end,
color = fg({'Directory'}, '#51afef'),
padding = 0,
},
-- Readonly/zoomed/hash symbol.
{
padding = { left = 1, right = 0 },
cond = is_file_window,
function()
if vim.bo.buftype == '' and vim.bo.readonly then
return icons.status.filename.readonly
elseif vim.t['zoomed'] then
return icons.status.filename.zoomed
end
return '%*#'
end,
},
-- Buffer number.
{ function() return '%n' end, cond = is_file_window, padding = 0 },
-- Modified symbol.
{
function()
return vim.bo.modified and icons.status.filename.modified or ''
end,
cond = is_file_window,
padding = 0,
color = { fg = get_color('bg', {'DiffDelete'}, '#ec5f67') },
},
},
lualine_b = {
{
2023-09-06 10:19:56 +02:00
function() return require('plex.lib.badge').icon() end,
2023-09-06 00:26:45 +02:00
padding = { left = 1, right = 0 },
},
{
filepath,
padding = 1,
color = { fg = '#D7D7BC' },
separator = '',
},
{
'branch',
cond = is_file_window,
icon = '',
padding = 1,
},
{
function() return '#' .. vim.b['toggle_number'] end,
cond = function() return vim.bo.buftype == 'terminal' end,
},
{
function()
if vim.fn.win_gettype() == 'loclist' then
return vim.fn.getloclist(0, { title = 0 }).title
end
return vim.fn.getqflist({ title = 0 }).title
end,
cond = function() return vim.bo.filetype == 'qf' end,
padding = { left = 1, right = 0 },
},
},
lualine_c = {
{
'diagnostics',
padding = { left = 1, right = 0 },
symbols = {
error = icons.status.diagnostics.error,
warn = icons.status.diagnostics.warn,
info = icons.status.diagnostics.info,
hint = icons.status.diagnostics.hint,
},
},
-- Whitespace trails
{
2023-09-06 10:19:56 +02:00
function() return require('plex.lib.badge').trails('') end,
2023-09-06 00:26:45 +02:00
cond = is_file_window,
padding = { left = 1, right = 0 },
color = { fg = get_color('bg', {'Identifier'}, '#b294bb') },
},
-- Start truncating here
{ function() return '%<' end, padding = 0 },
{
'diff',
symbols = {
added = icons.status.git.added,
modified = icons.status.git.modified,
removed = icons.status.git.removed,
},
padding = { left = 1, right = 0 },
cond = function()
return is_file_window() and is_min_width(70)
end,
},
-- {
-- function() return require('nvim-navic').get_location() end,
-- padding = { left = 1, right = 0 },
-- cond = function()
-- return is_min_width(100)
-- and package.loaded['nvim-navic']
-- and require('nvim-navic').is_available()
-- end,
-- },
},
lualine_x = {
-- showcmd
{
function() return require('noice').api.status.command.get() end,
cond = function()
return package.loaded['noice']
and require('noice').api.status.command.has()
end,
color = fg({'Statement'}),
},
-- showmode
{
function() return require('noice').api.status.mode.get() end,
cond = function()
return package.loaded['noice']
and require('noice').api.status.mode.has()
end,
color = fg({'Constant'}),
},
-- search count
{
function() require('noice').api.status.search.get() end,
cond = function()
return package.loaded['noice']
and require('noice').api.status.search.has()
end,
color = { fg = "#ff9e64" },
},
-- lazy.nvim updates
{
require('lazy.status').updates,
cond = require('lazy.status').has_updates,
color = fg({'Comment'}),
separator = { left = '' },
},
},
lualine_y = {
{
2023-09-06 10:19:56 +02:00
function() return require('plex.lib.badge').filemedia('') end,
2023-09-06 00:26:45 +02:00
cond = function() return is_min_width(70) end,
separator = { left = '' },
padding = 1,
},
},
lualine_z = {
{
function()
if is_file_window() then
return '%l/%2c%4p%%'
end
return '%l/%L'
end,
cond = function()
return vim.bo.filetype ~= 'TelescopePrompt'
end,
separator = { left = '' },
padding = 1,
},
},
},
inactive_sections = {
lualine_a = {
{
2023-09-06 10:19:56 +02:00
function() return require('plex.lib.badge').icon() end,
2023-09-06 00:26:45 +02:00
padding = 1,
},
{ filepath, padding = { left = 1, right = 0 } },
{
function()
return vim.bo.modified
and vim.bo.buftype == ''
and icons.status.filename.modified
or ''
end,
cond = is_file_window,
padding = 1,
color = { fg = get_color('bg', {'DiffDelete'}, '#ec5f67') },
},
},
lualine_b = {},
lualine_c = {},
lualine_x = {},
lualine_y = {},
lualine_z = {
{ function() return vim.bo.filetype end, cond = is_file_window },
}
},
}
end,
},
}