module IO.Config.Markdown where import ClassyPrelude import Data.Ini.Config import IO.Config.Parser (noEmpty, parseText) data Config = Config { titleOutput :: Text , taskOutput :: Text , descriptionOutput :: Text , dueOutput :: Text , subtaskOutput :: Text } defaultConfig :: Config defaultConfig = Config { titleOutput = "##" , taskOutput = "-" , descriptionOutput = " >" , dueOutput = " @" , subtaskOutput = " *" } parser :: IniParser Config parser = fromMaybe defaultConfig <$> sectionMb "markdown" (do titleOutputCf <- fromMaybe (titleOutput defaultConfig) . (noEmpty . parseText =<<) <$> fieldMb "title" taskOutputCf <- fromMaybe (taskOutput defaultConfig) . (noEmpty . parseText =<<) <$> fieldMb "task" descriptionOutputCf <- fromMaybe (descriptionOutput defaultConfig) . (noEmpty . parseText =<<) <$> fieldMb "summary" dueOutputCf <- fromMaybe (dueOutput defaultConfig) . (noEmpty . parseText =<<) <$> fieldMb "due" subtaskOutputCf <- fromMaybe (subtaskOutput defaultConfig) . (noEmpty . parseText =<<) <$> fieldMb "subtask" pure Config { titleOutput = titleOutputCf , taskOutput = taskOutputCf , descriptionOutput = descriptionOutputCf , dueOutput = dueOutputCf , subtaskOutput = subtaskOutputCf })