import XMonad import System.Exit import System.IO import Data.Ratio ((%)) import qualified XMonad.StackSet as W import qualified Data.Map as M import XMonad.Hooks.ManageHelpers import XMonad.Actions.CycleWS import XMonad.Hooks.DynamicLog import XMonad.Hooks.ManageDocks import XMonad.Util.Run(spawnPipe) import XMonad.Layout.Tabbed import XMonad.Layout.DecorationMadness import XMonad.Layout.NoBorders import XMonad.Layout.DragPane import XMonad.Layout.Grid import XMonad.Layout.ShowWName import XMonad.Prompt import XMonad.Prompt.Shell import qualified XMonad.Actions.ConstrainedResize as Sqr myManageHook = composeAll [ className =? "MPlayer" --> doCenterFloat , className =? "Gimp-2.6" --> doFloat , className =? "Gimp" --> doFloat , className =? "feh" --> doCenterFloat , className =? "XCalc" --> doCenterFloat , className =? "Gtk-chtheme" --> doCenterFloat , className =? "XFontSel" --> doCenterFloat , className =? "Xmag" --> doCenterFloat , title =? "Event Tester" --> doFloat , title =? "gThumb" --> doFullFloat , className =? "Xmessage" --> doCenterFloat , className =? "Gmessage" --> doCenterFloat ] <+> composeOne [ isFullscreen -?> doFullFloat ] myNormalBGColor = "#2c2c2c" myFocusedBGColor = "#3f3f3f" myNormalFGColor = "#9c9c9c" myFocusedFGColor = "#C4B089" myUrgentFGColor = "#f57900" myUrgentBGColor = myNormalBGColor mySeperatorColor = "#2e3436" myFont = "-*-bitstream vera sans mono-medium-r-normal-*-10-*-*-*-*-*-*-*" myNormalBorderColor = "#606060" myFocusedBorderColor = "#9c9c9c" myXPConfig = defaultXPConfig { bgColor = myNormalBGColor , fgColor = myNormalFGColor , fgHLight = myFocusedFGColor , bgHLight = myNormalBGColor , height = 14 , position = Top , font = myFont , borderColor = myNormalBorderColor } -- keybindings {{{ myKeys conf@(XConfig {modMask = modm}) = M.fromList $ [ ((0, xK_Redo), nextWS) , ((0, xK_Undo), prevWS) , ((shiftMask, xK_Redo), shiftToNext) , ((shiftMask , xK_Undo), shiftToPrev) , ((modm , xK_x), shellPrompt myXPConfig) , ((modm, xK_p), spawn ("exec `dmenu_path | dmenu -fn '" ++ myFont ++ "' -nb '" ++ myNormalBGColor ++ "' -nf '" ++ myNormalFGColor ++ "' -sb '" ++ myFocusedBGColor ++ "' -sf '" ++ myFocusedFGColor ++ "'`"))] -- }}} -- mouse bindings myMouseBindings (XConfig {XMonad.modMask = modm}) = M.fromList $ [ ((modm, button1), (\w -> focus w >> mouseMoveWindow w)) , ((modm, button2), (\w -> focus w >> windows W.swapMaster)) -- raise window to top of stack , ((modm, button3), (\w -> focus w >> Sqr.mouseResizeWindow w False)) , ((modm .|. shiftMask, button3), (\w -> focus w >> Sqr.mouseResizeWindow w True))] -- constrained resize -- }}} -- layouts {{{ tabbedConf = defaultTheme { inactiveBorderColor = "#707070" , activeBorderColor = "#707070" , activeColor = myFocusedBGColor , inactiveColor = myNormalBGColor , activeTextColor = myFocusedFGColor , inactiveTextColor = myNormalFGColor , decoHeight = 14 , fontName = myFont } tabbedLayout = tabbedBottomAlways shrinkText tabbedConf -- retain tab for single window in tabbed layout myLayoutHook = avoidStruts $ showWName $ smartBorders $ Tall 1 (3 / 100) (1 / 2) ||| dragPane Horizontal 0.1 0.5 ||| tabbedLayout ||| Grid ||| Full -- }}} main = do xmproc <- spawnPipe "xmobar" xmonad $ defaultConfig { borderWidth = 1, focusFollowsMouse = True, workspaces = ["1","2","3","4","5","6","7","8","9"], terminal = "xfce4-terminal", modMask = mod4Mask, manageHook = myManageHook <+> manageHook defaultConfig, layoutHook = myLayoutHook, normalBorderColor = myNormalBorderColor, focusedBorderColor = myFocusedBorderColor, keys = \c -> myKeys c `M.union` keys defaultConfig c, mouseBindings = myMouseBindings }