+ event = "VeryLazy",
+ init = function()
+ vim.g.lualine_laststatus = vim.o.laststatus
+ if vim.fn.argc(-1) > 0 then
+ -- set an empty statusline till lualine loads
+ vim.o.statusline = " "
+ else
+ -- hide the statusline on the starter page
+ vim.o.laststatus = 0
+ end
+ end,
+ opts = function()
+ -- PERF: we don't need this lualine require madness 🤷
+ local lualine_require = require("lualine_require")
+ lualine_require.require = require
+
+ local icons = LazyVim.config.icons
+
+ vim.o.laststatus = vim.g.lualine_laststatus
+
+ local opts = {
+ options = {
+ theme = "auto",
+ globalstatus = vim.o.laststatus == 3,
+ disabled_filetypes = { statusline = { "dashboard", "alpha", "ministarter", "snacks_dashboard" } },
+ },
+ sections = {
+ lualine_a = { "mode" },
+ lualine_b = { "branch" },
+
+ lualine_c = {
+ {
+ "diagnostics",
+ symbols = {
+ error = icons.diagnostics.Error,
+ warn = icons.diagnostics.Warn,
+ info = icons.diagnostics.Info,
+ hint = icons.diagnostics.Hint,
+ },
+ },
+ { "filetype", icon_only = true, separator = "", padding = { left = 1, right = 0 } },
+ { M.pretty_path() },
+ },
+ lualine_x = {
+ Snacks.profiler.status(),
+ -- stylua: ignore
+ {
+ function() return " " .. require("dap").status() end,
+ cond = function() return package.loaded["dap"] and require("dap").status() ~= "" end,
+ color = function() return { fg = Snacks.util.color("Debug") } end,
+ },
+ -- stylua: ignore
+ {
+ require("lazy.status").updates,
+ cond = require("lazy.status").has_updates,
+ color = function() return { fg = Snacks.util.color("Special") } end,
+ },
+ {
+ "diff",
+ symbols = {
+ added = icons.git.added,
+ modified = icons.git.modified,
+ removed = icons.git.removed,
+ },
+ source = function()
+ local gitsigns = vim.b.gitsigns_status_dict
+ if gitsigns then
+ return {
+ added = gitsigns.added,
+ modified = gitsigns.changed,
+ removed = gitsigns.removed,
+ }
+ end
+ end,
+ },
+ },
+ lualine_y = {
+ { "progress", separator = " ", padding = { left = 1, right = 0 } },
+ { "location", padding = { left = 0, right = 1 } },
+ },
+ lualine_z = {
+ function()
+ return " " .. os.date("%R")
+ end,
+ },
+ },
+ inactive_sections = {
+ lualine_c = {
+ { "filetype", icon_only = true, separator = "", padding = { left = 1, right = 0 } },
+ { M.pretty_path() },
+ },
+ },
+ extensions = { "neo-tree", "lazy", "fzf" },
+ }
+
+ local trouble = require("trouble")
+ local symbols = trouble.statusline({
+ mode = "symbols",
+ groups = {},
+ title = false,
+ filter = { range = true },
+ format = "{kind_icon}{symbol.name:Normal}",
+ hl_group = "lualine_c_normal",
+ })
+ table.insert(opts.sections.lualine_c, {
+ symbols and symbols.get,
+ cond = function()
+ return vim.b.trouble_lualine ~= false and symbols.has()
+ end,
+ })
+
+ return opts
+ end,