{-# LANGUAGE MultiParamTypeClasses #-} module Breve.Common where import Paths_breve (getDataFileName) import Control.Applicative import Control.Monad.IO.Class (liftIO) import Text.Printf (printf) import System.Environment (lookupEnv) import Web.Simple.Templates import Network.Wai.Handler.Warp data AppSettings = AppSettings { } serverSettings :: IO (String, Settings) serverSettings = do port <- maybe 3000 read <$> lookupEnv "PORT" host <- maybe "localhost" id <$> lookupEnv "HOSTNAME" let opts = setPort port defaultSettings url = if port == 80 then printf "http://%s/" host else printf "http://%s:%d/" host port return (url, opts) newAppSettings :: IO AppSettings newAppSettings = return AppSettings instance HasTemplates IO AppSettings where defaultLayout = do main <- liftIO (getDataFileName "layouts/main.html") Just <$> getTemplate main