Prep the pan. Grease a 9x13-inch baking dish with butter.
This helps form a light crust and keeps the casserole from sticking.
Toast the bread (optional but best). Spread the bread cubes on a sheet pan and bake at 325°F (165°C) for 10–12 minutes until dry at the edges. Dry bread soaks the custard better and prevents sogginess.
Sauté aromatics. In a skillet, melt 1 tablespoon butter over medium heat. Cook the onion and bell pepper with a pinch of salt until soft and lightly golden, 5–7 minutes.
Let cool slightly.
Whisk the custard. In a large bowl, whisk eggs, milk, cream, Dijon, garlic powder, salt, pepper, and paprika until smooth. You want the seasoning evenly distributed.
Layer the base. Add half the bread cubes to the baking dish. Scatter half the ham, half the sautéed vegetables, and half the cheese over the bread.
Repeat the layers. Add the remaining bread, then the rest of the ham, vegetables, and cheese.
Sprinkle green onions on top if using.
Pour and press. Slowly pour the egg mixture over the casserole. Press down gently with a spatula to help the bread soak it up. Let it sit for 10 minutes on the counter.
Chill if making ahead. Cover tightly and refrigerate for at least 1 hour or up to 12 hours.
This improves texture. If baking right away, skip to the next step.
Bake. Preheat the oven to 350°F (175°C). Uncover the casserole and bake for 45–55 minutes until the center is set, the edges are puffed, and the top is lightly browned.
A knife inserted near the center should come out mostly clean.
Rest and serve. Let it rest 10–15 minutes before slicing. This keeps the layers tidy and the custard settled. Serve warm, with a little hot sauce or fresh herbs if you like.