chimpyw /.xmonad/xmonad.hs

XMonad config file modified with parts from a few places
-- XMONAD CONFIG
 
import XMonad
import XMonad.Layout.NoBorders
import XMonad.Actions.FloatKeys
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Util.Run (spawnPipe)
 
import qualified XMonad.StackSet as W
import qualified Data.Map        as M

import System.Exit
import System.IO (hPutStrLn)
 
-- Key bindings
keyBinds  conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $
    [ ((modMask,               xK_Return), spawn $ XMonad.terminal conf)
    , ((modMask,               xK_r     ), spawn "exe=`dmenu -sb '#89b83f' -sf '#eeeeee' -nb '#262729' -nf '#bbbbbb' -fn '-xos4-terminus-medium-*-*-*-12-*-*-*-*-*-iso8859-1' < /home/andrew/.dmenu/menu` && eval \"exec $exe\"")
    , ((modMask .|. shiftMask, xK_r     ), spawn "exe=`dmenu_path | dmenu -sb '#89b83f' -sf '#eeeeee' -nb '#262729' -nf '#bbbbbb' -fn '-xos4-terminus-medium-*-*-*-12-*-*-*-*-*-iso8859-1'` && eval \"exec $exe\"")
    , ((modMask,               xK_e     ), spawn "gmrun")
    , ((modMask,               xK_x     ), spawn "slock")
    , ((modMask .|. shiftMask, xK_c     ), kill)
    , ((modMask,               xK_space ), sendMessage NextLayout)
    , ((modMask .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf)
    , ((modMask,               xK_n     ), refresh)
    , ((modMask,               xK_Tab   ), windows W.focusDown)
    , ((modMask,               xK_j     ), windows W.focusDown)
    , ((modMask,               xK_k     ), windows W.focusUp  )
    , ((modMask,               xK_m     ), windows W.focusMaster  )
    , ((modMask .|. shiftMask, xK_Return), windows W.swapMaster)
    , ((modMask .|. shiftMask, xK_j     ), windows W.swapDown  )
    , ((modMask .|. shiftMask, xK_k     ), windows W.swapUp    )
    , ((modMask,               xK_h     ), sendMessage Shrink)
    , ((modMask,               xK_l     ), sendMessage Expand)
    , ((modMask,               xK_t     ), withFocused $ windows . W.sink)
    , ((modMask .|. shiftMask, xK_h     ), sendMessage (IncMasterN 1))
    , ((modMask .|. shiftMask, xK_l     ), sendMessage (IncMasterN (-1)))
    -- Move Floats
    , ((modMask,               xK_Left  ), withFocused (keysMoveWindow (-15, 0)))
    , ((modMask,               xK_Right ), withFocused (keysMoveWindow (15, 0)))
    , ((modMask,               xK_Down  ), withFocused (keysMoveWindow (0, 10)))
    , ((modMask,               xK_Up    ), withFocused (keysMoveWindow (0, -10)))
    -- Size floats
    , ((modMask .|. shiftMask, xK_Left  ), withFocused (keysResizeWindow (-15, 0) (0, 0)))
    , ((modMask .|. shiftMask, xK_Right ), withFocused (keysResizeWindow (15, 0) (0, 0)))
    , ((modMask .|. shiftMask, xK_Down  ), withFocused (keysResizeWindow (0, 15) (0, 0)))
    , ((modMask .|. shiftMask, xK_Up    ), withFocused (keysResizeWindow (0, -15) (0, 0)))
    -- Quit xmonad
    , ((modMask .|. shiftMask, xK_q     ), io (exitWith ExitSuccess))
    -- Restart xmonad
    , ((modMask              , xK_q     ), restart "xmonad" True)
    ]
    ++
    -- mod-[1..9], Switch to workspace N0,
    [((m .|. modMask, k), windows $ f i)
        | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_4]
        , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
-- Mouse bindings
mouseBinds conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $
    [ ((modMask, button1), (\w -> focus w >> mouseMoveWindow w))
    , ((modMask, button2), (\w -> focus w >> windows W.swapMaster))
    , ((modMask, button3), (\w -> focus w >> mouseResizeWindow w))
    ]
 
------------------------------------------------------------------------
-- Log Hook

pP h = defaultPP 
    { ppCurrent   = wrap "^fg(#eeeeee)^bg(#89b83f)^p(2)^i(/home/andrew/.dzen/icons/fwd.xbm)" 
                    "^p(2)^fg()^bg()"
    , ppVisible = wrap "^bg()^fg()^p(2)" "^p(2)^fg()^bg()"
    , ppHidden  = wrap "^fg(#eeeeee)^bg()^p(2)^i(/home/andrew/.dzen/icons/fwd.xbm)" 
                    "^fg()^bg()^p(2)"
    , ppHiddenNoWindows = id
    , ppSep     = " ^fg(#89b83f)^r(1x8)^fg() "
    , ppWsSep   = " "
    , ppLayout  = dzenColor "#eeeeee" "" .
            (\x -> case x of
                        "Tall"      -> "^i(/home/andrew/.dzen/icons/tall.xbm)"
                        "Full"      -> "^i(/home/andrew/.dzen/icons/full.xbm)"
                        otherwise   -> "unknown"
            )
    , ppUrgent  = wrap "^fg(#ff0000)^bg()^i(/home/andrew/.dzen/icons/has_win.xbm" "^fg()"
    , ppTitle   = dzenColor "#eeeeee" "" . \str -> take 80 str
    , ppOutput  = hPutStrLn h
    }
 
------------------------------------------------------------------------
 
statusBarCmd = "dzen2 -bg '#262729' -fg '#bbbbbb' -sa l -ta l -w 700 -fn '-xos4-terminus-medium-*-*-*-12-*-*-*-*-*-iso8859-1' -e 'button1=exec:urxvt;button3=exec:firefox' "
-- Run xmonad
main = do 
            din <- spawnPipe statusBarCmd
            xmonad $ defaultConfig
                { terminal            = "urxvt"
                , focusFollowsMouse   = True
                , borderWidth         = 1
                , modMask             = mod4Mask
                , numlockMask         = mod2Mask
                , workspaces          = ["1","2","3","4"]
                , normalBorderColor   = "#262729"
                , focusedBorderColor  = "#707070"
               -- , defaultGaps         = [(14,14,0,0)]

                , keys                = keyBinds
                , mouseBindings       = mouseBinds

                , layoutHook          = avoidStruts (smartBorders tiled ||| noBorders Full)

                , manageHook          = composeAll
                                            [ className =? "MPlayer"        --> doFloat
                                            , className =? "Gimp"           --> doFloat
                                            , className =? "XClock"         --> doFloat
                                            , className =? "sdlmame"        --> doFloat
                                            , className =? "emesene"        --> doFloat
                                            , className =? "zsnes"          --> doFloat
                                            , className =? "Gmameui"        --> doFloat
                                            , className =? "Gtk-chtheme"    --> doFloat
                                            , title     =? "Downloads"      --> doFloat
                                            , resource  =? "desktop_window" --> doIgnore
                                            , resource  =? "kdesktop"       --> doIgnore ]

                , logHook            = dynamicLogWithPP $ pP din
                } 
                where 
                    tiled = Tall 1 (3/100) (1/2)