Heat oil or ghee in a large pot over medium heat.
Add whole spices and let them sizzle for 30 seconds to release their aroma.
Throw in the sliced onions and cook until golden brown (yes, patience is required here).
Add the ginger-garlic paste and sauté until the raw smell disappears.
Stir in chopped tomatoes, salt, and spices. Cook until the tomatoes soften.
Mix in the chicken and let it brown for 5-7 minutes.
Pour in yogurt and cook for another 2 minutes until well combined.
Add soaked basmati rice and gently stir to coat with the masala.
Pour in water or chicken broth, cover the pot, and cook on low heat for 15 minutes.
Turn off the heat and let it rest for 10 minutes before fluffing with a fork.
Garnish with fresh cilantro and lemon wedges.
Serve hot with raita, chutney, or just devour as is.