{-# LANGUAGE OverloadedStrings #-} module Config ( getPort, getHost, getBaseUrl, makeOpenSearch ) where import Data.Maybe (fromMaybe) import Data.String (fromString, IsString) import Network.Wai.Handler.Warp (HostPreference) import System.Environment (lookupEnv) getPort :: IO Int getPort = (read . fromMaybe "20546") <$> lookupEnv "PORT" -- currently, "*" seems to bind only to ipv4 while "*6" binds to both getHost :: IO HostPreference getHost = (fromString . fromMaybe "*6") <$> lookupEnv "BIND_ADDR" getBaseUrl :: IsString s => IO s getBaseUrl = (fromString . fromMaybe "http://localhost:20546") <$> lookupEnv "BASE_URL" faviconUrl :: IsString s => IO s faviconUrl = (fromString . fromMaybe "https://69owo.de/favicon.ico") <$> lookupEnv "FAVICON_URL" makeOpenSearch :: (IsString s, Semigroup s) => s -> IO s makeOpenSearch searchUrl = do favicon <- faviconUrl return $ " " xmlns:moz=\"http://www.mozilla.org/2006/browser/search/\">\n" <> " Fastbangs\n" <> " Handles search bangs (mostly) locally.\n" <> " UTF-8\n" <> " " <> favicon <> "\n" <> " searchUrl <> "\"/>\n" <> " \n" <> " \n" <> "\n"