Thinly slice the onions and set aside. Heat a large heavy-bottomed pot over low heat and add the butter and olive oil, allowing them to melt and shimmer.
Add the sliced onions to the pot, stirring to coat them evenly. Cook slowly over low heat, stirring frequently, until the onions soften and turn a deep golden brown, about 45-60 minutes. This slow process releases their natural sugars and develops rich flavor.
Once the onions are deeply caramelized and fragrant, pour in the wine to deglaze the pan, scraping up the browned bits from the bottom. Let the wine reduce slightly for about 5 minutes.
Add the broth, thyme, and bay leaf to the pot. Bring the mixture to a gentle simmer and let it cook uncovered for 30-40 minutes to meld the flavors. Season with salt and pepper to taste.
Preheat your broiler. While the soup simmers, toast the baguette slices until golden and crispy.
Remove the thyme sprig and bay leaf from the soup. Ladle the hot soup into oven-safe bowls, placing a toasted baguette slice on top of each.
Sprinkle the grated Gruyère cheese generously over each bread slice, covering the surface completely.
Place the bowls under the broiler for 3-5 minutes, until the cheese bubbles and turns golden brown. Keep a close eye to prevent burning.
Remove from the broiler, let sit for a minute to cool slightly, then serve bubbling and fragrant, enjoying the rich, caramelized aroma and creamy, cheesy topping.