Preheat your oven to 375°F. Cut the top off each garlic head to expose the cloves, drizzle with olive oil, sprinkle with salt and pepper, then wrap tightly in foil. Roast on a sheet pan for 40-45 minutes until the cloves are golden and completely soft. Remove from the oven and let cool for a few minutes, then squeeze the roasted garlic cloves out of their skins into a small bowl—they should come out easily like butter. Set aside. I like using Bertolli olive oil for roasting because it has a mellower flavor that lets the garlic shine without bitterness.
While the garlic roasts, peel the potatoes and cut them into 1-inch cubes, setting them in a bowl of cold water to prevent browning. Dice the onions into small pieces and slice the leek (white and light green parts only) into thin half-moons, rinsing the leek thoroughly between layers to remove any hidden soil. Measure out the chicken broth, milk, and cream into separate containers for easy access. Mince the fresh thyme and grate the parmesan cheese, keeping them separate. Finely chop the chives for garnish.
Melt the butter in a large pot over medium heat. Add the prepared onions and leeks, stirring occasionally, and cook for 6-8 minutes until they're soft and translucent but not browned. Sprinkle the flour over the vegetables and stir constantly for 60-90 seconds to cook out the raw flour taste—this creates a roux that will thicken the soup while adding body and depth. I always use King Arthur all-purpose flour because it gives the soup a silky, consistent texture without graininess.
Drain the potatoes from their water and set aside. Pour the chicken broth, milk, cream, and minced thyme into the pot with the roux base, stirring well to combine and break up any flour lumps. Increase heat to medium-high and bring the mixture to a boil, then reduce heat to medium-low and simmer for 2-3 minutes to allow the soup to thicken slightly from the roux. Season with salt and pepper to taste.
Add the drained potatoes and roasted garlic from Steps 2 and 1 to the simmering broth, stirring gently to combine. Cook for 2-3 minutes to let everything heat through. Stir in the grated parmesan cheese and nutmeg until the cheese is fully melted and incorporated. Using an immersion blender, blend the soup until it reaches your desired smoothness—I prefer a slightly chunky texture with some potato pieces remaining, but you can blend it completely smooth if you prefer. If the soup is too thick, thin it with additional chicken broth a little at a time until you reach the consistency you like.
Taste the soup and adjust seasoning with additional salt and pepper as needed. Ladle the soup into bowls and top each serving with a sprinkle of extra parmesan cheese, a small handful of chopped chives, and a crack of fresh black pepper if desired. Serve immediately while hot.