import IO import System.Exit import XMonad import XMonad.Hooks.DynamicLog import XMonad.Layout.NoBorders import XMonad.Util.Run import XMonad.Actions.FindEmptyWorkspace import XMonad.Actions.FlexibleManipulate as Flex import XMonad.Hooks.ManageDocks import XMonad.Util.Dzen import XMonad.Hooks.UrgencyHook import qualified XMonad.StackSet as W import qualified Data.Map as M main = do xmobar <- spawnPipe "xmobar /home/tobsi/.xmobarrc" xmonad $ defaultConfig { terminal = urxvt, focusFollowsMouse = mouseFocus, borderWidth = 1, focusedBorderColor = "#FFFF00", normalBorderColor = "#111111", modMask = mod4Mask, numlockMask = mod2Mask, workspaces = map show [1..9], keys = keyBindings, mouseBindings = mouse, layoutHook = layouts, manageHook = manageHooks, logHook = dynamicLogWithPP $ xmobarPP { ppOutput = hPutStrLn xmobar }, startupHook = return () } urxvt = "urxvt -bg black -fg white -sl 5000" keyBindings conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $ [ ((modMask, xK_Return), spawn $ XMonad.terminal conf) ,((modMask .|. shiftMask, xK_c), kill) ,((modMask, xK_space), sendMessage NextLayout) ,((modMask, xK_n), refresh) ,((modMask, xK_Tab), windows W.focusDown) ,((modMask, xK_m), windows W.focusMaster) ,((modMask .|. shiftMask, xK_Return),windows W.swapMaster) ,((modMask, xK_l),windows W.swapDown) ,((modMask, xK_r),windows W.swapUp) ,((modMask, xK_h), sendMessage Shrink) ,((modMask, xK_i), sendMessage Expand) ,((modMask, xK_t), withFocused $ windows . W.sink) ,((modMask .|. shiftMask, xK_q),io (exitWith ExitSuccess)) ,((modMask, xK_q), broadcastMessage ReleaseResources >> restart "xmonad" True) ] ++ [ ((m .|. modMask, k), windows $ f i) | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9] , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]] ++ [ ((m .|. modMask, key), screenWorkspace sc >>= flip whenJust (windows . f)) | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..] , (f, m) <- [(W.view, 0), (W.shift, shiftMask)] ] mouse (XConfig {XMonad.modMask = modMask}) = M.fromList $ [ ((modMask, button1), (\w -> focus w >> Flex.mouseWindow Flex.position w)) , ((modMask, button3), (\w -> focus w >> Flex.mouseWindow Flex.resize w)) ] layouts = avoidStrutsOn [U] (tiled ||| Mirror tiled ||| Full) where -- tiled tiled = Tall nmaster delta ratio nmaster = 1 ratio = 1/2 delta = 5/100 -- focus follows mouse mouseFocus = True -- special apps manageHooks = composeAll [className =? "Gran Paradiso" --> doF (W.shift "2")]