packages feed

i3blocks-hs-contrib-2.0.0: Wifi/Main.hs

{-# LANGUAGE OverloadedStrings #-}

module Main where

import           Data.Monoid
import           Data.Text.IO (putStrLn)
import           Prelude      hiding (putStrLn)
import           Turtle
import qualified Data.Text as Text
import           Data.Maybe
import           System.Environment (getArgs)

main :: IO ()
main = do
  args <- getArgs
  sh $ liftIO . putStrLn . formatBlock args =<< getSSID

formatBlock :: [String] -> Text -> Text
formatBlock args ssid
  = if Text.null ssid
  then fromMaybe "No WiFi" $ getNoWifiIcon args
  else fromMaybe "" (getWifiIcon args) <> ssid

getNoWifiIcon :: [String] -> Maybe Text
getNoWifiIcon icons = case icons of
  noWifiIcon : _ -> Just $ Text.pack noWifiIcon
  _              -> Nothing

getWifiIcon :: [String] -> Maybe Text
getWifiIcon icons = case icons of
  _ : wifiIcon : _ -> Just $ Text.pack wifiIcon
  _                -> Nothing

getSSID :: Shell Text
getSSID = do
  (exitCode, out) <- shellStrict "iwgetid -r" empty
  if exitCode == ExitFailure 255 then pure mempty else pure out