{-# LANGUAGE OverloadedStrings #-} module Config ( Config(..), getConfig, makeOpenSearch ) where import Data.Maybe (fromMaybe) import Data.String (fromString) import Data.Text (Text) import Network.Wai.Handler.Warp (HostPreference) import System.Environment (lookupEnv) data Config = Config { confPort :: Int, confHost :: HostPreference, confBaseUrl :: Text, confFavicon :: Text } deriving (Show, Eq) getConfig :: IO Config getConfig = do port <- (read . fromMaybe "20546") <$> lookupEnv "PORT" host <- (fromString . fromMaybe "*6") <$> lookupEnv "BIND_ADDR" baseUrl <- (fromString . fromMaybe "http://localhost:20546") <$> lookupEnv "BASE_URL" favicon <- (fromString . fromMaybe "https://69owo.de/favicon.ico") <$> lookupEnv "FAVICON_URL" return $ Config port host baseUrl favicon makeOpenSearch :: Config -> Maybe Text -> Text makeOpenSearch cfg defBang = " " xmlns:moz=\"http://www.mozilla.org/2006/browser/search/\">\n" <> " " <> name <> "\n" <> " Handles search bangs (mostly) locally.\n" <> " UTF-8\n" <> " " <> confFavicon cfg <> "\n" <> " searchUrl <> "\"/>\n" <> "\n" where (searchUrl, name) = case defBang of Nothing -> (confBaseUrl cfg <> "/#{searchTerms}", "FastBangs") Just b -> (confBaseUrl cfg <> "/#" <> b <> "#{searchTerms}", "FastBangs (" <> b <> ")")