Heat up a dutch castiron on medium heat, once hot, add oil followed by serrano peppers. Saute for 30 seconds.
Add garlic and ginger. Saute for another 30 seconds.
Add onions and season with salt. Saute for 2-3 minutes or until they're translucent.
Add red & green bell peppers. Season with salt and saute for 4-5 minutes.
In the meantime, using a mortar and pestle or a coffee grinder grind your spices - cinnamon, cloves, peppercorns, cardamom, and fennel seeds.
Add the crushed spices, along with turmeric, coriander powder, and red chili powder. Cook for about 1 minute.
Then add tomato paste and cook for a minute.
Move the onions to the side and add butter in the middle of the pan.
Lower the heat. Once the butter melts, add the flour.
Cook the flour and butter for about 1-2 minutes to form a roux. This will help thicken the sauce.
Now, SLOWLY pour the milk little by little. Do not add all the cold milk all at once else your sauce will curdle.
Stir the milk into the sauce continuously.
Your sauce should be thick and well-seasoned. Let the sauce heat up for about 6-7 minutes.
In the meantime, cook the pasta.
Make sure the cheese is at room temperature to avoid curdling the sauce. Add 1 1/4 cups of Gruyere cheese and 1 1/4 cups of mild cheddar cheese to the sauce. Turn off the stove when adding the cheese.
The sauce should now be creamy and cheesy.
Check on the pasta. Once cooked, drain the pasta completely.
Add 12 ounces of cooked pasta to the sauce.