In a large Dutch oven, melt 4 tablespoons butter over medium-high heat. Add onions and cook, stirring occasionally, until onions are soft and beginning to brown, about 15 minutes.
Reduce heat to medium-low and continue cooking, stirring occasionally and scraping up browned bits from the bottom of the pan, until onions are deep golden brown, about 45 minutes more. If onions start to scorch, reduce heat, add 1 tablespoon water, and scrape up dark brown bits from the bottom of the pan before continuing to cook.
Add remaining 4 tablespoons butter to Dutch oven and heat until melted and foaming subsides. Sprinkle flour over butter and onions and stir until flour is fully incorporated and raw flour smell has cooked off, about 30 seconds.
Increase heat to medium-high and add beer, stirring and scraping the bottom of pan constantly, until mixture is fragrant and thick, about 30 seconds. Add chicken stock and beef stock (or additional chicken stock) in a steady stream, stirring constantly to incorporate. Stir in salt, pepper, and bay leaf.
Bring soup to a simmer, then reduce heat to medium-low and simmer, stirring occasionally, until flavors meld and soup thickens, about 15 minutes.
Reduce heat to low and add 6 ounces of cheese (170 g; about 1 ½ cups), one handful at a time, whisking after each addition until cheese is fully melted into the broth. Remove from heat.
Adjust oven rack to top position and preheat broiler on high. Ladle soup into 6 ovenproof serving bowls or crocks, top each bowl with 2 slices of French bread, then divide remaining grated cheese between bowls (about 1 ounce; ¼ cupper bowl). Transfer bowls to a rimmed baking sheet. Broil until cheese is melted, bubbly, and browned in spots, 1 to 2 minutes. Remove from heat, garnish with chives, and serve.
