Heat coconut oil in a 12-inch / 30cm heavy-bottomed skillet over medium heat. Add mustard seeds and curry leaves, cook 30 seconds until the seeds pop and the leaves crisp up.
Add the onion and cook 5 to 6 minutes, stirring often, until soft and golden at the edges.
Stir in garlic and ginger, cook 1 minute until fragrant.
Add turmeric, cumin, coriander, and chili powder. Cook 30 seconds, stirring constantly, until fragrant. Don't let the spices burn or they turn bitter.
Add the chopped tomatoes and cook 4 to 5 minutes, breaking them down with the back of a spoon into a chunky sauce.
Pour in the coconut milk and water or stock. Stir well, bring to a gentle simmer, and season with 1 tsp salt.
Simmer uncovered for 8 to 10 minutes so the broth reduces slightly and the flavors come together.
Lower the fish chunks into the broth in a single layer and spoon the broth over the top. Cover and simmer gently for 6 to 8 minutes, until the fish is opaque and reaches 145 F / 63 C, flaking easily with a fork. Shake the pan occasionally instead of stirring so the pieces stay whole.
Remove from heat and stir in the lime juice.
Ladle the curry over rice, scatter with cilantro, and serve hot.