Peel and thinly slice your onions. Try to keep them about the same size so they cook evenly.
In a large pot or Dutch oven, melt the butter and olive oil over medium heat. Add the onions and stir to coat. Cook for about 15 minutes, stirring often, until they start to soften.
Then lower the heat to medium-low and keep cooking for another 30-40 minutes, stirring occasionally, until they’re golden brown. Add the garlic in the last few minutes—don’t let it burn.
Turn the heat back up to medium-high. Pour in the white wine and scrape up the browned bits at the bottom of the pot. Let it cook for about 5 minutes, or until the wine reduces by half.
Add the beef stock, bay leaves, thyme, and a little salt and pepper. Bring to a simmer, then reduce heat and let it gently bubble for 30 minutes. Remove the bay leaves when it’s done.
Preheat your broiler. Place the baguette slices on a baking sheet, sprinkle with Gruyère cheese, and broil for 2-3 minutes or until bubbly and golden. Keep an eye on it—they can burn quickly.
Ladle the soup into bowls, top with a cheesy baguette slice (or two), and serve right away.