rendered paste bodyimport 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 = [(0,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
}