{-# LANGUAGE OverloadedStrings #-}
module Main where
import Common
import Data.Text (pack, strip, unpack)
import qualified Data.Text.IO as Text
import Turtle
import System.Environment (getArgs)
import Data.Maybe
main :: IO ()
main = sh $ do
icons <- liftIO getArgs
liftIO . Text.putStrLn =<< cpuUsage icons
maybe (return ExitSuccess) handleButton =<< currentButton
cpuUsage :: [String] -> Shell Text
cpuUsage icons = format' <$> idleCpu
where format' idle =
let usage = pack $ formatFloatN (100 - idle) 0
icon = fromMaybe "" $ getIcon icons
in icon <> usage <> "%"
getIcon :: [String] -> Maybe Text
getIcon icons = case icons of
icon : _ -> Just $ pack icon
_ -> Nothing
handleButton :: MonadIO io => Button -> io ExitCode
handleButton LeftClick = shell "urxvt -title pop-up -e htop" empty
handleButton _ = return ExitSuccess
idleCpu :: Shell Double
idleCpu = read . unpack . strip <$>
strict (inshell (pack "mpstat 1 1 -o JSON | jq -r '.sysstat.hosts[0].statistics[0].\"cpu-load\"[0].idle'") empty)