return {
  { "nvim-lualine/lualine.nvim", enabled = false },
  {
    "rebelot/heirline.nvim",
    opts = function(_, opts)
      local util = require("lazyvim.util.lualine")
      local conditions = require("heirline.conditions")
      local utils = require("heirline.utils")
      local root_dir = Util.lazy.lualine.root_dir()
      local pretty_path = Util.lazy.lualine.pretty_path()
      local c = require("tokyonight.colors").styles["moon"]
      local Root = {
        provider = root_dir[1],
        -- color = root_dir["color"],
        condition = root_dir["cond"],
      }
      local Path = {
        provider = pretty_path,
        hl = { fg = "cyan" },
      }
      local LSPActive = {
        condition = conditions.lsp_attached,
        update = { "LspAttach", "LspDetach" },

        -- You can keep it simple,
        -- provider = " [LSP]",

        -- Or complicate things a bit and get the servers names
        provider = function()
          local names = {}
          for i, server in pairs(vim.lsp.get_active_clients({ bufnr = 0 })) do
            table.insert(names, server.name)
          end
          return " [" .. table.concat(names, " ") .. "]"
        end,
        hl = { fg = "green", bold = true },
      }
      local codeium_source = Util.lazy.lualine.cmp_source("codeium")
      local Codeium = {
        provider = codeium_source[1],
        condition = codeium_source["cond"],
        hl = { fg = codeium_source["color"](), bold = true },
      }
      local colors = {
        [""] = Util.lazy.ui.fg("Special"),
        ["Normal"] = Util.lazy.ui.fg("Special"),
        ["Warning"] = Util.lazy.ui.fg("DiagnosticError"),
        ["InProgress"] = Util.lazy.ui.fg("DiagnosticWarn"),
      }
      local Copilot = {
        provider = function()
          local icon = Util.lazy.config.icons.kinds.Copilot
          local status = require("copilot.api").status.data
          return icon .. (status.message or "")
        end,
        condition = function()
          if not package.loaded["copilot"] then
            return
          end
          local ok, clients = pcall(Util.lazy.lsp.get_clients, { name = "copilot", bufnr = 0 })
          if not ok then
            return false
          end
          return ok and #clients > 0
        end,
        hl = function()
          if not package.loaded["copilot"] then
            return
          end
          local status = require("copilot.api").status.data
          return colors[status.status] or colors[""]
        end,
      }
      local ViMode = {
        -- get vim current mode, this information will be required by the provider
        -- and the highlight functions, so we compute it only once per component
        -- evaluation and store it as a component attribute
        init = function(self)
          self.mode = vim.fn.mode(1) -- :h mode()
        end,
        -- Now we define some dictionaries to map the output of mode() to the
        -- corresponding string and color. We can put these into `static` to compute
        -- them at initialisation time.
        static = {
          mode_names = { -- change the strings if you like it vvvvverbose!
            n = "N",
            no = "N?",
            nov = "N?",
            noV = "N?",
            ["no\22"] = "N?",
            niI = "Ni",
            niR = "Nr",
            niV = "Nv",
            nt = "Nt",
            v = "V",
            vs = "Vs",
            V = "V_",
            Vs = "Vs",
            ["\22"] = "^V",
            ["\22s"] = "^V",
            s = "S",
            S = "S_",
            ["\19"] = "^S",
            i = "I",
            ic = "Ic",
            ix = "Ix",
            R = "R",
            Rc = "Rc",
            Rx = "Rx",
            Rv = "Rv",
            Rvc = "Rv",
            Rvx = "Rv",
            c = "C",
            cv = "Ex",
            r = "...",
            rm = "M",
            ["r?"] = "?",
            ["!"] = "!",
            t = "T",
          },
          mode_colors = {
            n = "red",
            i = "green",
            v = "cyan",
            V = "cyan",
            ["\22"] = "cyan",
            c = "orange",
            s = "purple",
            S = "purple",
            ["\19"] = "purple",
            R = "orange",
            r = "orange",
            ["!"] = "red",
            t = "red",
          },
        },
        -- We can now access the value of mode() that, by now, would have been
        -- computed by `init()` and use it to index our strings dictionary.
        -- note how `static` fields become just regular attributes once the
        -- component is instantiated.
        -- To be extra meticulous, we can also add some vim statusline syntax to
        -- control the padding and make sure our string is always at least 2
        -- characters long. Plus a nice Icon.
        provider = function(self)
          return " %2(" .. self.mode_names[self.mode] .. "%)"
        end,
        -- Same goes for the highlight. Now the foreground will change according to the current mode.
        hl = function(self)
          local mode = self.mode:sub(1, 1) -- get only the first mode character
          return { fg = self.mode_colors[mode], bold = true }
        end,
        -- Re-evaluate the component only on ModeChanged event!
        -- Also allows the statusline to be re-evaluated when entering operator-pending mode
        update = {
          "ModeChanged",
          pattern = "*:*",
          callback = vim.schedule_wrap(function()
            vim.cmd("redrawstatus")
          end),
        },
      }
      require("heirline").load_colors(c)
      ViMode = utils.surround({ "", "" }, "fg_dark", { ViMode }) -- Snippets
      local StatusLines = {
        hl = function()
          if conditions.is_active() then
            return "StatusLine"
          else
            return "StatusLineNC"
          end
        end,
        -- fallthrough = false,
        colors = c,
        ViMode,
        LSPActive,
        Root,
        -- Path,
        Codeium,
        Copilot,
      }
      return { statusline = StatusLines }
    end,
    config = function(_, opts)
      require("heirline").setup(opts)
    end,
  },
}
