Heat the butter or olive oil in a large pot over medium heat.
Add the finely chopped onion and cook until softened. Stir in the minced garlic, diced celery, and diced carrots, and cook for a few more minutes.
Sprinkle in the flour and stir well to coat the vegetables. Cook for 1 minute.
Slowly add the milk and chicken broth, stirring until smooth.
Add the diced potatoes, bay leaf, salt, dried thyme, marjoram, black pepper, and nutmeg if using.
Bring to a gentle simmer and cook for 20 to 25 minutes, or until the potatoes are very tender.
Remove the bay leaf. Blend the soup with an immersion blender until smooth and creamy, or blend only part of it for a chunkier texture.
Taste and adjust salt and pepper as needed.
Serve hot with sour cream, shredded cheese, bacon bits, and chopped green onions.