diff --git a/src/QBar/Core.hs b/src/QBar/Core.hs
index fd0ae51f2dca4f837320c5432be3789d8522693f..db2155d95de1aa978e10c8f559669e08a4a6edff 100644
--- a/src/QBar/Core.hs
+++ b/src/QBar/Core.hs
@@ -85,7 +85,38 @@ data Bar = Bar {
 data BarUpdateChannel = BarUpdateChannel (IO ())
 type BarUpdateEvent = Event.Event
 
+newtype BlockText = BlockText [BlockTextSegment]
+instance Semigroup BlockText where
+  (BlockText a) <> (BlockText b) = BlockText (a <> b)
+instance Monoid BlockText where
+  mempty = BlockText []
 
+data BlockTextSegment = BlockTextSegment {
+    active :: Bool,
+    importance :: Importance,
+    text :: T.Text
+  }
+  | PangoTextSegment T.Text
+
+type Importance = Float
+
+mkText :: Bool -> Importance -> T.Text -> BlockText
+mkText active importance text = BlockText [BlockTextSegment { text, active, importance }]
+
+activeImportantText :: Importance -> T.Text -> BlockText
+activeImportantText = mkText True
+
+importantText :: Importance -> T.Text -> BlockText
+importantText = mkText False
+
+activeText :: T.Text -> BlockText
+activeText = mkText True 0
+
+normalText :: T.Text -> BlockText
+normalText = mkText False 0
+
+pangoText :: T.Text -> BlockText
+pangoText pango = BlockText [PangoTextSegment pango]
 
 defaultColor :: T.Text
 defaultColor = "#969896"