1
0
Fork 0
dotfiles/.config/nvim/lua/plugins/misc/lualine.lua

213 lines
5.6 KiB
Lua

local M = { "nvim-lualine/lualine.nvim" }
M.opts = function()
local colors = require('tokyonight.colors').setup({ transform = true })
local icons = require('config.icons')
local conditions = {
buffer_not_empty = function()
return vim.fn.empty(vim.fn.expand('%:t')) ~= 1
end,
hide_in_width = function()
return vim.fn.winwidth(0) > 80
end,
check_git_workspace = function()
local filepath = vim.fn.expand('%:p:h')
local gitdir = vim.fn.finddir('.git', filepath .. ';')
return gitdir and #gitdir > 0 and #gitdir < #filepath
end,
}
local function search_result()
if vim.v.hlsearch == 0 then
return ''
end
local last_search = vim.fn.getreg('/')
if not last_search or last_search == '' then
return ''
end
local searchcount = vim.fn.searchcount { maxcount = 9999 }
return last_search .. '(' .. searchcount.current .. '/' .. searchcount.total .. ')'
end
local config = {
options = {
component_separators = '',
section_separators = '',
-- theme = {
-- normal = { c = { fg = colors.fg, bg = colors.bg } },
-- inactive = { c = { fg = colors.fg, bg = colors.bg } },
-- },
disabled_filetypes = {
statusline = { 'alpha' }
},
ignore_focus = { 'toggleterm', 'NvimTree' },
globalstatus = true,
},
sections = {
lualine_a = {},
lualine_b = {},
lualine_y = {},
lualine_z = {},
lualine_c = {},
lualine_x = {},
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_y = {},
lualine_z = {},
lualine_c = {},
lualine_x = {},
}
}
local function ins_left(component)
table.insert(config.sections.lualine_c, component)
end
local function ins_right(component)
table.insert(config.sections.lualine_x, component)
end
local function mode_color()
local color = {
n = colors.red,
i = colors.green,
v = colors.magenta,
[string.char(22)] = colors.magenta,
V = colors.magenta,
c = colors.blue,
no = colors.red,
s = colors.orange,
S = colors.orange,
[string.char(19)] = colors.orange,
ic = colors.yellow,
R = colors.violet,
Rv = colors.violet,
cv = colors.red,
ce = colors.red,
r = colors.cyan,
rm = colors.cyan,
['r?'] = colors.cyan,
['!'] = colors.red,
t = colors.red,
}
return { fg = color[vim.fn.mode()] }
end
ins_left {
function()
return ''
end,
color = function()
return mode_color()
end,
padding = { right = 1 },
}
ins_left {
'filename',
cond = conditions.buffer_not_empty,
color = { fg = colors.magenta, gui = 'bold' },
}
ins_left {
'fileformat',
fmt = string.upper,
icons_enabled = false,
color = { fg = colors.green },
}
ins_left {
'o:encoding',
fmt = string.upper,
cond = conditions.hide_in_width,
color = { fg = colors.green },
}
ins_left {
'filesize',
fmt = string.upper,
icons_enabled = false,
color = { fg = colors.green },
}
ins_left {
'%04l:%04c',
}
-- NOTE: My beloved :(
-- ins_left {
-- function()
-- local current_line = vim.fn.line "."
-- local total_lines = vim.fn.line "$"
-- local chars = icons.progress
-- local line_ratio = current_line / total_lines
-- local index = math.ceil(line_ratio * #chars)
-- return chars[index]
-- end,
-- color = { fg = colors.yellow }
-- }
ins_right {
search_result,
color = { fg = colors.white },
padding = { left = 1 },
}
ins_right {
function()
local msg = ''
local buf_ft = vim.api.nvim_buf_get_option(0, 'filetype')
local clients = vim.lsp.get_active_clients()
if next(clients) == nil then
return 'No LSP'
end
for _, client in ipairs(clients) do
local filetypes = client.config.filetypes
if filetypes and vim.fn.index(filetypes, buf_ft) ~= -1 then
msg = msg .. ", " .. client.name
end
end
return msg:sub(3)
end,
color = { fg = colors.blue, gui = 'bold' },
}
ins_right {
'diagnostics',
sources = { 'nvim_diagnostic' },
symbols = {
error = icons.DiagnosticError .. ' ',
warn = icons.DiagnosticWarn .. ' ',
info = icons.DiagnosticInfo .. ' ',
},
diagnostics_color = {
color_error = { fg = colors.red },
color_warn = { fg = colors.yellow },
color_info = { fg = colors.cyan },
},
}
ins_right {
'filetype',
color = { fg = colors.green, gui = 'bold' },
padding = { left = 1 },
}
ins_right {
function()
return ''
end,
color = function()
return mode_color()
end,
padding = { left = 1 },
}
return config
end
return M