packages feed

horizon-gen-nix-0.2: 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                 (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