Preheat the oven to 350 degrees F. Line a baking sheet with foil and set aside. Butter a large baking dish.
Heat a large saute pan over medium heat and add the oil. Add the bacon and cook until crisp, 3 to 4 minutes. Add the onion and cook until tender, another 4 to 5 minutes. Mix in the ham, then set aside to cool.
In a large bowl, whisk together the milk, paprika, chile flakes if using, eggs and some salt and pepper. Add the bacon, onion and ham mixture, stirring to combine. Fold in the Cheddar and bread, making sure the bread is soaked in the custard.
Transfer the mixture to the prepared baking dish and gently press down. Cover the dish with foil, transfer to the lined baking sheet and bake for 30 minutes. Uncover and bake until golden brown, about 30 minutes more. Let rest for 5 minutes before serving. Serve with maple syrup, if desired.
You can use any leftover bread you have on hand in this recipe! For more ingredient substitution ideas, see the article below.