In a dry pan over a low-medium heat, roast the coriander, cumin and fennel seeds and black peppercorns for 1-2 minutes, stirring regularly, until they begin to be really fragrant, then pour them into a bowl. Add the oil to the pan, and cook the curry leaves and dried chillies for 2-3 minutes, stirring often. Remove from the heat and when cool, blitz in a spice grinder or mini food processor until fine – you can blitz it in batches if you need to. Stir in the turmeric.
In a medium-sized saucepan or wok, heat the oil over a medium heat and fry the onion for 8-10 minutes until soft. Add the curry leaves and after 30 seconds, when they are bright green, stir in the garlic and ginger.
After about 30 seconds, when the garlic is beginning to turn golden, add the tomatoes and tamarind and cook for 3-4 minutes, stirring occasionally.
When the tomatoes have cooked down a little, add the turmeric, curry powder and the salt. Slide the fish into the pan, and pour in the water. Allow to come to a gentle boil, then turn the heat down to a simmer, cover the pan with a lid and cook for 10 minutes.
Stir in the coconut milk and allow to come back to a simmer, then cook for a further 10 minutes or so, until the fish is cooked through. You can test it by gently flaking a piece with a fork: it should be opaque all the way through, and flake easily.
To make the temper, heat the oil in a small frying pan over a medium-high heat. When the oil is shimmering and hot, fry the sliced onion for 5-6 minutes, shaking the pan occasionally, until the onion is beginning to turn golden. Add the curry leaves and after about 30 seconds, when they are crisp, remove from the heat.
Serve the fish with the temper, and all its oil, spooned over the top. Squeeze over the lime.