🍯 Glaze

function _G.MyTabLine()
  local s = {}
  local cur = vim.fn.tabpagenr()
  local last = vim.fn.tabpagenr("$")

  for i = 1, last do
    local is_cur = (i == cur)

    -- Highlight group for the tab chunk
    table.insert(s, is_cur and "%#TabLineSel#" or "%#TabLine#")

    -- You had a second highlight decision that used Title for inactive
    table.insert(s, is_cur and "%#TabLineSel#" or "%#Title#")

    -- Click target for mouse (tab page number)
    table.insert(s, ("%%%dT "):format(i))

    -- Page number label
    table.insert(s, tostring(i))

    -- Collect buffer names + modified counter
    local names = {}
    local modified = 0
    local buflist = vim.fn.tabpagebuflist(i)

    for _, b in ipairs(buflist) do
      local buftype = vim.fn.getbufvar(b, "&buftype")
      local modifiable = vim.fn.getbufvar(b, "&modifiable") == 1
      local is_modified = vim.fn.getbufvar(b, "&modified") == 1

      if buftype == "help" then
        -- intentionally skipped
      elseif buftype == "quickfix" then
        -- intentionally skipped
      elseif modifiable then
        local name = vim.fn.bufname(b)
        local tail = (name ~= "" and vim.fn.fnamemodify(name, ":t")) or "[No Name]"
        table.insert(names, tail)
      end

      if is_modified then
        modified = modified + 1
      end
    end

    -- Modified marker
    if modified > 0 then
      table.insert(s, "+")
    end

    -- Back to tab highlight for the buffer-name part
    table.insert(s, is_cur and " %#TabLineSel#" or " %#TabLine#")

    -- Buffer names (or [New])
    if #names == 0 then
      table.insert(s, "[New]")
    else
      table.insert(s, table.concat(names, ", "))
    end

    table.insert(s, " ")
  end

  -- Fill + end click target
  table.insert(s, "%#TabLineFill#%T")

  return table.concat(s)
end