Fry one large onion, finely chopped, until golden brown and crisp, in about half a cup of oil and drain on paper towel
To cook the biryani add a quarter cup of the oil, used for the onion, to a large pot. Sear the fish on both sides, just a few seconds each until it browns a little on the edges. Do not cook it too long as it will cook further in the oven
In the same oil add one small onion, finely chopped together with the thyme, curry leaf and green chilli. Fry until the onion is golden brown. Peel and smash the 2 cloves of garlic, add it to the pot and fry for a minute
Add the spices, turmeric, masala, cumin, coriander and fennel. Fry for at least 2 minutes. Add a few drops of water if required
Add in the pureed tomatoes and any excess marinade from the fish. Season with salt. Add the chopped mint leaves. Cover and simmer until the tomatoes are cooked, about 10-15 minutes. If it gets too dry you can add a little bit of water
Remove half the tomato mixture and place in a bowl. Layer half the fish on top of the tomato mixture in the pot. Fluff up the rice with a fork and place half the rice on top of the fish . Spread the other half of the tomato mixture on top of the rice. Layer the remaining fish and boiled eggs (if using) on top. Sprinkle the rice on top. Scatter the onion on top of the rice. Cut the butter into little cubes and "tuck" it into the rice. Pour a cup of warm water over the biryani and cook in the oven at 180 degrees Celsius for 45 minutes to 1 hour or until the rice is tender. If the biryani dries up before the rice is cooked you can add a little more water