import XMonad import XMonad.Config.Desktop import XMonad.Config.Gnome import XMonad.Actions.CycleWS import XMonad.Actions.NoBorders import XMonad.Actions.PhysicalScreens import XMonad.Actions.Warp import XMonad.Hooks.ManageDocks import XMonad.Hooks.ManageHelpers import XMonad.Hooks.SetWMName import XMonad.Layout.ResizableTile import qualified XMonad.StackSet as W import XMonad.Util.EZConfig import Control.Monad import Control.Monad.Trans import Data.Maybe import Data.Monoid import Ratio((%)) --import ConfigurableBorders import FullscreenManager import NoBorders import ProcessWorkspaces modm = mod4Mask main = xmonad $ gnomeConfig { modMask = modm , manageHook = myManageHook , layoutHook = desktopLayoutModifiers myLayoutHook , startupHook = myStartupHook , handleEventHook = myEventHook , workspaces = myWorkspaces } `additionalKeysP` ( [ ("M-a", sendMessage MirrorShrink) , ("M-y", sendMessage MirrorExpand) , ("M-", prevWS) , ("M-", nextWS) , ("M-S-", shiftToPrev) , ("M-S-", shiftToNext) , ("M-S-b", withFocused toggleBorder >> refresh) , ("M1-", kill) , ("M-", viewOrWarp 0) , ("M-", viewOrWarp 1) , ("M-", viewOrWarp 2) , ("M-b", banishScreen LowerRight) , ("M-p", spawnOnCurrent "exe=`dmenu_path | /home/neoraider/bin/dmemu -b` && eval \"exec $exe\"") , ("M-g", gets (W.currentTag . windowset) >>= regroupProcess) ] ++ [ (("M-" ++ show n, windows $ W.greedyView ws)) | (ws, n) <- zip myWorkspaces ([1..9]++[0])] ++ [ (("M-S-" ++ show n, shiftGroup ws)) | (ws, n) <- zip myWorkspaces ([1..9]++[0])] ++ [ (("M-C-" ++ show n, shiftIgnoreGroup ws)) | (ws, n) <- zip myWorkspaces ([1..9]++[0])] ) `additionalMouseBindings` [ ((modm, button4), \_ -> sendMessage Shrink) , ((modm, button5), \_ -> sendMessage Expand) , ((modm .|. shiftMask, button4), \_ -> sendMessage MirrorExpand) , ((modm .|. shiftMask, button5), \_ -> sendMessage MirrorShrink) ] myWorkspaces = ["Firefox", "Thunderbird", "Emacs", "4", "5", "6", "7", "8", "Chat", "10"] viewOrWarp :: Int -> X () viewOrWarp n = do wset <- gets windowset i <- getScreen $ P n whenJust i $ \s -> do ws <- screenWorkspace s whenJust ws $ \w -> windows . W.view $ w when (s == (W.screen . W.current $ wset)) $ warpToScreen s (1%2) (1%2) --myStartupHook :: X () --myStartupHook = do -- startupHook gnomeConfig -- spawn "killall -u `id -un` -q xcompmgr; exec xcompmgr" myStartupHook :: X () myStartupHook = do startupHook gnomeConfig setWMName "LG3D" isUtility :: Query Bool isUtility = isInProperty "_NET_WM_WINDOW_TYPE" "_NET_WM_WINDOW_TYPE_UTILITY" myManageHook :: ManageHook myManageHook = composeAll [ isDialog --> doFloat , composeOne [ className =? "Guake.py" -?> (doFloatMaybeFullscreen <+> doIgnoreProcessWorkspace) -- <+> doConfigBorderOff) --, className =? "Do" -?> (doFloat <+> doConfigBorderOff) , className =? "Gmpc" -?> doIgnoreProcessWorkspace , className =? "Liferea" -?> doIgnoreProcessWorkspace , className =? "Gnome-session" -?> doIgnoreProcessWorkspace , className =? "MPlayer" -?> doCenterFloat , className =? "Gimp" -?> doFloat , className =? "Display" -?> doFloat , className =? "Wine" -?> doFloat , className =? "Pcsx2" -?> doFloat , stringProperty "WM_ICON_NAME" =? "ZeroGS" -?> doFloat , isFullscreen -?> doFullscreen ] , isUtility =? False --> doAutoShift , manageHook gnomeConfig ] myLayoutHook = processWorkspaceStorage $ manageFullscreen $ smartBorders (Full ||| tiled ||| Mirror tiled) where -- default tiling algorithm partitions the screen into two panes tiled = ResizableTall nmaster delta ratio [] -- The default number of windows in the master pane nmaster = 1 -- Default proportion of screen occupied by master pane ratio = 3/5 -- Percent of screen to increment by when resizing panes delta = 3/100 myEventHook :: Event -> X All myEventHook ev = do handleFullscreen ev (handleEventHook gnomeConfig) ev