Personal tools

Xmonad/Config archive/Kapil's networkmanagerprompt.hs

From HaskellWiki

< Xmonad | Config archive
Revision as of 13:20, 14 September 2012 by Kapil (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

A snippet to use "nmcli" to bring up and take down connections via a XPrompt interaction.

import XMonad
import XMonad.Config
import XMonad.Prompt
import XMonad.Prompt.Input (inputPromptWithCompl, (?+))
import XMonad.Util.Run (runProcessWithInput)
 
import Data.Bits ((.|.))
import qualified Data.Map as M
 
main = xmonad $ defaultConfig {
     keys         = addlKeys <+> keys defaultConfig
   }
 
-- networking with network Manager
 
addlKeys conf@(XConfig {modMask = modm}) = M.fromList $
    [ ((modm                , xK_F3), nmPrompt "up")
    , ((modm .|. controlMask, xK_F3), nmPrompt "down") ]
 
-- A set up to use XPrompt to find out which connections need to go up and down
 
-- get the list of connections using nmcli
getNmConnections :: X [String]
getNmConnections = fmap lines $ runProcessWithInput "nmcli" [ "-t", "-f", "NAME", "con", "list" ] []
 
-- a utility to run an nmcli command
 
nmConAction a = spawn . ((++) "nmcli con ") . ((++) a)
 
-- Prompt for nm up or down action
 
nmPrompt :: String -> X ()
nmPrompt a = do 
                conns <- getNmConnections
                inputPromptWithCompl defaultXPConfig ("Connection to " ++ a)
                  (mkComplFunFromList conns) ?+ (nmConAction (" " ++ a ++ " id "))