6 tablespoons unsalted butter
1 sweet onion, thinly sliced
8 ounces whole wheat elbow noodles
1/4 cup all-purpose flour
2 1/2 cups whole milk
6 ounces gruyere cheese, freshly grated
4 ounces swiss cheese, freshly grated
2 ounces parmesan cheese, freshly grated
1 teaspoon smoked paprika
1/2 teaspoon freshly ground nutmeg
2 teaspoons dijon mustard
1/2 cup panko breadcrumbs
Preheat the oven to 375 degrees F. Grease an 8×8 inch baking fish
In a large skillet, melt 2 tablespoons of the butter over medium-low heat. Add the onions with a pinch of salt and cook, stirring occasionally, until they are golden and caramely, about 40 minutes.
Bring a pot of salted water to a boil and cook the pasta according to the directions, reducing the cook time by 1 minute. Drain and set aside.
In a large pot, melt the remaining 4 tablespoons butter over medium-high heat. Add the flour, whisking until combined to create a roux. Cook for 1 to 2 minutes until it’s golden and fragrant. Slowly pour in half the milk, whisking constantly so they mixture can thicken, about 5 minutes.
Slowly pour in the other half of the milk and whisk until thickened. Reduce the heat to low and add the gruyere and swiss and all but 2 tablespoons of the parmesan. Stir with a large wooden spoon until the cheese melts. Stir in the paprika, cayenne, nutmeg, mustard and any salt and pepper to taste. Stir in the cooked pasta and the onions.
Transfer the mixture to a baking dish and top with the panko crumbs and remaining parmesan. Bake until the top is golden and crunchy, about 25 minutes. Cook for a few minutes