import System.IO import XMonad import XMonad.Actions.CycleWS import XMonad.Actions.WindowGo import XMonad.Hooks.DynamicLog import XMonad.Hooks.ManageDocks import XMonad.Hooks.ManageHelpers import XMonad.Layout import XMonad.Layout.DragPane import XMonad.Layout.Grid import XMonad.Layout.NoBorders import XMonad.Prompt import XMonad.Prompt.Shell import XMonad.Util.EZConfig import XMonad.Util.Run(spawnPipe) import XMonad.Util.Run import qualified XMonad.StackSet as W main = do xmproc <- spawnPipe "/usr/local/bin/xmobar" xmonad $ defaultConfig { manageHook = manageDocks <+> myManageHook <+> manageHook defaultConfig , layoutHook = myLayoutHook , logHook = myLogHook xmproc , modMask = myModMask , terminal = myTerminal , workspaces = myWorkSpaces } `additionalKeysP` [ --- myKeyBindings --- ---------------------- ---- applications ---- ---------------------- -- start gimp & open in 8:misc -- (("M-g g"), (spawn "gimp")) -- start gpodder & open in 4:aud -- , (("M-g p"), (spawn "gpodder")) -- start gvim & open in 3:vim -- , (("M-g v"), (spawn "gvim")) -- start iceweasel & open in 1:web -- , (("M-i c"), (spawn "iceweasel")) -- start irssi in screen & open in 2:irc -- , (("M-i r"), raiseMaybe (runInTerm "-title irssi" "screen -S irssi -c ~/.screenrc-irssi") (title =? "irssi")) -- start mocp in screen & open in 4:aud -- , (("M-m o"), raiseMaybe (runInTerm "-title mocp" "screen -S mocp -c ~/.screenrc-mocp") (title =? "mocp")) -- send monitor to stanby -- , (("M-m s"), spawn "monitor-standby.sh") -- start mutt in screen & open in 5:mail -- , (("M-m u"), raiseMaybe (runInTerm "-title mutt" "screen -S mutt -c ~/.screenrc-mutt") (title =? "mutt")) -- popups the xmonad app launcher -- , (("M-x a"), shellPrompt myXPConfig) -- start comix & open in 8:misc -- , (("M-x c"), (spawn "comix")) -- start epdfview & open in 8:misc -- , (("M-x e"), (spawn "epdfview")) -- lock the screen -- , (("M-x l"), (spawn "xset dpms force off" >> spawn "xlock -mousemotion +description -mode blank -bg -black -fg grey30 -font 'fixed'")) -- start ncftp in screen & open in 8:misc -- , (("M-x n"), raiseMaybe (runInTerm "-title ncftp" "screen -S ncftp -c ~/.screenrc-ncftp") (title =? "ncftp")) -- start rtorrent in screen & open in 7:torr -- , (("M-x r"), raiseMaybe (runInTerm "-title rtorrent" "screen -S rtorrent -c ~/.screenrc-rtorrent") (title =? "rtorrent")) -- start smplayer & open in 6:vid -- , (("M-x s"), (spawn "smplayer")) -- start vim in screen & open in 3:vim -- , (("M-x v"), raiseMaybe (runInTerm "-title vim" "screen -S vim -c ~/.screenrc-vim") (title =? "vim")) -------------------- ---- navigation ---- -------------------- -- move current selected window to previous workspace -- , (("M-S-,"), shiftToPrev >> prevWS) -- move current selected window to next workspace -- , (("M-S-."), shiftToNext >> nextWS) -- next empty workspace -- , (("M-S-/"), moveTo Next EmptyWS) -- previous workspace -- , (("M-x ,"), prevWS) -- next workspace -- , (("M-x ."), nextWS) -- toggle to previous workspace -- , (("M-x /"), toggleWS) ]`additionalKeys` [ --------------------- ---- screenshots ---- --------------------- -- take a selected window screenshot [then click on a window, file is saved in ~] -- ((controlMask, xK_Print), spawn "sleep 0.2; scrot -s") -- take a full screenshot, file is saved in ~ -- , ((0, xK_Print), spawn "scrot") ] myLayoutHook = avoidStruts $ smartBorders $ layoutHook defaultConfig ||| Tall 1 (3 / 100) (1 / 2) ||| dragPane Horizontal 0.1 0.5 ||| Grid ||| Full myLogHook xmproc = dynamicLogWithPP $ xmobarPP { ppOutput = hPutStrLn xmproc , ppOrder = \(ws:l:_) -> [l,ws] } myManageHook = composeAll [ className =? "feh" --> doCenterFloat -- , className =? "Gimp" --> doFloat -- , className =? "MPlayer" --> doCenterFloat -- set these apps to float ontop of other windows -- , className =? "Qalculate" --> doCenterFloat -- , className =? "Smplayer" --> doCenterFloat -- , title =? "irssi" --> doShiftAndGo "2:irc" -- , title =? "mocp" --> doShiftAndGo "4:aud" -- , title =? "mutt" --> doShiftAndGo "5:mail" -- , title =? "ncftp" --> doShiftAndGo "8:misc" -- , title =? "rtorrent" --> doShiftAndGo "7:torr" -- , title =? "vim" --> doShiftAndGo "3:vim" -- , className =? "Comix" --> doShiftAndGo "8:misc" -- , className =? "Epdfview" --> doShiftAndGo "8:misc" -- move these apps to set workspace at start -- , className =? "Gimp" --> doShiftAndGo "8:misc" -- , className =? "Gpodder" --> doShiftAndGo "4:aud" -- , className =? "Gvim" --> doShiftAndGo "3:vim" -- , className =? "Iceweasel" --> doShiftAndGo "1:web" -- , className =? "MPlayer" --> doShiftAndGo "6:vid" -- , className =? "Smplayer" --> doShiftAndGo "6:vid" -- ] doShiftAndGo :: WorkspaceId -> ManageHook doShiftAndGo ws = doF (W.greedyView ws) <+> doShift ws myModMask = mod1Mask myTerminal = "urxvt" myWorkSpaces = ["1:web", "2:irc", "3:vim", "4:aud", "5:mail", "6:vid", "7:torr", "8:misc"] myXPConfig = defaultXPConfig { font = "-*-terminus-*-*-*-*-14-*-*-*-*-*-iso10646-1" , bgColor = "Black" , fgColor = "Cyan" , bgHLight = "Cyan" , fgHLight = "Black" , borderColor = "Black" , position = Top }