module Azubi( azubiMain
, AzubiConfig
, azubiConfig
, (&)
, (!)
, (&?&)
, (!?&)
, (&?!)
, (!?!)
, submodule
, requires
, Gentoo(..)
, installed
, exists
, contains
, File(..)
, Repository(..)
, GitOptions(..)
, azubiLogo
, run
) where
import Options
import Azubi.Core.Syntax
import Azubi.Core.Command
import Azubi.Core.Provision
import Azubi.Systems.Gentoo
import Azubi.Render.BashScript
import Azubi.Render.Warez
import Azubi.Commands.Install
import Azubi.Commands.Existance
import Azubi.Commands.File
import Azubi.Commands.Git
import Azubi.Commands.Run
type AzubiConfig = [Command]
azubiMain :: [Command] -> IO ()
azubiMain config =
do
renderContext <- runCommand extractArguments
azubiMainExecute renderContext config
azubiMainExecute :: RenderContext -> [Command] -> IO()
azubiMainExecute (BashScript user output) commands = do
putStr $ unlines bashScriptHeader
writeFile output $ bashScriptExecuter user commands
where
bashScriptHeader = [ "Generating Bashscript"
, "---------------------"
, "output : " ++ output
, "user mode : " ++ (userMode user)
]
userMode (User None) = "login user with no root command strategy"
userMode (User Su) = "login user with su as root command strategy"
userMode (User Sudo) = "login user with sudo as root command strategy"
userMode Root = "root"
azubiMainExecute render _ = putStrLn $ (show render) ++ "not supported yet"
extractArguments :: AzubiOptions -> [String] -> IO RenderContext
extractArguments opts args =
return (BashScript (userMode $ optUser opts) (optOutput opts))
where
userMode RootConfiguration = Root
userMode UserNoneConfiguration = User None
userMode UserSuConfiguration = User Su
userMode UserSudoConfiguration = User Sudo
data AzubiOptions = AzubiOptions { optOutput :: String
, optUser :: UserConfiguration
}
instance Options AzubiOptions where
defineOptions = pure AzubiOptions
<*> simpleOption "output" "./azubi.sh"
"Outfile of the scritpt"
<*> defineOption (optionType_enum "User Type") userConfiguration
data UserConfiguration = RootConfiguration
| UserNoneConfiguration
| UserSuConfiguration
| UserSudoConfiguration
deriving (Bounded, Enum)
instance Show UserConfiguration where
show RootConfiguration = "root"
show UserNoneConfiguration = "user"
show UserSudoConfiguration = "sudoUser"
show UserSuConfiguration = "suUser"
userConfiguration :: Option UserConfiguration -> Option UserConfiguration
userConfiguration opt =
opt{ optionLongFlags = ["user"]
, optionDefault = UserNoneConfiguration
, optionDescription =
unwords $ [ "User type the commands should be run in."
, "For example 'UserSu' will run every command"
, "as normal login user, but the superuser commands via"
, "su -c 'command' so you have to enter the"
, "superuser password for every install command for example."
, "possible options are:"
]
++ (map show [RootConfiguration ..])
}