{-# LANGUAGE OverloadedStrings #-}
module Main where
import Common
import Control.Applicative (liftA2)
import Data.Maybe (maybe)
import Data.Text (pack, strip, unpack)
import Turtle
main :: IO ()
main = sh $ do
liftIO . putStrLn =<< liftA2 formatVol isMuted getVolume
maybe (return ExitSuccess) handleButton =<< currentButton
handleButton :: MonadIO io => Button -> io ExitCode
handleButton LeftClick = shell "pavucontrol" empty
handleButton RightClick = shell "ponymix toggle >/dev/null" empty
handleButton WheelUp = shell "ponymix increase 5 >/dev/null" empty
handleButton WheelDown = shell "ponymix decrease 5 >/dev/null" empty
handleButton _ = pure . ExitFailure $ 1
formatVol :: Bool -> Integer -> String
formatVol True _ = "\61478 x"
formatVol False vol = icon vol ++ " " ++ show vol ++ "%"
icon :: Integer -> String
icon v | v < 33 = "\61479"
icon _ = "\61480"
isMuted :: Shell Bool
isMuted = (== ExitSuccess) <$> shell (pack "ponymix is-muted") empty
getVolume :: Shell Integer
getVolume = toVolumeInt <$> strict (inshell (pack "ponymix get-volume") empty)
where toVolumeInt = read . unpack . strip