You need a lot of chopped onions for this. Do yourself a favour and use a food processor if you have one. Peel and half the onions. Cut each half into six pieces. Fill your food processor about 2/3 full and pulse around 5-8 times. You should have diced onions. Repeat until you have chopped all the onions.
As long as your food processor is out use it to chop the tomatoes (if using fresh). Easy.
Heat the oil in a pot large enough to hold all the ingredients.
Add the oil and heat over medium heat.
Once the oil starts to shimmer add the cardamom, black peppercorns, cloves, cinnamon and optional Indian bay leaf.
Let the spices bubble for about 20 seconds and then add the onions.
This takes some time and attention. Cook the onions over medium heat. Stir every minute of so. You want them brown. Nice and brown. Not tan. Brown. Think French onion soup. This is going to take you around 30-40 minutes and maybe more. But you are doing it once. For 8 restaurant portions of curry. So it's under 5 minutes a curry. Totally worth it.
While the onions cook do the rest of your prep. Make sure the tomatoes are chopped. Cut your green chilies in half and seed them (use a spoon).
Add the turmeric, cumin, coriander and kashmiri chili powder in a bowl. Add about a 1/2 cup of water and stir to make a slurry. You may need to add a bit more water. Doesn't matter.
Once the onions are this nice creamy brown mess add the garlic ginger paste. Stir to combine and continue to cook for about two minutes.
Add the powdered spice slurry and the salt. Cook another 3 minutes.
Add the chopped tomatoes, green chilies and cilantro. Simmer until the tomatoes are broken down. This takes about 10 minutes. The oil may have separated at this point. If it did, do NOT remove it. It's pure flavour.
Add a cup of water. Puree the hotel style curry gravy, whole spices and all. Yes. Whole spices get pureed. Use a blender. If it's too thick to puree add a bit more water.
You should now have about 8 cups of magic curry gravy to use in all sorts of curries.
Notes
This recipe makes enough for 6-8 restaurant sized curries. Make it and freeze it in one cup portions (237ml). That way, you can pull it out whenever you feel like making dinner.