{-# LANGUAGE RecordWildCards #-}
module Horizon.Gen.Nix (
main
, horizonGenNix
, makeMakePackageSet
, makeOverlay
) where
import Dhall (auto, inputFile)
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),
fromOverlay, packages)
import Options.Applicative (execParser)
import Path (toFilePath)
import Path.Dhall ()
makeMakePackageSet :: PackageSetExportSettings -> IO ()
makeMakePackageSet (MkPackageSetExportSettings d f xs) = do
writeHaskellPackages d (packages xs)
writeMakePackageSet d f xs
makeOverlay :: OverlayExportSettings -> IO ()
makeOverlay (MkOverlayExportSettings d f xs) = do
writeHaskellPackages d (fromOverlay 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