module Monitors where import Xmobar import Config import Control.Concurrent import Control.Concurrent.Async (async) import Control.Concurrent.STM data CombinedMonitor a b = CombinedMonitor a b (String -> String -> String) instance (Show a, Show b) => Show (CombinedMonitor a b) where show (CombinedMonitor a b _) = "Alt (" ++ show a ++ ") (" ++ show b ++ ")" instance (Read a, Read b) => Read (CombinedMonitor a b) where readsPrec _ = undefined instance (Exec a, Exec b) => Exec (CombinedMonitor a b) where alias (CombinedMonitor a b _) = (alias a) ++ "_" ++ (alias b) rate (CombinedMonitor a b _) = min (rate a) (rate b) start (CombinedMonitor a b comb) cb = startMonitors a b (\s t -> cb $ comb s t) startMonitors a b cmb = do sta <- atomically $ newTVar "" stb <- atomically $ newTVar "" _ <- async $ start a (\x -> atomically $ writeTVar sta x) _ <- async $ start b (\x -> atomically $ writeTVar stb x) go sta stb cmb where go sta' stb' cmb' = do s <- atomically $ readTVar sta' t <- atomically $ readTVar stb' cmb' s t tenthSeconds $ min (rate b) (rate a) go sta' stb' cmb' altMonitor a b = CombinedMonitor a b (\s t -> if null s then t else s) concatMonitor sep a b = CombinedMonitor a b (\s t -> s ++ sep ++ t) topProc p = TopProc (p <~> ["-t" , " \ \· " , "-w", "10", "-L" , "10", "-H", "80"]) 15 topProc' p = TopProc (p <~> ["-t" , " \ \· " , "-w", "10", "-L" , "10", "-H", "80"]) 15 wireless p = Wireless "wlp2s0" (p <~> ["-t" , " " , "-W", "5", "-M", "15" , "-m", "3" , "-L", "20", "-H", "80"]) 20 multiCPU p = MultiCpu (p <~> ["-t", "" , "-S", "on", "-b", " ", "-f", "*" , "-c", " " , "-L", "30", "-H", "70" , "-p", "3", "-a", "l"]) 10 cpuBars p = MultiCpu (mkArgs p ["--template" , " %" , "-L", "50", "--H", "85"] ["--fallback-icon-pattern", "" , "--contiguous-icons"]) 10 cpuFreq p = CpuFreq (p <~> ["-t" , " " , "-L", "1", "-H", "2", "-S", "Off" , "-d", "2"]) 50 -- ⤒⤊⍐ ⊼ ⇧ ⇩ ⎗ ⎘ dynNetwork p = DynNetwork (p <~> ["-t", " " , "-L", "20", "-H", "1024000" , "-m", "5", "-W", "10", "-S", "Off"]) 10 uptime p = Uptime (p <~> [ "-t" , " ", "-m", "3", "-c", "0", "-S" , "On" , "-L", "10", "-H", "100"]) 600 -- 🌧 weather st = WeatherX st [ ("", "🌑") , ("clear", "🌣") , ("sunny", "🌣") , ("mostly clear", "🌤") , ("mostly sunny", "🌤") , ("partly sunny", "⛅") , ("fair", "🌑") , ("obscured", "🌁") -- 🌫 , ("cloudy","☁") , ("overcast","☁") , ("partly cloudy", "⛅") , ("mostly cloudy", "☁") , ("considerable cloudiness", "⛈")] ["-t", " ° % ()" , "-L","10", "-H", "25", "--normal", "black" , "--high", "lightgoldenrod4", "--low", "darkseagreen4"] 18000 batt p = BatteryN ["BAT0"] ["-t", " %" , "-S", "Off", "-d", "0", "-m", "3" , "-L", "10", "-H", "90", "-p", "3" , "--low", (pHigh p), "--normal", (pNormal p), "--high", (pLow p) , "--" , "-a", "notify-send -u critical 'Battery running out!!!!!!'" , "-A", "7" , "-i", "\9211" , "-O", " \9211 " , "-o", " 🔋 " , "-H", "16", "-L", "10" , "-h", "sienna4", "-l", "gray20"] 50 "batt0" coreTemp p = MultiCoreTemp (p <~> ["-t", "°" , "-L", "50", "-H", "75", "-d", "0"]) 50 diskU p = DiskU [("dm-1", "") , ("/media/sdb", " s ")] (p <~> ["-L", "20", "-H", "70", "-m", "1", "-p", "3"]) 20 diskIO p = DiskIO [("dm-1" -- , " ") , " ") ] (p <~> ["-f", "░", "-b", " ", "-L", "200000", "-H" , "10000000" , "-W", "5", "-w", "5", "-p", "3"]) 10 -- 📨 🖅 🖃 📩 ✉ mbox = MBox [ ("L", "/var/mail/jao", "grey60") -- , ("B", "bigml.spool", "sienna4") -- , ("S", "bigsup.spool", "sienna4") -- , ("G", "geiser.spool", "darkseagreen4") -- , ("X", "xmobar.spool", "darkseagreen4") -- , ("g", "gnu.spool", "") -- , ("k", "books.spool", "") ] [] -- ["-p", "📩 ", "-s", ""] "mbox" mail = Mail [ ("I", "~/var/maildir/jao/inbox") , ("G", "~/var/maildir/jao/geiser") , ("X", "~/var/maildir/jao/xmobar") , ("B", "~/var/maildir/bigml/inbox") , ("S", "~/var/maildir/bigml/support") ] "mail" -- mail = Mail [ ("🖃 ", "~/var/maildir/jao/inbox") -- , ("🖃 ", "~/var/maildir/jao/geiser") -- , ("🖃 ", "~/var/maildir/jao/xmobar") -- , ("🖄 ", "~/var/maildir/bigml/inbox") -- , ("🖄 ", "~/var/maildir/bigml/support") -- ] -- "mail" masterVol = Volume "default" "Master" ["-t", " " , "--", "-C", "black", "-c", "sienna4", "-O", "" , "-o", " 🔇"] 10 captureVol = Volume "default" "Capture" ["-t", ""] 10 kbd = Kbd [("us", ""), ("us(intl)", " ⃣")] brightness = Brightness ["--", "-D", "intel_backlight"] 10 memory = Memory ["-t"," M", "-p", "2"] 20 tun0 = Network "tun0" ["-t", ":", "-x", ""] 20 laTime = DateZone "%H" "en_US" "US/Pacific" "laTime" 10 localTime = Date "%R" "datetime" 10 trayPadding = Com "padding-icon.sh" [] "tray" 20