{-# LANGUAGE RecordWildCards #-} module Horizon.Gen.Nix ( main , horizonGenNix , makeMakePackageSet , makeOverlay ) where import Dhall (auto, inputFile) import Horizon.Gen.Nix.Options (HorizonCommand (MakePackageSetCommand, OverlayCommand), HorizonOptions (MkHorizonOptions), MakePackageSetOptions, OverlayOptions, fromInputFile, horizonGenNixOptsInfo, optHorizonCommand, optInputFile, optOverlayFile, optPackageSetFile, optPackagesDirectory) import Horizon.Gen.Nix.Types.PackagesDirectory (PackagesDirectory) import Horizon.Gen.Nix.Writers (writeHaskellPackages, writeMakePackageSet, writeOverlay) import Horizon.Spec (Overlay, PackageSet, fromOverlay, packages) import Options.Applicative (execParser) import Path (toFilePath) import Path.Dhall () makeMakePackageSet :: MakePackageSetOptions -> PackagesDirectory -> PackageSet -> IO () makeMakePackageSet opts d xs = do writeHaskellPackages d (packages xs) writeMakePackageSet d (optPackageSetFile opts) xs makeOverlay :: OverlayOptions -> PackagesDirectory -> Overlay -> IO () makeOverlay opts d xs = do writeHaskellPackages d (fromOverlay xs) writeOverlay d (optOverlayFile opts) xs horizonGenNix :: HorizonOptions -> IO () horizonGenNix MkHorizonOptions{..} = let fp = toFilePath . fromInputFile $ optInputFile in case optHorizonCommand of MakePackageSetCommand opts -> do x <- inputFile @PackageSet auto fp makeMakePackageSet opts optPackagesDirectory x OverlayCommand opts -> do x <- inputFile @Overlay auto fp makeOverlay opts optPackagesDirectory x main :: IO () main = do x <- execParser horizonGenNixOptsInfo horizonGenNix x