{-# LANGUAGE RecordWildCards #-}
module Horizon.Gen.Nix (
main
, horizonGenNix
, makeMakePackageSet
, makeOverlay
) where
import qualified Data.Text as T (unpack)
import Dhall (auto, inputFile)
import Distribution.Parsec (eitherParsec)
import Horizon.Gen.Nix.Options (HorizonOptions (MkHorizonOptions),
fromInputFile, horizonGenNixOptsInfo,
optInputFile)
import Horizon.Gen.Nix.Writers (writeHaskellPackages,
writeMakePackageSet, writeOverlay)
import Horizon.Spec (HorizonExport (MakeOverlay, MakePackageSet),
OverlayExportSettings (MkOverlayExportSettings),
PackageSetExportSettings (MkPackageSetExportSettings),
compiler, fromCompiler, fromOverlay,
packages)
import Options.Applicative (execParser)
import Path (toFilePath)
import Path.Dhall ()
makeMakePackageSet :: PackageSetExportSettings -> IO ()
makeMakePackageSet (MkPackageSetExportSettings d f xs) = do
case eitherParsec (T.unpack $ fromCompiler $ compiler xs) of
Left e -> putStrLn e
Right x -> do
writeHaskellPackages d x (packages xs)
writeMakePackageSet d f xs
makeOverlay :: OverlayExportSettings -> IO ()
makeOverlay (MkOverlayExportSettings d f xs) = let
xs' = fromOverlay xs
in
case eitherParsec (T.unpack $ fromCompiler $ compiler xs') of
Left e -> putStrLn e
Right x -> do
writeHaskellPackages d x (packages xs')
writeOverlay d f xs
processHorizonExport :: HorizonExport -> IO ()
processHorizonExport (MakePackageSet settings) = makeMakePackageSet settings
processHorizonExport (MakeOverlay settings) = makeOverlay settings
horizonGenNix :: HorizonOptions -> IO ()
horizonGenNix MkHorizonOptions{..} = do
let fp = toFilePath . fromInputFile $ optInputFile
x <- inputFile @HorizonExport auto fp
processHorizonExport x
main :: IO ()
main = do
x <- execParser horizonGenNixOptsInfo
horizonGenNix x