+ 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 } },
+ { LazyVim.lualine.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,
+ },
+ },
+ 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,
+ },
+ {
+ "echasnovski/mini.icons",
+ lazy = true,
+ opts = {
+ file = {
+ [".keep"] = { glyph = "", hl = "MiniIconsGrey" },
+ ["devcontainer.json"] = { glyph = "", hl = "MiniIconsAzure" },
+ },
+ filetype = {
+ dotenv = { glyph = "", hl = "MiniIconsYellow" },
+ },
+ },
+ init = function()
+ -- TODO: try without this
+ -- see :h MiniIcons.mock_nvim_web_devicons()
+ package.preload["nvim-web-devicons"] = function()
+ require("mini.icons").mock_nvim_web_devicons()
+ return package.loaded["nvim-web-devicons"]
+ end
+ end,
+ },
+ { "MunifTanjim/nui.nvim", lazy = true },
+ { "stevearc/dressing.nvim",
+ enabled = false, -- replaced by snacks.input
+ lazy = true,
+ opts = {
+ input = {
+ start_in_insert = false,
+ insert_only = false,
+ },
+ },
+ },
+ { "indent-blankline.nvim",
+ enabled = false, -- replaced by snacks.indent
+ },
+ { "echasnovski/mini.indentscope",
+ enabled = false, -- replaced by snacks.indent
+ version = false, -- wait till new 0.7.0 release to put it back on semver
+ event = "LazyFile",
+ opts = function (_, opts)
+ return {
+ draw = {
+ animation = require("mini.indentscope").gen_animation.linear({ duration = 10 })
+ }
+ }
+ end,
+ },
+ { "SmiteshP/nvim-navic",
+ lazy = true,
+ init = function()
+ vim.g.navic_silence = true
+ LazyVim.lsp.on_attach(function(client, buffer)
+ if client.supports_method("textDocument/documentSymbol") then
+ require("nvim-navic").attach(client, buffer)
+ end
+ end)
+ end,
+ opts = function()
+ return {
+ separator = " ",
+ highlight = true,
+ depth_limit = 5,
+ icons = LazyVim.config.icons.kinds,
+ lazy_update_context = true,
+ }
+ end,
+ },
+ { "nvim-lualine/lualine.nvim",
+ optional = true,
+ opts = function(_, opts)
+ if not vim.g.trouble_lualine then
+ table.insert(opts.sections.lualine_c, { "navic", color_correction = "dynamic" })
+ end