ENH dynamically grab wifi interface in xmobar

This commit is contained in:
Nathan Dwarshuis 2021-06-23 00:09:59 -04:00
parent 04343e5bdc
commit adc2222a21
2 changed files with 138 additions and 112 deletions

View File

@ -13,10 +13,16 @@ module Main (main) where
import Control.Monad (filterM)
import Data.Either
import Data.List
import Data.Maybe
import DBus
import System.Directory
import System.FilePath.Posix
import System.IO.Error
import Xmobar.Plugins.Bluetooth
import Xmobar.Plugins.Device
import Xmobar.Plugins.IntelBacklight
@ -83,52 +89,66 @@ filterSpecs = filterM (maybe (return True) exists . csDepends)
where
exists DBusDepends { ddBus = b, ddPath = p, ddSys = s } = pathExists s b p
myCommands :: BarRegions
myCommands = BarRegions
{ brLeft =
[ CmdSpec
{ csAlias = "UnsafeStdinReader"
, csDepends = Nothing
, csRunnable = Run UnsafeStdinReader
}
]
sysfsNet :: FilePath
sysfsNet = "/sys/class/net"
, brCenter = []
, brRight =
[ CmdSpec
{ csAlias = "wlp0s20f3wi"
wirelessCmd :: String -> CmdSpec
wirelessCmd interface = CmdSpec
{ csAlias = interface ++ "wi"
, csDepends = Nothing
, csRunnable = Run
$ Wireless "wlp0s20f3"
$ Wireless interface
[ "-t", "<qualityipat><essid>"
, "--"
, "--quality-icon-pattern", "<icon=wifi_%%.xpm/>"
] 5
}
, CmdSpec
getWireless :: IO (Maybe CmdSpec)
getWireless = do
r <- tryIOError (listDirectory sysfsNet)
ns <- filterM hasWireless $ fromRight [] r
return $ case ns of
[n] -> Just $ wirelessCmd n
_ -> Nothing
where
hasWireless p = doesPathExist $ sysfsNet </> p </> "wireless"
myCommands :: IO BarRegions
myCommands = do
wirelessSpec <- getWireless
let left =
[ CmdSpec
{ csAlias = "UnsafeStdinReader"
, csDepends = Nothing
, csRunnable = Run UnsafeStdinReader
}
]
let right =
[ wirelessSpec
, Just $ CmdSpec
{ csAlias = "enp7s0f1"
, csDepends = Just $ sysDepends devBus devPath
, csRunnable = Run
$ Device ("enp7s0f1", "<fn=2>\xf0e8</fn>", T.fgColor, T.backdropFgColor) 5
}
, CmdSpec
, Just $ CmdSpec
{ csAlias = vpnAlias
, csDepends = Just $ sysDepends vpnBus vpnPath
, csRunnable = Run
$ VPN ("<fn=2>\xf023</fn>", T.fgColor, T.backdropFgColor) 5
}
, CmdSpec
, Just $ CmdSpec
{ csAlias = btAlias
, csDepends = Just $ sysDepends btBus btPath
, csRunnable = Run
$ Bluetooth ("<fn=2>\xf293</fn>", T.fgColor, T.backdropFgColor) 5
}
, CmdSpec
, Just $ CmdSpec
{ csAlias = "alsa:default:Master"
, csDepends = Nothing
, csRunnable = Run
@ -142,7 +162,7 @@ myCommands = BarRegions
]
}
, CmdSpec
, Just $ CmdSpec
{ csAlias = "battery"
, csDepends = Nothing
, csRunnable = Run
@ -161,20 +181,20 @@ myCommands = BarRegions
] 50
}
, CmdSpec
, Just $ CmdSpec
{ csAlias = "intelbacklight"
, csDepends = Just $ sesDepends xmonadBus blPath
, csRunnable = Run $ IntelBacklight "<fn=1>\xf185</fn>"
}
, CmdSpec
, Just $ CmdSpec
{ csAlias = ssAlias
, csDepends = Just $ sesDepends xmonadBus ssPath
, csRunnable = Run
$ Screensaver ("<fn=1>\xf254</fn>", T.fgColor, T.backdropFgColor)
}
, CmdSpec
, Just $ CmdSpec
{ csAlias = "locks"
, csDepends = Nothing
, csRunnable = Run
@ -189,12 +209,16 @@ myCommands = BarRegions
]
}
, CmdSpec
, Just $ CmdSpec
{ csAlias = "date"
, csDepends = Nothing
, csRunnable = Run $ Date "%Y-%m-%d %H:%M:%S " "date" 10
}
]
return $ BarRegions
{ brLeft = left
, brCenter = []
, brRight = catMaybes right
}
fmtSpecs :: [CmdSpec] -> String
@ -264,6 +288,6 @@ config br confDir = defaultConfig
main :: IO ()
main = do
br <- mapRegionsM filterSpecs myCommands
br <- mapRegionsM filterSpecs =<< myCommands
dir <- getXMonadDir
xmobar $ config br dir

View File

@ -65,6 +65,8 @@ executable xmobar
, my-xmonad
, xmobar
, xmonad >= 0.13
, filepath >= 1.4.2.1
, xmonad-contrib >= 0.13
, directory >= 1.3.3.0
default-language: Haskell2010
ghc-options: -Wall -Werror -fno-warn-missing-signatures -threaded