In a medium saucepan with a lid, melt butter over medium low heat. Add onion and cardamom, and cook, stirring frequently until the onion is translucent, about 5 minutes.
Add rice and stir until grains are coated with butter about 1 minute.
Add cinnamon stick, coconut milk, 1 ¾ cups water, salt and sugar. Stir well to combine. Bring to a boil, and immediately reduce heat to lowest setting.
Cook covered for 25 minutes. Remove from heat, and let stand 5 minutes. Fluff rice with a fork and serve garnished with shaved coconut.