packages feed

hwm-0.4.0: src/HWM/Core/Options.hs

{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NoImplicitPrelude #-}

module HWM.Core.Options
  ( Options (..),
    defaultOptions,
    askOptions,
    whenCI,
    isCI,
    whenDebug,
  )
where

import HWM.Core.Has (Has (..))
import Relude

askOptions :: (MonadReader env m, Has env Options) => m Options
askOptions = asks obtain

data Options = Options
  { optionsHie :: FilePath,
    optionsHwm :: FilePath,
    optionsStack :: FilePath,
    optionsQuiet :: Bool,
    optionsCabal :: FilePath,
    optionsNix :: FilePath,
    optionDebug :: Bool
  }

defaultOptions :: Options
defaultOptions =
  Options
    { optionsHwm = "./hwm.yaml",
      optionsHie = "./hie.yaml",
      optionsStack = "./stack.yaml",
      optionsQuiet = False,
      optionsCabal = "./cabal.project",
      optionsNix = "./flake.nix",
      optionDebug = False
    }

isCI :: (MonadIO m) => m Bool
isCI = liftIO $ isJust <$> lookupEnv "CI"

whenCI :: (MonadIO m) => m () -> m ()
whenCI action = do
  ci <- isCI
  when ci action

whenDebug :: (MonadIO m) => m () -> m ()
whenDebug action = do
  debug <- liftIO $ (Just "true" ==) <$> lookupEnv "DEBUG"
  when debug action