Mix all the beans, wash, and soak them in water for at least 7 hours or overnight.
Put all the soaked beans in a pressure cooker with water and some salt. Cook on a medium flame for 7-8 whistles or until the beans get cooked without losing their shape.
Allow the pressure of the pressure cooker to get released naturally and then open the lid. Mash some beans by pressing them with the ladle. Keep the cooked beans aside.
Roughly chop onion, garlic, and ginger. Put them in a grinding jar and make a paste. Transfer the onion paste to a bowl and keep it aside. In the same grinding jar put roughly chopped tomato and green chilies, make a paste, and keep it in a separate bowl.
Heat oil in a cooking pot. Add bay leaf, cinnamon stick, peppercorns, cloves, black cardamom, and cumin seeds. Saute for a few seconds or until the spices become fragrant.
Add the onion paste and cook until it becomes golden brown. Keep stirring in between. Add 1-2 tablespoons of water every time the paste starts sticking to the bottom of the pot and cook further.
Add turmeric powder, red chili powder, coriander powder, and roughly crushed kasoori methi. Saute for a few seconds.
Add tomato paste and the remaining salt. Cook for around 10-12 minutes i.e. until the tomatoes get nicely cooked and change their color to a brighter red.
Finally, add the cooked beans along with the water in which they were cooked. Cook on a medium flame for another 5-6 minutes.
Add garam masala, chopped cilantro, and fresh lime juice. Mix everything.
Serve hot with roti or rice.