Chop up the shallots and carrots, mince the garlic and ginger. Rinse and pick over the lentils.
In a large pot, heat the olive oil over medium to high heat. Add the shallots and carrots and cook for 1-2 minutes. Then stir in the garlic, ginger, curry powder, garam masala, cayenne, turmeric, and a big sprinkle of salt and pepper. Stir and cook for another couple of minutes until everything begins to soften.
Turn the heat down to medium/low and add the lentils and stock. Cover and cook on low for 18-20 minutes until the lentils are very tender. Use an immersion blender or you can do this in batches in a blender and puree the soup (it can be super smooth or leave a little chunky, up to you). Taste and add salt and pepper as needed. When serving, sprinkle on a little chopped cilantro and squeeze a little lime juice over the top.