module Cachix.Client
( main
) where
import Data.Version (showVersion)
import Paths_cachix (version)
import Protolude
import Network.HTTP.Simple ( setRequestHeader )
import Network.HTTP.Client.TLS ( newTlsManagerWith, tlsManagerSettings )
import Network.HTTP.Client ( managerResponseTimeout, managerModifyRequest
, responseTimeoutNone, ManagerSettings)
import Servant.Client ( mkClientEnv)
import Cachix.Client.OptionsParser ( CachixCommand(..), CachixOptions(..), getOpts )
import Cachix.Client.Config ( readConfig )
import Cachix.Client.Commands as Commands
import Cachix.Client.URI ( getBaseUrl)
main :: IO ()
main = do
(CachixOptions{..}, command) <- getOpts
config <- readConfig
manager <- newTlsManagerWith customManagerSettings
let env = mkClientEnv manager $ getBaseUrl host
case command of
AuthToken token -> Commands.authtoken env config token
Create name -> Commands.create env config name
Push name paths watchStore -> Commands.push env config name paths watchStore
Use name shouldEchoNixOS -> Commands.use env config name shouldEchoNixOS
Version -> putText cachixVersion
customManagerSettings :: ManagerSettings
customManagerSettings = tlsManagerSettings
{ managerResponseTimeout = responseTimeoutNone
, managerModifyRequest = return . setRequestHeader "User-Agent" [toS cachixVersion]
}
cachixVersion :: Text
cachixVersion = "cachix " <> toS (showVersion version)