{-# LANGUAGE Arrows, RankNTypes, ScopedTypeVariables #-} import FRP.Grapefruit.Signal.Continuous as CSignal import FRP.Grapefruit.Signal.Segmented as SSignal import FRP.Grapefruit.Signal.Discrete as DSignal import FRP.Grapefruit.Signal as Signal import FRP.Grapefruit.Circuit as Circuit import Control.Applicative as Applicative import Control.Arrow as Arrow import Data.Record as Record import Graphics.UI.Grapefruit.Item as UIItem hiding (box) import Graphics.UI.Grapefruit.GTK import qualified Graphics.UI.Gtk as Gtk import JuicyBar.GTKDock import JuicyBar.FunctorStyle import System.Process (system) import Control.Concurrent (forkIO) import JuicyBar.Input.CPU import JuicyBar.Timer import JuicyBar.Input.Date import JuicyBar.Input.Stdin import JuicyBar.Input.Command import JuicyBar.Visualizer.Colorer formatSignals signals = foldr1 joinTwo signals joinTwo s1 s2 = pure (\a b-> a++" "++b) <*> s1 <*> s2 content :: UICircuit Widget GTK era () () content = proc _ -> do cpu <- fromCircuit getCpu -< () colorize show cpuColor 1000 -< cpu time <- fromCircuit $ sampleAt 1000 <<< getDate -< "%H:%M:%S" date <- fromCircuit $ sampleAt 10000 <<< getDate -< "%a %b %d %Y" X :& Click := click <- just label -< X :& Text := time :& Tooltip := date fromCircuit $ consume $ DSignal.consumer $ const $ forkIO (system "xclock" >> return ()) >> return () -< click freeDiskSpace <- fromCircuit $ sampleAt 600000 <<< getCommandOutput -< "df -h | tail -n 1 | awk '{print $4 }'" X <- just label -< X :& Text := freeDiskSpace stdin <- fromCircuit readStdin -< () X <- just label -< X :& Text := fmap (take 20) stdin :& Tooltip := stdin returnA -< () main = run content