import XMonad import qualified XMonad.StackSet as W import qualified Data.Map as M import XMonad.Hooks.DynamicLog import XMonad.Hooks.ManageDocks import XMonad.Util.Run(spawnPipe) import XMonad.Util.EZConfig import XMonad.Layout.IM import XMonad.Layout.Tabbed import XMonad.Layout.Grid import XMonad.Layout.Tabbed import XMonad.Layout.Circle import XMonad.Layout.Reflect import XMonad.Layout.ResizableTile import XMonad.Layout.PerWorkspace import XMonad.Layout.Named import XMonad.Layout.LayoutHints import XMonad.Layout.WindowNavigation import XMonad.Actions.CycleWS import Data.Ratio((%)) import System.Exit import System.IO -- Terminal myTerminal = "urxvt" -- Workspaces myWorkspaces = ["1:web", "2:prog", "3:sys", "4:im", "5:email", "6:virt", "7:vlc", "8:gimp", "9:misc"] -- Layouts myLayout = avoidStruts $ onWorkspace "4:im" pidginLayout -- use IM layout for WS 4 $ onWorkspace "2:prog" programmingLayout -- Tabbed and circle for WS 2 $ basicLayout -- Use basic layout for rest where basicLayout = tiled ||| Mirror tiled ||| Full tiled = Tall nmaster delta ratio nmaster = 1 delta = 3/100 ratio = 1/2 grid = layoutHints Grid pidginLayout = named "IM" $ (withIM (1%5) pidginRoster grid) programmingLayout = layoutHints $ tabbed shrinkText myTabConfig ||| Circle ||| tiled ||| Mirror tiled pidginRoster = And (ClassName "Pidgin") (Role "buddy_list") myTabConfig = defaultTheme {inactiveBorderColor = "#ff0000" , activeTextColor = "#00ff00"} myKeys c = mkKeymap c $ [ ("M-S-", spawn $ XMonad.terminal c) , ("M-S-c", kill) -- kill window , ("M-", sendMessage NextLayout) , ("M-S-", sendMessage FirstLayout) , ("M-j", windows W.focusDown) , ("M-k", windows W.focusUp) , ("M-m", windows W.focusMaster) , ("M-", windows W.swapMaster) , ("M-S-j", windows W.swapDown) , ("M-S-k", windows W.swapUp) , ("C-", windows W.focusDown) , ("C-", windows W.focusUp) , ("M-h", sendMessage Shrink) , ("M-l", sendMessage Expand) , ("M-C-", nextWS) , ("M-C-", prevWS) , ("M-p", spawn "dmenu_run") , ("M-r s", spawn "scrot") , ("M-r S-s", spawn "scrot -d 5") , ("M-C-l", spawn "xscreensaver-command --lock") , ("M-q", restart "xmonad" True) , ("M-S-q", io (exitWith ExitSuccess)) ] ++ [ (m ++ k, windows $ f w) | (w, k) <- zip (XMonad.workspaces c) (map show [1..9]) , (m, f) <- [("M-", W.greedyView), ("M-S-", W.shift)] ] main = do xmproc <- spawnPipe "/usr/bin/xmobar /home/rens/.xmobarrc" xmonad $ defaultConfig { terminal = myTerminal , workspaces = myWorkspaces , modMask = mod4Mask , focusedBorderColor = "#dddddd" , logHook = dynamicLogWithPP $ xmobarPP { ppOutput = hPutStrLn xmproc , ppTitle = xmobarColor "green" "" . shorten 50 } , manageHook = manageDocks <+> manageHook defaultConfig , layoutHook = myLayout , keys = myKeys }