{-# LANGUAGE Arrows, TypeOperators, TypeFamilies #-} module JuicyBar.Input.CPU (getCpu, cpuColor) where import FRP.Grapefruit.Signal as Signal import FRP.Grapefruit.Signal.Continuous as CSignal import FRP.Grapefruit.Setup (Setup, fromIO) import FRP.Grapefruit.Circuit as Circuit import qualified Graphics.UI.Gtk as Gtk import JuicyBar.GTKDock import JuicyBar.FunctorStyle import Control.Arrow as Arrow import System.IO import Control.Applicative import Data.Record import Data.Record.Signal produceCpu :: IO Float produceCpu = do h <- openFile "/proc/loadavg" ReadMode l <- hGetLine h hClose h return $ read $ head $ words l getCpu :: Circuit era () (CSignal era Float) getCpu = Signal.produce $ CSignal.producer produceCpu cpuColor :: (Fractional a, Ord a) => a -> Gtk.Color cpuColor c = if c < 0.3 then Gtk.Color 65535 65535 65535 else Gtk.Color 50000 0 0