{-# LANGUAGE NoImplicitPrelude #-} module Stack.Options.NixParser ( nixOptsParser ) where import qualified Data.Text as T import Options.Applicative ( Parser, completer, help, long, metavar, option, str ) import Options.Applicative.Args ( argsOption ) import Options.Applicative.Builder.Extra ( fileExtCompleter, firstBoolFlagsFalse , firstBoolFlagsNoDefault, optionalFirst ) import Stack.Nix ( nixCmdName ) import Stack.Options.Utils ( hideMods ) import Stack.Prelude import Stack.Types.Nix ( NixOptsMonoid (..) ) nixOptsParser :: Bool -> Parser NixOptsMonoid nixOptsParser :: Bool -> Parser NixOptsMonoid nixOptsParser Bool hide0 = NixOptsMonoid -> NixOptsMonoid overrideActivation forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> ( First Bool -> First Bool -> First [Text] -> First String -> First [Text] -> First [Text] -> FirstFalse -> NixOptsMonoid NixOptsMonoid forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> String -> String -> Mod FlagFields (Maybe Bool) -> Parser (First Bool) firstBoolFlagsNoDefault String nixCmdName String "use of a Nix-shell. Implies 'system-ghc: true'." forall {f :: * -> *} {a}. Mod f a hide forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> String -> String -> Mod FlagFields (Maybe Bool) -> Parser (First Bool) firstBoolFlagsNoDefault String "nix-pure" String "use of a pure Nix-shell. Implies '--nix' and 'system-ghc: true'." forall {f :: * -> *} {a}. Mod f a hide forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> forall (f :: * -> *) a. Alternative f => f a -> f (First a) optionalFirst (Mod OptionFields [String] -> Parser [Text] textArgsOption ( forall (f :: * -> *) a. HasName f => String -> Mod f a long String "nix-packages" forall a. Semigroup a => a -> a -> a <> forall (f :: * -> *) a. HasMetavar f => String -> Mod f a metavar String "NAMES" forall a. Semigroup a => a -> a -> a <> forall (f :: * -> *) a. String -> Mod f a help String "List of packages that should be available in the nix-shell \ \(space separated)." forall a. Semigroup a => a -> a -> a <> forall {f :: * -> *} {a}. Mod f a hide )) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> forall (f :: * -> *) a. Alternative f => f a -> f (First a) optionalFirst (forall a. ReadM a -> Mod OptionFields a -> Parser a option forall s. IsString s => ReadM s str ( forall (f :: * -> *) a. HasName f => String -> Mod f a long String "nix-shell-file" forall a. Semigroup a => a -> a -> a <> forall (f :: * -> *) a. HasMetavar f => String -> Mod f a metavar String "FILE" forall a. Semigroup a => a -> a -> a <> forall (f :: * -> *) a. HasCompleter f => Completer -> Mod f a completer ([String] -> Completer fileExtCompleter [String ".nix"]) forall a. Semigroup a => a -> a -> a <> forall (f :: * -> *) a. String -> Mod f a help String "Nix file to be used to launch a nix-shell (for regular Nix \ \users)." forall a. Semigroup a => a -> a -> a <> forall {f :: * -> *} {a}. Mod f a hide )) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> forall (f :: * -> *) a. Alternative f => f a -> f (First a) optionalFirst (Mod OptionFields [String] -> Parser [Text] textArgsOption ( forall (f :: * -> *) a. HasName f => String -> Mod f a long String "nix-shell-options" forall a. Semigroup a => a -> a -> a <> forall (f :: * -> *) a. HasMetavar f => String -> Mod f a metavar String "OPTIONS" forall a. Semigroup a => a -> a -> a <> forall (f :: * -> *) a. String -> Mod f a help String "Additional options passed to nix-shell." forall a. Semigroup a => a -> a -> a <> forall {f :: * -> *} {a}. Mod f a hide )) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> forall (f :: * -> *) a. Alternative f => f a -> f (First a) optionalFirst (Mod OptionFields [String] -> Parser [Text] textArgsOption ( forall (f :: * -> *) a. HasName f => String -> Mod f a long String "nix-path" forall a. Semigroup a => a -> a -> a <> forall (f :: * -> *) a. HasMetavar f => String -> Mod f a metavar String "PATH_OPTIONS" forall a. Semigroup a => a -> a -> a <> forall (f :: * -> *) a. String -> Mod f a help String "Additional options to override NIX_PATH parts (notably \ \'nixpkgs')." forall a. Semigroup a => a -> a -> a <> forall {f :: * -> *} {a}. Mod f a hide )) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> String -> String -> Mod FlagFields FirstFalse -> Parser FirstFalse firstBoolFlagsFalse String "nix-add-gc-roots" String "addition of packages to the nix GC roots so nix-collect-garbage does \ \not remove them." forall {f :: * -> *} {a}. Mod f a hide ) where hide :: Mod f a hide = forall (f :: * -> *) a. Bool -> Mod f a hideMods Bool hide0 overrideActivation :: NixOptsMonoid -> NixOptsMonoid overrideActivation NixOptsMonoid m = if forall a. a -> First a -> a fromFirst Bool False (NixOptsMonoid -> First Bool nixMonoidPureShell NixOptsMonoid m) then NixOptsMonoid m { nixMonoidEnable :: First Bool nixMonoidEnable = (forall a. Maybe a -> First a First forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. a -> Maybe a Just forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. a -> First a -> a fromFirst Bool True) (NixOptsMonoid -> First Bool nixMonoidEnable NixOptsMonoid m) } else NixOptsMonoid m textArgsOption :: Mod OptionFields [String] -> Parser [Text] textArgsOption = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (forall a b. (a -> b) -> [a] -> [b] map String -> Text T.pack) forall b c a. (b -> c) -> (a -> b) -> a -> c . Mod OptionFields [String] -> Parser [String] argsOption