instance ToHttpApiData Theme where
   toQueryParam theme = toQueryParam (themeType theme) <> "," <> toQueryParam (themeRed theme) <> "," <> toQueryParam (themeGreen theme) <> "," <> toQueryParam (themeBlue theme)
 
-type UseLightTheme = Maybe Bool
 type BlogId = FilePath
 
-htmlContainer :: (MonadIO m) => UseLightTheme -> Html a -> m (Html ())
-htmlContainer useLight contents = do
-  nav <- navigation useLight
+htmlContainer :: (MonadIO m) => Maybe Theme -> Html a -> m (Html ())
+htmlContainer theme contents = do
+  nav <- navigation theme
   pure $ void $ with doctypehtml_ [lang_ "en"] $ do
     head_ $ do
       title_ $ toHtml siteTitle
       meta_ [charset_ "utf8"]
       meta_ [name_ "description", content_ "width=device-width"]
-      link_ [rel_ "stylesheet", href_ $ getTheme useLight]
+      link_ [rel_ "stylesheet", href_ $ getTheme theme]
     body_ $ do
       nav
       div_ [role_ "main"] contents
 
-navigation :: (MonadIO m) => UseLightTheme -> m (Html ())
-navigation useLight = blogList useLight >>= pure . div_ [role_ "navigation"] . ul_ [class_ "blog-links"]
+navigation :: (MonadIO m) => Maybe Theme -> m (Html ())
+navigation theme = blogList theme >>= pure . div_ [role_ "navigation"] . ul_ [class_ "blog-links"]
 
-blogList :: (MonadIO m) => UseLightTheme -> m (Html ())
-blogList useLight = liftIO $ getDirectoryContents staticPath >>= pure . foldMap (blogListItem useLight) . filter (T.isSuffixOf markdownExtension) . fmap T.pack
+blogList :: (MonadIO m) => Maybe Theme -> m (Html ())
+blogList theme = liftIO $ getDirectoryContents staticPath >>= pure . foldMap (blogListItem theme) . filter (T.isSuffixOf markdownExtension) . fmap T.pack
 
-blogListItem :: UseLightTheme -> T.Text -> Html ()
-blogListItem useLight path = do
+blogListItem :: Maybe Theme -> T.Text -> Html ()
+blogListItem theme path = do
   case blogLink path of
     Nothing -> pure $ mempty
-    Just file -> li_ [class_ "blog-link"] $ a_ [href_ $ makeLink useLight file] $ toHtml file
+    Just file -> li_ [class_ "blog-link"] $ a_ [href_ $ makeLink theme file] $ toHtml file
 
-makeLink :: UseLightTheme -> T.Text -> T.Text
-makeLink useLight link = let lightThemeOn = useLightTheme useLight in if lightThemeOn then link <> "?light=true" else link <> "?light=false"
+makeLink :: Maybe Theme -> T.Text -> T.Text
+makeLink Nothing link = link
+makeLink (Just theme) link = link <> "?theme=" <> toQueryParam theme
 
 blogLink :: T.Text -> Maybe T.Text
 blogLink = T.stripSuffix markdownExtension
 markdownExtension :: T.Text
 markdownExtension = ".md"
 
-useLightTheme :: UseLightTheme -> Bool
-useLightTheme = fromMaybe False
-
-getTheme :: UseLightTheme -> T.Text
-getTheme theme = let lightThemeOn = useLightTheme theme in if lightThemeOn then "/style/light" else "/style/dark"
+getTheme :: Maybe Theme -> T.Text
+getTheme Nothing = "/style/dark"
+getTheme (Just theme)
+  | themeType theme == Dark = "/style/dark?red=" <> toQueryParam (themeRed theme) <> "&green=" <> toQueryParam (themeGreen theme) <> "&blue=" <> toQueryParam (themeBlue theme)
+  | themeType theme == Light = "/style/light?red=" <> toQueryParam (themeRed theme) <> "&green=" <> toQueryParam (themeGreen theme) <> "&blue=" <> toQueryParam (themeBlue theme)
 
 type Themes = "style" :> (DarkTheme :<|> LightTheme)
 type DarkTheme = "dark" :> QueryParam "red" Integer :> QueryParam "green" Integer :> QueryParam "blue" Integer :> Get '[CSS] C.Css
 type LightTheme = "light" :> QueryParam "red" Integer :> QueryParam "green" Integer :> QueryParam "blue" Integer :> Get '[CSS] C.Css
-type ThemeParam = QueryParam "light" Bool
+type ThemeParam = QueryParam "theme" Theme
 
 api :: Server Api
 api = page :<|> themes
 page :: Server Page
 page = mainPage :<|> blogPost
 
-mainPage :: UseLightTheme -> Handler (Html ())
+mainPage :: Maybe Theme -> Handler (Html ())
 mainPage = flip blogPost "index"
 
-blogPost :: UseLightTheme -> BlogId -> Handler (Html ())
-blogPost useLight = htmlContainer useLight . renderBlog <=< findBlogPost
+blogPost :: Maybe Theme -> BlogId -> Handler (Html ())
+blogPost theme = htmlContainer theme . renderBlog <=< findBlogPost
 
 findBlogPost :: BlogId -> Handler T.Text
 findBlogPost = liftIO . T.readFile . (<>) staticPath . flip (<>) (T.unpack markdownExtension)