packages feed

horizon-gen-nix-0.4.0: src/Horizon/Gen/Nix.hs

{-# 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