Generously butter a 9x13-inch baking dish to prevent sticking. For added convenience, you can line with parchment paper with overhanging edges.
Cut or tear your day-old bread into 1-inch cubes. If you only have fresh bread, you can dry it out in a 250°F oven for 10 minutes.
In a large bowl, whisk together the eggs, milk, cream, sugar, vanilla, cinnamon, nutmeg, and salt until thoroughly combined.
Arrange the bread cubes in your prepared baking dish, then pour the custard mixture evenly over the bread. Press down gently with a spatula to help the bread absorb the liquid.
Cover with plastic wrap and refrigerate for at least 4 hours, but preferably overnight (8-12 hours) for optimal flavor infusion.
In a medium bowl, combine the flour, brown sugar, cinnamon, and salt. Add the cold butter cubes and use your fingers or a pastry cutter to work the mixture until it resembles coarse crumbs. Stir in nuts if using.
Preheat your oven to 350°F. Remove the casserole from the refrigerator while the oven heats.
Sprinkle the streusel topping evenly over the soaked bread. Bake for 45-50 minutes, or until the center is set and the top is golden brown. If the top browns too quickly, cover loosely with foil.