local M = {} function M.config() local status_lualine_ok, lualine = pcall(require, "lualine") if not status_lualine_ok then return end local status_gitblame_ok, gitblame = pcall(require, "gitblame") if not status_gitblame_ok then return end local scolors = { fg = '#adb0b9', fg_wash = '#808289', bg = '#252526', inset = '#569cd6', working_dir = '#569cd6', branch = '#dcdcaa', filetype = '#c5a6c0', filename = '#91bde1', added = '#6a9955', modified = '#db812e', removed = '#f6635a', error = '#f53226', warn = '#eed94e', info = '#569cd6', treesitter = '#6a9955', scroll = '#dcdcaa', } 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_c = { { -- working dir function () local cwd = vim.fn.getcwd() -- substr the cwd starting at the last "/" character local cwd_name = string.sub(cwd,-cwd:reverse():find("/")+1) return cwd_name end, color = { fg = scolors.working_dir, gui = "bold" }, icon="", padding = { left = 2, right = 1 }, }, { -- file name "filename", path = 1, icon="", color = { fg = scolors.filename, gui = "bold" }, padding = { left = 1, right = 1 }, }, -- { -- git branch -- "branch", -- icon = "", -- color = { fg = scolors.branch, gui = "bold" }, -- padding = { left = 1, right = 1 }, -- }, { -- filetype "filetype", colored = false, color = { fg = scolors.filetype, gui = "bold" }, cond = conditions.buffer_not_empty, padding = { left = 1, right = 1 }, }, { -- git diff "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 = 1, right = 1 }, }, { -- nvim diagnostics "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 = 1, right = 1 }, }, }, lualine_x = { { -- git blame gitblame.get_current_blame_text, color = { fg = scolors.fg_wash }, cond = gitblame.is_blame_text_available, padding = { left = 0, right = 1 }, }, { -- location in file (line:col) "location", padding = { left = 0, right = 1 }, }, { -- progress through file (%) -- slightly modified from default "progress" -- always 3 chars long, no TOP -- https://github.com/nvim-lualine/lualine.nvim/blob/master/lua/lualine/components/progress.lua function () local cur = vim.fn.line('.') local total = vim.fn.line('$') if cur == total then return 'BOT' elseif cur / total < 0.10 then return ' ' .. math.floor(cur / total * 100) .. '%%' else return math.floor(cur / total * 100) .. '%%' end end, "progress", color = { gui = "none" }, padding = { left = 0, right = 1 }, }, }, lualine_y = {}, lualine_z = {}, }, inactive_sections = { lualine_a = { { -- file name "filename", path = 1, icon="", color = { fg = scolors.filename, gui = "bold" }, padding = { left = 1, right = 1 }, }, }, lualine_b = {}, lualine_c = {}, lualine_x = {}, lualine_y = {}, lualine_z = {}, } } lualine.setup(config) end return M