Rinse the rice in several changes of water to remove excess starch, then put in a bowl of cold water and leave to soak for 30 mins.
Meanwhile, fry the onions in the oil for 8 mins until soft and starting to colour. Add the ginger, then cook for 2 mins more. Stir in the curry paste followed by the whole spices, cook for 1 min more, then tip in the potatoes and cauliflower. Pour in 300ml water, cover and boil for about 5-7 mins until the veg are just tender, but still have a little resistance. Stir in the yogurt and peas with 1 tsp salt.
Mix the saffron, rosewater and 3 tbsp boiling water together and stir well. Drain the rice, tip into a pan of boiling salted water, then cook for 5 mins until almost tender. Drain again. Get out a large ovenproof dish with a lid and butter the base. Tip the curry sauce into the base, scatter over the nuts, then spoon over the rice. Drizzle over the rosewater mixture, then cover with foil followed by the lid. Can be chilled overnight until ready to cook.
Heat oven to 180C/fan 160C/gas 4. Put the biryani in the oven for 45 mins-1 hr until thoroughly heated through. To check it’s ready, try a spoonful from the centre of the rice. For the garnish, slowly fry the onions in the oil until really golden and crisp (this can be done in advance). When the biryani is hot and ready to serve, gently toss through the onions and coriander.