import XMonad
import Data.Ratio ((%))
import XMonad.Actions.NoBorders
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.UrgencyHook
import XMonad.Layout
import XMonad.Layout.Named
import XMonad.Layout.NoBorders (smartBorders)
import XMonad.Layout.PerWorkspace
import XMonad.Layout.Spacing
import XMonad.Layout.Tabbed
import XMonad.Layout.IM
import XMonad.Layout.Grid
import XMonad.Prompt
import XMonad.Prompt.Workspace
import XMonad.Util.Run
import XMonad.Util.Loggers
import qualified Data.Map as M
import qualified XMonad.StackSet as W
myFont = "xft:Tahoma:size=8:bold"
myFocusColor = "#242424"
myTextColor = "#dfdfdf"
myLightTextColor = "#242424"
myBackgroundColor = "#444444"
myLightBackgroundColor = "#eccc6c"
myUrgentColor = "#00ff00"
myTheme :: Theme
myTheme = defaultTheme
{
activeColor = myLightBackgroundColor
,inactiveColor = myBackgroundColor
,urgentColor = myBackgroundColor
,activeBorderColor = myFocusColor
,inactiveTextColor = myTextColor
,urgentTextColor = "#dfdfdf"
,inactiveBorderColor = "#242424"
,urgentBorderColor = myUrgentColor
,activeTextColor = myLightTextColor
,fontName = myFont
,decoHeight = 18
}
myManageHook = composeAll
[
className =? "MPlayer" --> doFloat
,className =? "Smplayer" --> doFloat
,className =? "heroesofnewerth" --> doFloat
,className =? "urbanterror" --> doFloat
,resource =? "pinentry-gtk-2" --> doFloat
,resource =? "stalonetray" --> doIgnore
,className =? "Wine" --> doFloat
,className =? "Wow.exe" --> doFloat
]
myFloatingHook = composeAll
[
stringProperty "WM_WINDOW_ROLE" =? "gimp-toolbox-color-dialog" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-layer-new" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-vectors-edit" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-dock" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-levels-tool" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "preferences" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-keyboard-shortcuts-dialog" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-modules" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "unit-editor" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "screenshot" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-message-dialog" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-tip-of-the-day" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "plugin-browser" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "procedure-browser" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-display-filters" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-color-selector" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-file-open-location" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-color-balance-tool" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-hue-saturation-tool" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-colorize-tool" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-brightness-contrast-tool" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-threshold-tool" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-curves-tool" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-posterize-tool" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-desaturate-tool" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-scale-tool" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-shear-tool" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-perspective-tool" --> doFloat
,stringProperty "WM_WINDOW_ROLE" =? "gimp-rotate-tool" --> doFloat
]
myShiftingHook = composeAll
[
className =? "Pidgin" --> doF (W.shift "4")
,className =? "Skype" --> doF (W.shift "4")
,className =? "Minefield" --> doF (W.shift "3")
,className =? "Gimp" --> doF (W.shift "G")
,className =? "SMPlayer" --> doF (W.shift "MM")
,resource =? "claws-mail" --> doF (W.shift "5")
,className =? "Liferea" --> doF (W.shift "5")
,className =? "Wine" --> doF (W.shift "W")
]
myPP h = defaultPP
{
ppCurrent = wrap "^ib(0)^bg(#202020)^r(5x0)^fg(#eccc6c)" "^r(5x0)^bg()"
,ppVisible = wrap "^fg()^r(5x0)" "^r(5x0)"
,ppHidden = wrap "^fg()^r(5x0)" "^r(5x0)"
,ppHiddenNoWindows = wrap "^r(5x0)^fg(#707070)" "^r(5x0)"
,ppUrgent = wrap "" "^p(-3)^fg(#00ff00)!^fg()^r(2x0)"
,ppSep = "^p(+4)^fg(#202020)^r(1x16)^fg()^p(+4)"
,ppTitle = wrap "^fg(#bc8f4e)^r(5x0)<^r(10x0)^fg(#b0b0b0)" "^fg()^fg(#bc8f4e)^r(10x0)>^fg()" . shorten 70
, ppLayout = dzenColor "#c5c5c5" "" .
(\x -> case x of
"Tall" -> "^i(/home/asfalatus/share/dzen2/images/tall.xbm)"
"Mirror" -> "^i(/home/asfalatus/share/dzen2/images/mirror.xbm)"
"Full" -> "^i(/home/asfalatus/share/dzen2/images/full.xbm)"
"Tabbed" -> "^i(/home/asfalatus/share/dzen2/images/tabbed.xbm)"
"IM" -> "^i(/home/asfalatus/share/dzen2/images/im.xbm)"
)
,ppOutput = hPutStrLn h
}
myKeys = M.fromList $
[
((mod4Mask , xK_b ), withFocused toggleBorder)
,((mod4Mask , xK_p ), spawn "/usr/local/bin/custom_dmenu_run")
,((mod4Mask , xK_u ), focusUrgent)
]
main = do
mainSbar <- spawnPipe "dzen2_xft -p -x '0' -y '0' -w '700' -h '16' -ta 'l' -fg '#dfdfdf' -bg '#070707' -fn 'Terminus-8'"
xmonad $ withUrgencyHookC NoUrgencyHook urgencyConfig { suppressWhen = Focused }
$ defaultConfig
{
manageHook = myManageHook <+> myFloatingHook <+> myShiftingHook <+> manageDocks
,logHook = dynamicLogWithPP $ myPP mainSbar
,terminal = "xterm"
,normalBorderColor = "#202020"
,focusedBorderColor = "#dfdfdf"
,modMask = mod4Mask
,borderWidth = 1
,workspaces = ["1", "2", "3", "4", "5", "6", "MM", "G", "W"]
,keys = \c -> myKeys `M.union` keys defaultConfig c
,layoutHook = myLayout
}
-- tabbed shrinkText myTheme
myLayout = avoidStrutsOn [U,D] $ onWorkspace "4" (im) $ onWorkspace "3" (tabs) $ onWorkspace "5" (tabs) $ onWorkspace "W" (full) $
htiled
||| vtiled
||| full
||| tabs
||| im
where
htiled = named "Tall" (spacing 5 (Tall 1 (3/100) (1/2)))
vtiled = named "Mirror" (Mirror htiled)
full = named "Full" (smartBorders (Full))
tabs = named "Tabbed" (smartBorders (tabbed shrinkText myTheme))
im = named "IM" (spacing 5 (withIM (2%10) (Role "buddy_list") (Mirror (Tall 1 (3/100) (1/2)))))
-- EOF