vim-settings/neovim/lua/plugins/lualine.lua
ViViDboarder bf630d6bbf Add support for Nerd fonts
Also provides some graceful degradation without them
2024-11-27 12:25:24 -08:00

127 lines
3.5 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- #selene: allow(mixed_table)
local M = {}
local utils = require("utils")
-- Only return interesting ffenc (not utf-8[unix])
function M.custom_ffenc()
local enc = vim.bo.fenc
local format = vim.bo.fileformat
if enc ~= "utf-8" or format ~= "unix" then
return enc .. "[" .. format .. "]"
end
return ""
end
function M.mixed_indent()
local mixed = vim.fn.search([[\v^(\t+ | +\t)]], "nw")
if mixed > 0 then
return "i:" .. mixed
end
local space_indent = vim.fn.search([[\v^ +]], "nw")
local tab_indent = vim.fn.search([[\v^\t+]], "nw")
if tab_indent > 0 and space_indent > 0 then
return "i:" .. require("math").max(tab_indent, space_indent)
end
return ""
end
function M.trailing_whitespace()
local line = vim.fn.search([[\s\+$]], "nw")
if line ~= 0 then
return "tw:" .. line
end
return ""
end
-- Plugin to print name of current CSV column
M.csv_col = {
function()
return vim.fn.CSVCol(1)
end,
cond = function()
return vim.bo.filetype == "csv" and vim.fn.exists("*CSVCol") == 1
end,
}
-- Configure lualine witha provided theme
function M.config_lualine(theme_name)
-- Theme name transformations
if theme_name == nil then
theme_name = "auto"
elseif theme_name:find("wombat") or theme_name == "wombuddy" then
theme_name = "wombat"
end
-- navic
local code_loc = {}
utils.try_require("nvim-navic", function(navic)
local opts = {}
if not require("icons").nerd_font then
opts.icons = {
Array = "𝐴 ",
Boolean = "𝐵 ",
Class = " ",
Constant = " ",
Constructor = "𝕮 ",
Enum = "𝐸 ",
EnumMember = "𝐸𝑀 ",
Event = "𝐸 ",
Field = "𝐹 ",
File = "📄 ",
Function = "𝑓 ",
Interface = "𝐼 ",
Key = "𝐾 ",
Method = "m ",
Module = "𝑀 ",
Namespace = "𝑁 ",
Null = "𝑁 ",
Number = "𝑁 ",
Object = "𝑂 ",
Operator = "𝑂 ",
Package = "📦 ",
Property = "𝑃 ",
String = "𝑆 ",
Struct = "𝑆 ",
TypeParameter = "𝑇𝑃 ",
Variable = "𝑉 ",
}
end
navic.setup(opts)
code_loc = { "navic" }
end)
require("lualine").setup({
options = {
theme = theme_name,
icons_enabled = require("icons").nerd_font,
component_separators = { left = "|", right = "|" },
section_separators = { left = "", right = "" },
},
sections = {
lualine_a = {
{
"mode",
fmt = function(str)
return str:sub(1, 1)
end,
},
},
lualine_b = { "FugitiveHead", "diff" },
lualine_c = { { "filename", path = 1 }, code_loc, M.csv_col },
lualine_x = { M.custom_ffenc, "filetype" },
lualine_y = { "progress", "location" },
lualine_z = {
{ "diagnostics", sources = { "nvim_diagnostic" } },
{ M.mixed_indent, color = { bg = "#de4f1f" } },
{ M.trailing_whitespace, color = { bg = "#de4f1f" } },
},
},
})
end
return M