return { "nvim-lualine/lualine.nvim", event = "VeryLazy", dependencies = { "nvim-tree/nvim-web-devicons" }, -- Eviline config for lualine -- Author: shadmansaleh -- Credit: glepnir config = function() local lualine = require("lualine") -- Color table for highlights -- stylua: ignore local colors = { bg = '#434c5e', fg = '#d8dee9', yellow = '#ebcb8b', cyan = '#88c0d0', darkblue = '#5e81ac', green = '#a3be8c', orange = '#d08770', violet = '#b48ead', blue = '#81a1c1', red = '#bf616a', } 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 = { component_separators = "", section_separators = "", theme = { normal = { c = { fg = colors.fg, bg = colors.bg } }, inactive = { c = { fg = colors.fg, bg = colors.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 = {}, }, } -- Inserts a component in lualine_c at left section local function ins_left(component) table.insert(config.sections.lualine_c, component) end -- Inserts a component in lualine_x at right section local function ins_right(component) table.insert(config.sections.lualine_x, component) end -- ins_left({ -- function() -- return "▊" -- end, -- color = { fg = colors.blue }, -- Sets highlighting of component -- padding = { left = 0, right = 1 }, -- We don't need space before this -- }) ins_left({ -- mode component function() return "  " .. string.upper(vim.fn.mode()) end, color = function() -- auto change color according to neovims mode local mode_color = { n = colors.red, i = colors.green, v = colors.blue, [""] = colors.blue, V = colors.blue, c = colors.violet, no = colors.red, s = colors.orange, S = colors.orange, [""] = 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 = mode_color[vim.fn.mode()] } end, padding = { right = 1 }, }) ins_left({ "filename", cond = conditions.buffer_not_empty, color = { fg = colors.green, gui = "bold" }, }) ins_left({ "filesize", cond = conditions.buffer_not_empty, }) ins_right({ "location" }) ins_right({ "progress", color = { fg = colors.fg, gui = "bold" } }) ins_left({ "diagnostics", sources = { "nvim_diagnostic" }, symbols = { error = " ", warn = " ", info = " " }, diagnostics_color = { error = { fg = colors.red }, warn = { fg = colors.yellow }, info = { fg = colors.cyan }, }, }) -- -- -- Insert mid section. You can make any number of sections in neovim :) -- -- for lualine it's any number greater then 2 -- ins_left({ -- function() -- return "%=" -- end, -- }) -- -- ins_left({ -- -- Lsp server name . -- function() -- local msg = "No Active Lsp" -- local buf_ft = vim.api.nvim_get_option_value("filetype", { buf = 0 }) -- local clients = vim.lsp.get_clients() -- if next(clients) == nil then -- return msg -- end -- for _, client in ipairs(clients) do -- local filetypes = client.config.filetypes -- if filetypes and vim.fn.index(filetypes, buf_ft) ~= -1 then -- return client.name -- end -- end -- return msg -- end, -- icon = " LSP:", -- color = { fg = "#ffffff", gui = "bold" }, -- }) -- ins_right({ -- "filetype", -- color = { fg = colors.fg, gui = "bold" }, -- }) -- -- Add components to right sections -- ins_right({ -- "o:encoding", -- option component same as &encoding in viml -- fmt = string.upper, -- I'm not sure why it's upper case either ;) -- cond = conditions.hide_in_width, -- color = { fg = colors.green, gui = "bold" }, -- }) -- -- ins_right({ -- "fileformat", -- fmt = string.upper, -- color = { fg = colors.green, gui = "bold" }, -- }) -- ins_right({ -- "branch", -- icon = "", -- color = { fg = colors.violet, gui = "bold" }, -- }) -- ins_right({ -- "diff", -- symbols = { added = " ", modified = " ", removed = " " }, -- diff_color = { -- added = { fg = colors.green }, -- modified = { fg = colors.orange }, -- removed = { fg = colors.red }, -- }, -- cond = conditions.hide_in_width, -- }) -- ins_right({ -- function() -- return "▊" -- end, -- color = { fg = colors.blue }, -- padding = { left = 1 }, -- }) lualine.setup(config) end, }