ADD ethernet indicator and toggle
This commit is contained in:
parent
7b52b34edb
commit
c65f14902b
|
@ -14,6 +14,7 @@ module Main (main) where
|
||||||
import Data.List
|
import Data.List
|
||||||
|
|
||||||
import Xmobar.Plugins.Bluetooth
|
import Xmobar.Plugins.Bluetooth
|
||||||
|
import Xmobar.Plugins.Device
|
||||||
import Xmobar.Plugins.IntelBacklight
|
import Xmobar.Plugins.IntelBacklight
|
||||||
import Xmobar.Plugins.Screensaver
|
import Xmobar.Plugins.Screensaver
|
||||||
import Xmobar.Plugins.VPN
|
import Xmobar.Plugins.VPN
|
||||||
|
@ -38,6 +39,7 @@ myTemplate = formatTemplate left right
|
||||||
formatTemplate l r = fmtAliases l ++ aSep ++ fmtAliases r ++ " "
|
formatTemplate l r = fmtAliases l ++ aSep ++ fmtAliases r ++ " "
|
||||||
left = [ "UnsafeStdinReader" ]
|
left = [ "UnsafeStdinReader" ]
|
||||||
right = [ "wlp0s20f3wi"
|
right = [ "wlp0s20f3wi"
|
||||||
|
, "enp7s0f1"
|
||||||
, "vpn"
|
, "vpn"
|
||||||
, "bluetooth"
|
, "bluetooth"
|
||||||
, "alsa:default:Master"
|
, "alsa:default:Master"
|
||||||
|
@ -133,6 +135,9 @@ config confDir = defaultConfig
|
||||||
, "--quality-icon-pattern", "<icon=wifi_%%.xpm/>"
|
, "--quality-icon-pattern", "<icon=wifi_%%.xpm/>"
|
||||||
] 5
|
] 5
|
||||||
|
|
||||||
|
, Run $ Device
|
||||||
|
("enp7s0f1", "<fn=2>\xf0e8</fn>", T.fgColor, T.backdropFgColor) 5
|
||||||
|
|
||||||
, Run $ Locks
|
, Run $ Locks
|
||||||
[ "-N", "<fn=3>\x1f13d</fn>"
|
[ "-N", "<fn=3>\x1f13d</fn>"
|
||||||
, "-n", xmobarColor T.backdropFgColor "" "<fn=3>\x1f13d</fn>"
|
, "-n", xmobarColor T.backdropFgColor "" "<fn=3>\x1f13d</fn>"
|
||||||
|
|
|
@ -444,6 +444,7 @@ mkKeys ts c =
|
||||||
-- M-<F1> reserved for showing the keymap
|
-- M-<F1> reserved for showing the keymap
|
||||||
, ("M-<F2>", "restart xmonad", runCleanup ts >> runRestart)
|
, ("M-<F2>", "restart xmonad", runCleanup ts >> runRestart)
|
||||||
, ("M-<F3>", "recompile xmonad", runRecompile)
|
, ("M-<F3>", "recompile xmonad", runRecompile)
|
||||||
|
, ("M-<F9>", "toggle ethernet", runToggleEthernet)
|
||||||
, ("M-<F10>", "toggle bluetooth", runToggleBluetooth)
|
, ("M-<F10>", "toggle bluetooth", runToggleBluetooth)
|
||||||
, ("M-<F11>", "toggle screensaver", runToggleDPMS)
|
, ("M-<F11>", "toggle screensaver", runToggleDPMS)
|
||||||
, ("M-<F12>", "switch gpu", runOptimusPrompt)
|
, ("M-<F12>", "switch gpu", runOptimusPrompt)
|
||||||
|
|
|
@ -21,6 +21,7 @@ module XMonad.Internal.Command.Desktop
|
||||||
, runMinBacklight
|
, runMinBacklight
|
||||||
, runMaxBacklight
|
, runMaxBacklight
|
||||||
, runToggleDPMS
|
, runToggleDPMS
|
||||||
|
, runToggleEthernet
|
||||||
, runRestart
|
, runRestart
|
||||||
, runRecompile
|
, runRecompile
|
||||||
, runAreaCapture
|
, runAreaCapture
|
||||||
|
@ -122,6 +123,17 @@ runMaxBacklight = io $ void callMaxBrightness
|
||||||
runToggleDPMS :: X ()
|
runToggleDPMS :: X ()
|
||||||
runToggleDPMS = io $ void callToggle
|
runToggleDPMS = io $ void callToggle
|
||||||
|
|
||||||
|
ethernetIface :: String
|
||||||
|
ethernetIface = "enp7s0f1"
|
||||||
|
|
||||||
|
runToggleEthernet :: X ()
|
||||||
|
runToggleEthernet = spawn
|
||||||
|
$ "nmcli -g GENERAL.STATE device show " ++ ethernetIface ++ " | grep -q disconnected"
|
||||||
|
#!&& "a=connect"
|
||||||
|
#!|| "a=disconnect"
|
||||||
|
#!>> fmtCmd "nmcli" ["device", "$a", ethernetIface]
|
||||||
|
#!&& fmtNotifyCmd defNoteInfo { body = Just $ Text "ethernet \"$a\"ed" }
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- | Configuration commands
|
-- | Configuration commands
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
module Xmobar.Plugins.Device where
|
||||||
|
|
||||||
|
-- TOOD this name can be more general
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
-- | Ethernet plugin
|
||||||
|
--
|
||||||
|
-- Display different text depending on whether or not the interface has
|
||||||
|
-- connectivity
|
||||||
|
|
||||||
|
|
||||||
|
import Control.Monad
|
||||||
|
|
||||||
|
import Data.Word
|
||||||
|
|
||||||
|
import DBus
|
||||||
|
import DBus.Client
|
||||||
|
|
||||||
|
import Xmobar
|
||||||
|
import XMonad.Hooks.DynamicLog (xmobarColor)
|
||||||
|
|
||||||
|
data Device = Device (String, String, String, String) Int
|
||||||
|
deriving (Read, Show)
|
||||||
|
|
||||||
|
busName :: BusName
|
||||||
|
busName = "org.freedesktop.NetworkManager"
|
||||||
|
|
||||||
|
getDevice :: Client -> String -> IO (Maybe ObjectPath)
|
||||||
|
getDevice client iface = do
|
||||||
|
let mc = methodCall "/org/freedesktop/NetworkManager"
|
||||||
|
"org.freedesktop.NetworkManager" "GetDeviceByIpIface"
|
||||||
|
reply <- call client $ mc { methodCallBody = [toVariant iface]
|
||||||
|
, methodCallDestination = Just busName
|
||||||
|
}
|
||||||
|
return $ case reply of
|
||||||
|
Left _ -> Nothing
|
||||||
|
Right b -> case methodReturnBody b of
|
||||||
|
[objectPath] -> fromVariant objectPath
|
||||||
|
_ -> Nothing
|
||||||
|
|
||||||
|
getDeviceConnected :: Client -> ObjectPath -> IO (Maybe Bool)
|
||||||
|
getDeviceConnected client objectPath = do
|
||||||
|
let mc = methodCall objectPath
|
||||||
|
"org.freedesktop.NetworkManager.Device"
|
||||||
|
"Ip4Connectivity"
|
||||||
|
either (const Nothing) (fmap ((> 1) :: Word32 -> Bool) . fromVariant)
|
||||||
|
<$> getProperty client mc { methodCallDestination = Just busName }
|
||||||
|
|
||||||
|
instance Exec Device where
|
||||||
|
alias (Device (iface, _, _, _) _) = iface
|
||||||
|
rate (Device _ r) = r
|
||||||
|
run (Device (iface, text, colorOn, colorOff) _) = do
|
||||||
|
client <- connectSystem
|
||||||
|
dev <- getDevice client iface
|
||||||
|
state <- join <$> mapM (getDeviceConnected client) dev
|
||||||
|
disconnect client
|
||||||
|
return $ maybe "N/A" fmt state
|
||||||
|
where
|
||||||
|
fmt s = xmobarColor (if s then colorOn else colorOff) "" text
|
|
@ -20,6 +20,7 @@ library
|
||||||
, XMonad.Internal.DBus.Screensaver
|
, XMonad.Internal.DBus.Screensaver
|
||||||
, XMonad.Internal.Process
|
, XMonad.Internal.Process
|
||||||
, Xmobar.Plugins.Bluetooth
|
, Xmobar.Plugins.Bluetooth
|
||||||
|
, Xmobar.Plugins.Device
|
||||||
, Xmobar.Plugins.IntelBacklight
|
, Xmobar.Plugins.IntelBacklight
|
||||||
, Xmobar.Plugins.Screensaver
|
, Xmobar.Plugins.Screensaver
|
||||||
, Xmobar.Plugins.VPN
|
, Xmobar.Plugins.VPN
|
||||||
|
|
|
@ -43,7 +43,7 @@ extra-deps:
|
||||||
- iwlib-0.1.0
|
- iwlib-0.1.0
|
||||||
- fdo-notify-0.3.1
|
- fdo-notify-0.3.1
|
||||||
- github: ndwarshuis/xmobar
|
- github: ndwarshuis/xmobar
|
||||||
commit: 4d750adcdecf5c1085ff583cf69392fcaf5dfaf7
|
commit: 4186bcbc50a7c78ac0aee8bc3719e0dd9a46dace
|
||||||
|
|
||||||
# Override default flag values for local packages and extra-deps
|
# Override default flag values for local packages and extra-deps
|
||||||
# flags: {}
|
# flags: {}
|
||||||
|
|
Loading…
Reference in New Issue