nvim-config/lua/configs/lualine.lua

234 lines
4.9 KiB
Lua
Raw Normal View History

2022-02-28 03:11:17 +00:00
local M = {}
function M.config()
local status_ok, lualine = pcall(require, "lualine")
if not status_ok then
return
end
local scolors = {
fg = '#adb0b9',
bg = '#242424',
inset = '#569cd6',
error = '#d16969',
warn = '#eed94e',
info = '#569cd6',
added = '#6a9955',
modified = '#db812e',
removed = '#d16969',
branch = '#dcdcaa',
filetype = '#c5a6c0',
treesitter = '#6a9955',
scroll = '#dcdcaa',
}
local colors = {
yellow = "#ecbe7b",
yellow_1 = "#ff9640",
grey = "#2c323c",
white = "#bbc2cf",
cyan = "#008080",
darkblue = "#081633",
green = "#98be65",
orange = "#ff8800",
violet = "#a9a1e1",
magenta = "#c678dd",
blue = "#51afef",
red = "#ec5f67",
}
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 config = {
options = {
disabled_filetypes = { "NvimTree", "dashboard", "Outline" },
component_separators = "",
section_separators = "",
theme = {
normal = { c = { fg = scolors.fg, bg = scolors.bg } },
inactive = { c = { fg = scolors.fg, bg = scolors.bg } },
},
},
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
ins_left {
function()
return ""
end,
color = { fg = colors.blue },
padding = { left = 0, right = 0 },
}
ins_left {
"branch",
icon = "",
color = { fg = scolors.branch, gui = "bold" },
padding = { left = 2, right = 1 },
}
ins_left {
"filetype",
cond = conditions.buffer_not_empty,
color = { fg = scolors.filetype, gui = "bold" },
padding = { left = 2, right = 1 },
}
ins_left {
"diff",
symbols = { added = "", modified = "", removed = "" },
diff_color = {
added = { fg = scolors.added },
modified = { fg = scolors.modified },
removed = { fg = scolors.removed },
},
cond = conditions.hide_in_width,
padding = { left = 2, right = 1 },
}
ins_left {
"diagnostics",
sources = { "nvim_diagnostic" },
symbols = { error = "", warn = "", info = "", hint = "" },
diagnostics_color = {
color_error = { fg = scolors.error },
color_warn = { fg = scolors.warn },
color_info = { fg = scolors.info },
},
padding = { left = 2, right = 1 },
}
ins_left {
function()
return "%="
end,
}
ins_right {
function(msg)
msg = msg or "Inactive"
local buf_clients = vim.lsp.buf_get_clients()
if next(buf_clients) == nil then
if type(msg) == "boolean" or #msg == 0 then
return "Inactive"
end
return msg
end
local buf_ft = vim.bo.filetype
local buf_client_names = {}
for _, client in pairs(buf_clients) do
if client.name ~= "null-ls" then
table.insert(buf_client_names, client.name)
end
end
local formatters = require "core.utils"
local supported_formatters = formatters.list_registered_formatters(buf_ft)
vim.list_extend(buf_client_names, supported_formatters)
local linters = require "core.utils"
local supported_linters = linters.list_registered_linters(buf_ft)
vim.list_extend(buf_client_names, supported_linters)
return table.concat(buf_client_names, ", ")
end,
icon = "",
color = { gui = "none" },
padding = { left = 0, right = 1 },
cond = conditions.hide_in_width,
}
ins_right {
function()
local b = vim.api.nvim_get_current_buf()
if next(vim.treesitter.highlighter.active[b]) then
return " 綠S"
end
return ""
end,
color = { fg = scolors.treesitter },
padding = { left = 1, right = 0 },
cond = conditions.hide_in_width,
}
ins_right {
"location",
padding = { left = 1, right = 1 },
}
ins_right {
"progress",
color = { gui = "none" },
padding = { left = 0, right = 0 },
}
ins_right {
function()
local current_line = vim.fn.line "."
local total_lines = vim.fn.line "$"
local chars = { "__", "▁▁", "▂▂", "▃▃", "▄▄", "▅▅", "▆▆", "▇▇", "██" }
local line_ratio = current_line / total_lines
local index = math.ceil(line_ratio * #chars)
return chars[index]
end,
padding = { left = 1, right = 1 },
color = { fg = scolors.scroll },
cond = nil,
}
ins_right {
function()
return ""
end,
color = { fg = scolors.inset },
padding = { left = 1, right = 0 },
}
lualine.setup(config)
end
return M