xbattbar-0.1: src/Main.hs
module Main (main) where
import System.Environment
import System.Console.GetOpt
import Prelude hiding (Left, Right)
import XBattBar.Types
import XBattBar.Core (start)
defaultOptions :: Options
defaultOptions = Options {
onTop = False,
thickness = 2,
interval = 5,
chargeColorAC = "green",
dischargeColorAC = "olive drab",
chargeColorBat = "blue",
dischargeColorBat = "red",
position = Bottom
}
options :: [ OptDescr (Options -> Options) ]
options =
[ Option "a" [] (NoArg (\opts -> opts { onTop = True }))
"Always on top",
Option "t" [] (ReqArg (\x s -> s { thickness = read x }) "PX")
"Thickness",
Option "p" [] (ReqArg (\x s -> s { interval = read x }) "PX")
"Polling interval",
Option "I" [] (ReqArg (\x s -> s { chargeColorAC = x }) "PX")
"Charge color when on AC",
Option "O" [] (ReqArg (\x s -> s { dischargeColorAC = x }) "PX")
"Discharge color when on AC",
Option "o" [] (ReqArg (\x s -> s { dischargeColorBat = x }) "PX")
"Charge color when on battery",
Option "i" [] (ReqArg (\x s -> s { chargeColorBat = x }) "PX")
"Discharge color when on battery",
Option "h" [] (NoArg (usage))
"Print help message"
]
nonoptions :: Options -> [String] -> Options
nonoptions opts [] = opts
nonoptions opts ["top"] = opts { position = Top }
nonoptions opts ["bottom"] = opts { position = Bottom }
nonoptions opts ["left"] = opts { position = Left }
nonoptions opts ["right"] = opts { position = Right }
nonoptions _ _ = usage
usage = error $ "usage: xbattbar [-a] [-h|v] [-p sec] [-t thickness] " ++
"[-I color] [-O color] [-i color] [-o color] " ++
"[ top | bottom | left | right ]"
main = do
args <- getArgs
let (actions, nonOptions, errors) = getOpt RequireOrder options args
let opts = foldl (flip id) defaultOptions actions
start $ nonoptions opts nonOptions