packages feed

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