jbromley /.xmonad/xmonad.hs

Xmonad with dzer2 status bar
-- XMonad 0.7 Configuration
import XMonad
import XMonad.Actions.FloatKeys
import XMonad.Actions.Submap
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.UrgencyHook
--import XMonad.Layout.Magnifier
import XMonad.Layout.Decoration
--import XMonad.Layout.DecorationMadness
import XMonad.Layout.Maximize
import XMonad.Layout.Named
import XMonad.Layout.ShowWName
import XMonad.Layout.SimpleFloat
--import XMonad.Layout.Simplest
import XMonad.Prompt
import XMonad.Prompt.Input
import XMonad.Prompt.Man
import XMonad.Prompt.RunOrRaise
import XMonad.Prompt.Shell
import XMonad.Prompt.Workspace
import XMonad.Util.EZConfig
import XMonad.Util.Run
import System.IO (Handle, hPutStrLn)
import System.Exit

import qualified XMonad.StackSet as W
import qualified Data.Map as M

-- Customization variables
myTerminal = "urxvtc"
myBorderWidth = 1
myModMask = mod4Mask
myWorkspaces = ["1:main", "2:www", "3:doc", "4", "5", "6", "7:chat", "8:vbox", "9:bt"]
myNormalBorderColor = "DarkSlateGray"
myFocusedBorderColor = "orange"

-- Prompt
myXPConfig = defaultXPConfig { font = "-xos4-terminus-medium-r-normal--12-120-72-72-c-60-iso10646-1"
                             , bgColor = "black"
                             , fgColor = "wheat"
                             , fgHLight = "orange"
                             , bgHLight = "DarkSlateGray"
                             , borderColor = "orange"
                             , position = Top
                             , height = 16 }

-- Workspace indicator
mySWNConfig = defaultSWNConfig { swn_font = "-xos4-terminus-medium-i-normal--32-320-72-72-c-160-iso8859-1"
                               , swn_bgcolor = "DarkSlateGray"
                               , swn_color = "Orange"
                               , swn_fade = 1 }

-- Tabbed decorations theme
myTabTheme = defaultTheme { activeColor = "DarkSlateGray"
                          , activeBorderColor = "orange"
                          , activeTextColor = "orange"
                          , inactiveColor = "DarkSlateGray"
                          , inactiveBorderColor = "DarkSlateGray"
                          , inactiveTextColor = "wheat"
                          , urgentColor = "DarkRed"
                          , urgentBorderColor = "DarkRed"
                          , urgentTextColor = "white"
                          , fontName = "-xos4-terminus-medium-r-normal--12-120-72-72-c-60-iso10646-1"
                          , decoWidth = 200
                          , decoHeight = 16 }

myLayout = avoidStruts (tiled ||| Full ||| myFloat)
    where
      tiled = named "Tiled" (maximize (Tall nmaster delta ratio))
      nmaster = 1
      ratio = 114/175
      delta = 1/175
      myFloat = named "Floating" (maximize (simpleFloat' shrinkText myTabTheme))
--      myFloat = named "Floating" (maximize (simpleFloat))


-- Window rules
myManageHook = composeAll . concat $
               [ [ className =? c --> doFloat | c <- myFloatsByClass ]
               , [ resource =? t --> doFloat | t <- myFloatsByResource ]
               , [ resource =? "Navigator" --> doF (W.shift "2:www") ]
               , [ className =? "Opera" --> doF (W.shift "2:www") ]
               , [ className =? "OpenOffice.org 2.4" --> doF (W.shift "3:doc") ]
               , [ className =? "Acroread" --> doF (W.shift "3:doc") ]
               , [ className =? "Xchm" --> doF (W.shift "3:doc") ]
               , [ className =? "Gimp" --> doF (W.shift "5") ]
               , [ className =? "Skype" --> doF (W.shift "7:chat") ]
               , [ resource =? "IRC" --> doF (W.shift "7:chat") ]
               , [ className =? "Pidgin"  --> doF (W.shift "7:chat") ]
               , [ className =? "VirtualBox" --> doF (W.shift "8:vbox") ]
               , [ className =? "Transmission" --> doF (W.shift "9:bt") ] ]
    where myFloatsByClass = [ "MPlayer"
                            , "Gimp"
                            , "XFontSel"
                            , "Xmessage"
                            , "Xnest"
                            , "feh"
                            , "Firefox"
                            , "Skype"
                            , "Pidgin"
                            , "VirtualBox"
                            , "Transmission" ]
          myFloatsByResource = [ "ALSAMixer"
                               , "mocp"
                               , "QuickTerm"
                               , "ManTerm"
                               , "IRC" ]

myLogHook h = dynamicLogWithPP $ dzenPP { ppCurrent = dzenColor "orange" "DarkSlateGray" . pad
                                        , ppVisible = dzenColor "gray50" "black" . pad
                                        , ppHidden = dzenColor "wheat" "black" . pad
                                        , ppHiddenNoWindows = dzenColor "gray50" "black" . pad
                                        , ppSep = " ^r(4x4) "
                                        , ppWsSep = ""
                                        , ppUrgent = dzenColor "red" "yellow" . pad
                                        , ppTitle = dzenColor "orange" "DarkSlateGray" . pad
                                        , ppLayout = dzenColor "wheat" "DarkSlateGray" .pad
                                        , ppOutput = hPutStrLn h }

-- My keys
myKeyBindings = [ ((myModMask, xK_p), runOrRaisePrompt myXPConfig)
                , ((myModMask, xK_w), workspacePrompt myXPConfig (windows . W.greedyView))
                , ((myModMask .|. shiftMask, xK_w), workspacePrompt myXPConfig (windows . W.shift))
                , ((myModMask, xK_F1), manPrompt myXPConfig)
                , ((myModMask, xK_x), shellPrompt myXPConfig)
                -- Dock toggle
                , ((myModMask, xK_b), sendMessage ToggleStruts)
                -- kb layout selection through dmenu
                , ((myModMask, xK_grave), spawn "kb")
                -- Maximize selected window
                , ((myModMask, xK_backslash), withFocused (sendMessage . maximizeRestore))
                -- Move/resize floating windows
                , ((myModMask, xK_a), withFocused (keysMoveWindow (-8, 0)))
                , ((myModMask, xK_s), withFocused (keysMoveWindow (0, 8)))
                , ((myModMask, xK_d), withFocused (keysMoveWindow (0, -8)))
                , ((myModMask, xK_f), withFocused (keysMoveWindow (8, 0)))
                , ((myModMask .|. controlMask, xK_a), withFocused (keysResizeWindow (-8, 0) (0, 0)))
                , ((myModMask .|. controlMask, xK_s), withFocused (keysResizeWindow (0, 8) (0, 0)))
                , ((myModMask .|. controlMask, xK_d), withFocused (keysResizeWindow (0, -8) (0, 0)))
                , ((myModMask .|. controlMask, xK_f), withFocused (keysResizeWindow (8, 0) (0, 0)))
                , ((myModMask .|. shiftMask, xK_a), submap . M.fromList $
                   [ ((0, xK_q), withFocused (keysMoveWindowTo (0, 17) (0, 0)))
                   , ((0, xK_w), withFocused (keysMoveWindowTo (700, 17) (1/2, 0)))
                   , ((0, xK_e), withFocused (keysMoveWindowTo (1400, 17) (1, 0)))
                   , ((0, xK_a), withFocused (keysMoveWindowTo (0, 533) (0, 1/2)))
                   , ((0, xK_s), withFocused (keysMoveWindowTo (700, 533) (1/2, 1/2)))
                   , ((0, xK_d), withFocused (keysMoveWindowTo (1400, 533) (1, 1/2)))
                   , ((0, xK_z), withFocused (keysMoveWindowTo (0, 1050) (0, 1)))
                   , ((0, xK_x), withFocused (keysMoveWindowTo (700, 1050) (1/2, 1)))
                   , ((0, xK_c), withFocused (keysMoveWindowTo (1400, 1050) (1, 1)))])
                -- Music on Console control
                , ((myModMask, xK_F9), spawn "mocp -p")
                , ((myModMask, xK_F10), spawn "mocp -r")
                , ((myModMask, xK_F11), spawn "mocp -f")
                , ((myModMask, xK_F12), spawn "mocp -s")
                , ((myModMask, xK_F8), spawn "mocp -G")
                -- Screen shots
                , ((0, xK_Print), spawn "/usr/bin/scrot") ]

-- Main entry point
dzenCommand = "dzen2 -x 0 -y 0 -w 800 -ta l -sa l -bg black -fn '-xos4-terminus-medium-r-normal--12-120-72-72-c-60-iso8859-1'"
main = do
  h <- spawnPipe dzenCommand
  xmonad $ withUrgencyHook dzenUrgencyHook { args = ["-bg", "brickred", "-xs", "1"] } $ defaults h
             `additionalKeys` myKeyBindings

defaults logPipe =  defaultConfig {
      -- simple stuff
        terminal           = myTerminal,
        borderWidth        = myBorderWidth,
        modMask            = myModMask,
        workspaces         = myWorkspaces,
        normalBorderColor  = myNormalBorderColor,
        focusedBorderColor = myFocusedBorderColor,
        layoutHook         = showWName' mySWNConfig myLayout,
        manageHook         = myManageHook <+> manageDocks,
        logHook            = myLogHook logPipe
    }