Prep the pan: Grease a 9x13-inch baking dish with butter. Set aside.
Cube the bread: Cut the loaf into 1-inch cubes.
If your bread is very fresh, spread the cubes on a baking sheet and let them air-dry for 30–60 minutes, or bake at 300°F (150°C) for 8–10 minutes to dry slightly. Dry bread soaks better.
Make the custard: In a large bowl, whisk eggs, milk (and cream if using), granulated sugar, brown sugar, vanilla, cinnamon, nutmeg, and salt until smooth.
Combine: Add bread cubes to the bowl and gently toss until evenly coated. Let sit for 5 minutes so the bread starts absorbing.
Assemble: Pour the mixture into the greased baking dish.
Drizzle with melted butter. If using nuts, sprinkle them evenly over the top.
Optional streusel: For a crunchy top, mix flour, brown sugar, and cinnamon. Cut in the cold butter with your fingers or a pastry cutter until crumbly.
Scatter over the casserole.
Chill overnight: Cover tightly with foil or wrap and refrigerate for at least 6 hours, up to 18 hours.
Bring to room temp: In the morning, remove the casserole from the fridge and let it sit at room temperature while the oven preheats to 350°F (175°C), about 20 minutes.
Bake: Cover with foil and bake for 20 minutes. Remove foil and bake another 25–35 minutes, until the top is golden and the center is set but still slightly custardy. A knife inserted in the middle should come out mostly clean, not wet.
Rest and serve: Let it rest for 10 minutes.
Serve warm with maple syrup, berries, and a dusting of powdered sugar.