import XMonad import XMonad.ManageHook import XMonad.Operations import XMonad.Actions.CycleWS import XMonad.Actions.DwmPromote import XMonad.Actions.RotSlaves import XMonad.Actions.SinkAll import XMonad.Hooks.DynamicLog ( PP(..), dynamicLogWithPP, dzenColor, wrap, defaultPP ) import XMonad.Layout import XMonad.Layout.Grid import XMonad.Layout.NoBorders ( noBorders, smartBorders ) import XMonad.Layout.Tabbed import XMonad.Layout.ToggleLayouts import XMonad.Util.Run import qualified XMonad.StackSet as W import qualified XMonad.Actions.FlexibleResize as Flex import qualified Data.Map as M import Data.Bits ((.|.)) import Data.Ratio import Graphics.X11 import System.IO statusBarCmd= "dzen2 -bg '#000000' -fg '#777777' -x 2 -y 1 -h 16 -w 590 -fn '-*-terminus-*-r-normal-*-*-120-*-*-*-*-iso8859-*' -sa c -e '' -ta l" main = do din <- spawnPipe statusBarCmd xmonad $ defaultConfig { borderWidth = 2 , normalBorderColor = "#333333" , focusedBorderColor = "#555555" , workspaces = ["1:irc", "2:main", "3:web", "4:stuff", "6:float"] , terminal = "urxvtc" , modMask = mod4Mask , defaultGaps = [(15,0,0,0)] , keys = \c -> myKeys c `M.union` keys defaultConfig c , manageHook = manageHook defaultConfig <+> myManageHook , logHook = dynamicLogWithPP $ myPP din , layoutHook = toggleLayouts (noBorders Full) $ smartBorders $ tiled ||| Mirror tiled ||| Full ||| Grid ||| tabbed shrinkText } where tiled = Tall nmaster delta ratio -- The default number of windows in the master pane nmaster = 1 -- Default proportion of screen occupied by master pane ratio = 2/(1+(toRational(sqrt(5)::Double))) -- golden -- Percent of screen to increment by when resizing panes delta = 5%100 -- modify/add default key binds -- myKeys (XConfig {modMask = modm}) = M.fromList $ [ -- custom dmenu ((modm, xK_p), spawn "exe=`dmenu_path | dmenu -nb '#000000' -nf '#EEEEEE' -sb '#a6c292'` && eval \"exec $exe\"") -- %! Launch dmenu -- Emergency unclutter kill , ((modm, xK_u), spawn "killall unclutter") -- sink all floating windows , ((modm .|. shiftMask, xK_t), sinkAll) -- swap focused with master, or master with next in line , ((modm, xK_Return), dwmpromote) , ((modm, xK_KP_Enter), dwmpromote) -- rotate slave clients , ((modm .|. shiftMask, xK_Tab ), rotSlavesUp) -- switch to previous workspace , ((modm, xK_z), toggleWS) -- toggle to fullscreen. , ((modm, xK_x), sendMessage ToggleLayout) -- session management , ((modm .|. shiftMask .|. controlMask, xK_k), spawn "xkill") , ((modm .|. shiftMask .|. controlMask, xK_End), spawn "sudo shutdown -h now") , ((modm .|. shiftMask .|. controlMask, xK_Delete), spawn "sudo shutdown -r now") -- application hotkeys , ((mod4Mask, xK_f), spawn "firefox") , ((mod4Mask, xK_q), spawn "thunar") , ((mod4Mask, xK_v), spawn "urxvtc -e alsamixer") , ((mod4Mask, xK_h), spawn "urxvtc -e htop") , ((mod4Mask, xK_Print), spawn "scrot %Y%m%d_quarks.png -d 3 -t 20") ] -- application control -- myManageHook :: ManageHook myManageHook = composeAll . concat $ [ [ className =? c --> doFloat | c <- myFloats] , [ title =? t --> doFloat | t <- myOtherFloats] , [ resource =? r --> doIgnore | r <- myIgnores] , [ className =? "Firefox-bin" --> doF (W.shift "3:web") ] , [ className =? "openftd_gui" --> doF (W.shift "6:float") ] , [ className =? "Gimp" --> doF (W.shift "6:float") ] ] where myIgnores = ["panel", "stalonetray", "trayer"] myFloats = ["xv", "feh", "mplayer", "smplayer", "SMPlayer", "GIMP", "gimp", "gimp-2.4", "Pidgin", "pidgin"] myOtherFloats = ["alsamixer", "Bon Echo Preferences", "Mail/News Preferences", "Bon Echo - Restore Previous Session"] -- dynamiclog pretty printer for dzen -- ^bg(#8ba574) ipv a6c292 -- myPP h = defaultPP { ppCurrent = wrap "^fg(#000000)^bg(#a6c292)^p(2)^i(/home/quarks/dzen/dzen_bitmaps/has_win.xbm)" "^p(2)^fg(grey55)^bg()" , ppVisible = wrap "^bg(grey30)^fg(grey75)^p(2)" "^p(2)^fg(grey55)^bg()" , ppSep = " ^fg(grey60)^r(3x3)^fg() " , ppLayout = dzenColor "#80AA83" "" . (\x -> case x of "Tall" -> "tall ^i(/home/quarks/dzen/dzen_bitmaps/tall.xbm)" "Mirror Tall" -> "mirror ^i(/home/quarks/dzen/dzen_bitmaps/mtall.xbm)" "Full" -> "full ^i(/home/quarks/dzen/dzen_bitmaps/full.xbm)" "Grid" -> "grid" "Tabbed" -> "tabbed" ) , ppTitle = dzenColor "white" "" . wrap "< " " >" , ppOutput = hPutStrLn h }