import XMonad import XMonad hiding (Tall) import XMonad.Hooks.DynamicLog import XMonad.Hooks.ManageDocks import XMonad.Hooks.UrgencyHook import XMonad.Layout.LayoutHints import XMonad.Layout.ResizableTile import XMonad.Layout.Grid import XMonad.Actions.CycleWS import XMonad.Prompt import XMonad.Prompt.Shell import XMonad.Util.Run(spawnPipe) import System.Exit import System.IO import Data.Monoid import XMonad.Layout.Grid import XMonad.Actions.GridSelect import XMonad.Layout.Tabbed import XMonad.Layout.SimplestFloat import qualified XMonad.StackSet as W import qualified Data.Map as M urgentColor = ("#8787af", "") currentColor = ("#87afd7", "") main = do xmproc <- spawnPipe "xmobar" xmonad $ withUrgencyHook NoUrgencyHook $ defaultConfig { terminal = "urxvt", modMask = mod4Mask, workspaces = ["[1]:[pr0n]", "[2]:[irc]", "[3]:[code]", "[4]:[terms]", "[5]:[porr]", "[6]", "[7]", "[8]", "[9]:[music]"], normalBorderColor = "#202020", focusedBorderColor = "#8787af", manageHook = myManageHook, keys = myKeys, mouseBindings = myMouseBindings, layoutHook = myLayout, logHook = dynamicLogWithPP $ xmobarPP { ppOutput = hPutStrLn xmproc, ppCurrent = xmobarColor (fst currentColor) (snd currentColor), ppTitle = xmobarColor "#ffaf5f" "" . shorten 150 } } myKeys conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $ [ ((mod1Mask , xK_Return ), spawn $ XMonad.terminal conf) , ((mod1Mask .|. shiftMask, xK_c ), kill) , ((mod1Mask , xK_space ), sendMessage NextLayout) , ((mod1Mask .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) , ((modMask , xK_n ), refresh) , ((mod1Mask , xK_Tab ), windows W.focusDown) , ((mod1Mask , xK_j ), windows W.focusDown) , ((mod1Mask , xK_k ), windows W.focusUp) , ((mod1Mask , xK_m ), windows W.focusMaster) , ((mod1Mask .|. shiftMask, xK_Return ), windows W.swapMaster) , ((mod1Mask .|. shiftMask, xK_j ), windows W.swapDown) , ((mod1Mask .|. shiftMask, xK_k ), windows W.swapUp) , ((mod1Mask , xK_g ), goToSelected defaultGSConfig) , ((mod1Mask , xK_h ), sendMessage Shrink) , ((mod1Mask , xK_l ), sendMessage Expand) , ((mod1Mask .|. shiftMask, xK_h ), sendMessage MirrorShrink) , ((mod1Mask .|. shiftMask, xK_l ), sendMessage MirrorExpand) , ((mod1Mask , xK_t ), withFocused $ windows . W.sink) , ((mod1Mask , xK_i ), sendMessage (IncMasterN 1)) , ((mod1Mask , xK_d ), sendMessage (IncMasterN (-1))) , ((mod1Mask .|. shiftMask, xK_q ), io (exitWith ExitSuccess)) , ((mod4Mask , xK_q ), spawn "xmonad --recompile; xmonad --restart") , ((mod1Mask , xK_p ), shellPrompt defaultXPConfig) , ((0 , 0x1008ff13 ), spawn "amixer -q set Master 2dB+") , ((0 , 0x1008ff11 ), spawn "amixer -q set Master 2dB-") , ((0 , 0x1008ff12 ), spawn "amixer -q set Master toggle") , ((0 , 0x1008ff16 ), spawn "mocp --prev") , ((0 , 0x1008ff17 ), spawn "mocp --next") , ((0 , 0x1008ff14 ), spawn "mocp --toggle-pause") , ((mod1Mask , xK_Print ), spawn "scrot -e 'mv $f ~/Screenshots'") ] ++ [((m .|. mod1Mask, k), windows $ f i) | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9] , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]] ++ [((m .|. mod1Mask, 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)]] myMouseBindings (XConfig {XMonad.modMask = modMask}) = M.fromList $ [ ((mod1Mask, button1), (\w -> focus w >> mouseMoveWindow w >> windows W.shiftMaster)) , ((mod1Mask, button2), (\w -> focus w >> windows W.shiftMaster)) , ((mod1Mask, button3), (\w -> focus w >> mouseResizeWindow w >> windows W.shiftMaster)) ] myLayout = avoidStruts $ layoutHints (simpleTabbed ||| tall ||| simplestFloat ||| Mirror tall ||| Full) where tall = ResizableTall nmaster delta ratio [] nmaster = 1 delta = 3/100 ratio = 1/2 myManageHook :: ManageHook myManageHook = composeAll [ className =? "mplayer2" --> doShift "1:pr0n" , className =? "Firefox" --> doShift "2:irc"]