buttons /xmonad.hs

-- xmonad.hs
import XMonad
import XMonad.Layout
import XMonad.Config				(defaultConfig)
import XMonad.Hooks.DynamicLog		( PP(..), dynamicLogWithPP, dzenColor, wrap, defaultPP )
import XMonad.Layout.NoBorders
import XMonad.Util.Run				(spawnPipe)
import XMonad.Hooks.UrgencyHook
import Data.Bits

import XMonad.Operations
import qualified XMonad.StackSet as W 
import qualified Data.Map as Map
import Data.Ratio
import Graphics.X11.Xlib
import System.IO
 
statusBarCmd= "dzen2 -y 2 -w 400 -bg '#000000' -fg 'gray70' -sa c -fn '-*-terminus-*-*-*-*-12-*-*-*-*-*-iso8859' -e '' -ta l"
 
main = do din <- spawnPipe statusBarCmd
          xmonad $ defaultConfig
                     { borderWidth        = 1
                     , normalBorderColor  = "black"
                     , focusedBorderColor = "#aecf96"
                     , terminal           = "urxvt"
                     , workspaces         = ["main", "dev","net", "mail", "jabber"]
                                          --  ++ map show []
                     , defaultGaps        = [(16,0,0,0)]
                     , logHook            = dynamicLogWithPP $ myPP din
					 , manageHook		  = myManageHook
                     , modMask            = mod4Mask
                     , keys               = \c -> myKeys `Map.union`
                                                  keys defaultConfig c
					 , layoutHook         = smartBorders $ Mirror tiled ||| Full ||| tiled
                     }
					 where
						tiled = Tall 1 (3%100) 0.618034
 
myKeys = Map.fromList $
	[ ((mod4Mask                    , xK_F2    ), spawn "gmrun")
	--, ((mod4Mask .|. shiftMask		, xK_t	   ), spawn "thunar")
	, ((0                           , 0x1008ff11    ), spawn "amixer -q sset Master 5-"                     )   -- XF86AudioLowerVolume: Lower audio volume
    , ((0                           , 0x1008ff12    ), spawn "amixer -q sset Master toggle"                 )   -- XF86AudioMute: Mute audio
    , ((0                           , 0x1008ff13    ), spawn "amixer -q sset Master 5+"                     )   -- XF86AudioRaiseVolume: Raise audio volume
	, ((mod4Mask					, xK_e	   ), spawn "thunar")
	, ((mod4Mask					, xK_o	   ), spawn "urxvt -e screen")
	, ((mod4Mask					, xK_F12   ), spawn "sudo shutdown -h now")
    , ((mod4Mask					, xK_p     ), spawn "exe=`dmenu_path | dmenu -b -fn '-*-terminus-*-r-*-*-*-*-*-*-*-*-*-*' -nb '#000000' -nf '#FFFFFF'` && eval \"exec $exe\"") -- %! Launch dmenu
	, ((mod4Mask					, xK_c	   ), kill)
	]

myManageHook = composeAll . concat $
                [ [ className	=? c					--> doFloat		| c <- floatsClass]
				, [ title		=? t					--> doFloat		| t <- floatsTitle]
                , [ resource	=? r					--> doIgnore	| r <- ignore]
                , [ className   =? "Minefield"        --> doF (W.shift "net") ]
				, [ className	=? "Thunderbird-bin"	--> doF (W.shift "mail") ]
				, [ resource	=? "pidgin"				--> doF (W.shift "jabber") ] 
				, [ className	=? c					--> doSink		| c <- sunken ]
				]
			where 
				floatsClass	= ["MPlayer", "Gimp-2.4", "Gimp", "Switch2", "Nitrogen", "Wine", "Skype"]
				floatsTitle	= ["Minefield Preferences", "Add-ons", "Buddy List", "Minefield - Restore Previous Session", "R Graphics: Device 2 (ACTIVE)"]
				ignore		= ["panel", "trayer", "gnome-panel", "desktop_window", "kicker", "kdesktop"]
				sunken		= ["Display.py"]

				doSink :: ManageHook
				doSink = ask >>= \w -> liftX (reveal w) >> doF (W.sink w)

myPP h = defaultPP 
            {  ppCurrent = wrap "^fg(#000000)^bg(#aecf96)^p(2)^i(/home/buttons/.bitmaps/has_win.xbm)" "^p(2)^fg()^bg()"
             , ppVisible = wrap "^bg(grey40)^fg(grey70)^p(2)" "^p(2)^fg()^bg()"
			 , ppHidden = wrap "^p(2)^fg(#ffffff)^i(/home/buttons/.bitmaps/has_win_nv.xbm)" "^p(2)^fg()^bg()"
             , ppHiddenNoWindows = id
             , ppSep     = " ^fg(gray70)^r(2x2)^fg() "
             , ppLayout  = dzenColor "#be6b13" "" .
                           (\x -> case x of
                                    "Tall" -> "^i(/home/buttons/.bitmaps/tall.xbm)"
                                    "Mirror Tall" -> "^i(/home/buttons/.bitmaps/mtall.xbm)"
                                    "Full" -> "^i(/home/buttons/.bitmaps/full.xbm)"
                           )
             , ppUrgent  = wrap "^p(2)^fg(#ff0000)^i(/home/buttons/.bitmaps/has_win_nv.xbm" "^p(2)^fg()^bg()"
             , ppTitle   = dzenColor "white" "" . wrap "< " " >" 
			 --, ppTitle   = dzenColor "#000000" "#9ab8c2" . wrap " ^r(4x1)^r(1x10) " " ^r(1x10)^r(4x1) "
             , ppOutput   = hPutStrLn h
             }