Pre-heat your oven to 400f (200c)
Cut the cauliflower into florets, don't cut them too small, you want quite big florets so they don't get too soft. Arrange on a baking sheet and toss with the olive oil and a sprinkle of salt and pepper.
Roast in the oven for 20 minutes. It should have a touch of color but still be firm. When done remove from the oven, set aside and turn oven down to 350f.
Melt 1 tablespoon of butter in a fry pan over medium heat and gently fry the onions for 5 - 6 minutes, adding a pinch of salt half way through. Cook until soft and glassy. You don't want lots of colour on them so lower the heat if you need and keep moving round.
Add the garlic and cook for a further minute then set aside.
Make the topping by combining all the ingredients in a bowl and set aside.
Boil your pasta in well salted water, undercooking by 1 - 2 minutes from package instructions. Toss pasta with a knob of butter after draining while you make the cheese sauce. It doesn't matter if it's cold by the time you mix so boil it at any stage in the process.
In a large saucepan heat the butter over a medium heat and when sizzling, add the flour.
Whisk vigorously for a minute.
Lower the heat slightly and add the milk in a slow stream or a cup at a time, whisking the whole time making sure you get all the flour mixture from the bottom and sides of the pan.
Cook for 3 - 4 minutes until it thickens slightly and coats the back of a wooden spoon.
Turn the heat right down to lowest and add the cheese in three lots, whisking well and letting it melt in between each addition. It doesn't matter if there is the odd lump.
Add the black pepper, herbs and lemon juice and mix through well.
Take off the heat and mix in the cooked pasta, roasted cauliflower and onion.
Have a taste and add ½ - 1 teaspoon salt if you need.
Pour into a baking dish (I used a 30cm x 12cm dish). Sprinkle the topping on top and bake at 350f (180c) for 25 - 30 mins until bubbling and golden brown.
Let it sit a few minutes before serving.