Heat oil or ghee in a large, heavy-bottomed pot over medium heat. Add sliced onions and cook until they turn golden brown.
Add minced garlic and grated ginger. Saut for a couple of minutes until the raw smell disappears.
Add beef or mutton shank pieces and sear them until they are browned on all sides.
Add bay leaves, green cardamom pods, cloves, cinnamon stick, cumin seeds, and fennel seeds. Saut for a minute or two to release their flavors.
Sprinkle turmeric, coriander powder, red chili powder, and salt over the meat. Stir well to coat the meat evenly with the spices.
Pour in 6-8 cups of water, enough to submerge the meat completely. Bring the mixture to a boil, then reduce the heat to low, cover the pot, and simmer for 2.5 to 3 hours. The meat should become tender and fall off the bone.
Slowly add the roux to the simmering Nihari, stirring constantly to avoid lumps. Let it simmer for an additional 15-20 minutes until the gravy thickens to your desired consistency.
Taste and adjust the salt and spice levels if necessary.
Serve hot, garnished with fresh coriander leaves, sliced ginger, green chilies, and lemon wedges. Nihari pairs perfectly with naan or steamed rice.