Preheat oven to 350º and adjust rack to middle position. In a large bowl, lightly toss the sourdough (or biscuits) and butter and spread out on a large baking sheet. Bake for about 20-25 minutes until bread is golden.
Cook the bacon over medium-high heat in a large skillet until crisp. Transfer bacon to a plate lined with paper towels and pour out all fat except for 2 tablespoons.
Add the onion to the skillet and cook over medium heat until caramelized, about 10 minutes. Add the tomatoes and cook until almost all the liquid has evaporated, about 5 minutes.
Pour the onion mixture into a large bowl along with the bread, bacon, cheese, green onion, and stock. Stir until incorporated and season well with sea salt. Spread the mixture in a 9×13 baking dish (if you are making the gluten-free/grain-free version of this recipe then use an 11 x 7-inch baking dish) and cover with parchment paper and then with foil (I do this so the foil doesn’t touch the food). (At this point, you can place the dish in the refrigerator and then bake in the morning.)
Bake for 30 minutes and then remove the foiland parchment. Bake an additional 15 minutes until the top is crispy. Remove the baking dish from the oven and, using a ladle, press 6 indentations into the bread mixture. Crack an egg into each indentation. Return the dish to the oven and bake for about 15 minutes until eggs are set, but yolks are still runny. Serve immediately.