Advertisement
Guest User

descendent87

a guest
Feb 16th, 2010
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import XMonad
  2.  
  3. import XMonad.Actions.CycleWS       (toggleWS)
  4. import XMonad.Actions.UpdatePointer
  5.  
  6. import XMonad.Hooks.DynamicLog
  7. import XMonad.Hooks.FadeInactive
  8. import XMonad.Hooks.ManageHelpers
  9. import XMonad.Hooks.ManageDocks
  10. import XMonad.Hooks.UrgencyHook
  11.  
  12. import XMonad.Layout.IM
  13. import XMonad.Layout.LayoutHints    (layoutHintsWithPlacement)
  14. import XMonad.Layout.NoBorders
  15. import XMonad.Layout.PerWorkspace   (onWorkspace)
  16. import XMonad.Layout.ResizableTile
  17.  
  18. import XMonad.Util.EZConfig         (additionalKeysP)
  19. import XMonad.Util.Loggers          (maildirNew,dzenColorL,wrapL)
  20. import XMonad.Util.Run              (spawnPipe)
  21. import XMonad.Util.Scratchpad
  22. import XMonad.Util.WindowProperties (getProp32s)
  23. import XMonad.Util.WorkspaceCompare (getSortByXineramaRule)
  24.  
  25. import Data.List
  26. import Data.Monoid
  27. import Data.Ratio
  28.  
  29. import System.IO
  30.  
  31. import qualified Data.Map        as M
  32. import qualified XMonad.StackSet as W
  33.  
  34. main = do
  35.   h <- spawnPipe "xmobar"
  36.   xmonad $ defaultConfig
  37.     { terminal = myTerminal
  38.     , workspaces = myWorkspaces
  39.     , modMask = myModMask
  40.     , borderWidth    = myBorderWidth
  41.     , normalBorderColor = myNormalBorderColor
  42.     , focusedBorderColor = myFocusedBorderColor
  43.     , layoutHook = myLayout
  44.     , manageHook = myManageHook
  45.     , logHook = myLogHook h
  46.     } `additionalKeysP` myKeys
  47.  
  48. colorBG      = "#303030"         -- background
  49. colorFG      = "#606060"         -- foreground
  50. colorFG2     = "#909090"         -- foreground w/ emphasis
  51. colorFG3     = "#c4df90"         -- foreground w/ strong emphasis
  52. colorUrg     = "#cc896d"         -- urgent
  53.  
  54. myTerminal    = "xterm"
  55. myWorkspaces  = ["1-main","2-web","3-chat","4-media","5-torrent"] ++ map show [6..9]
  56. myModMask     = mod4Mask
  57. myBorderWidth = 1
  58. myNormalBorderColor = colorBG
  59. myFocusedBorderColor = colorFG3
  60.  
  61. -- Layouts
  62. myLayout = avoidStruts $ onWorkspace "3-chat" imLayout
  63.                        $ standardLayouts
  64.  
  65.   where
  66.    
  67.     standardLayouts = tiled ||| Mirror tiled ||| full
  68.  
  69.     -- im roster on left tenth, standardLayouts in other nine tenths
  70.     imLayout        = withIM (1/10) imProp standardLayouts
  71.  
  72.     imProp          = Role "buddy_list"
  73.  
  74.     tiled           = hinted (ResizableTall nmaster delta ratio [])
  75.     full            = hinted (noBorders Full)
  76.  
  77.     -- like hintedTile but for any layout
  78.     hinted l        = layoutHintsWithPlacement (0,0) l
  79.  
  80.     nmaster         = 1
  81.     delta           = 3/100
  82.     ratio           = toRational (2/(1 + sqrt 5 :: Double)) -- golden ratio
  83.  
  84.  
  85. -- ManageHook
  86. myManageHook = (composeAll . concat $
  87.   [ [resource  =? r                 --> doIgnore         |  r    <- myIgnores] -- ignore desktop
  88.   , [className =? c                 --> doShift "2-web"  |  c    <- myWebs   ] -- move webs to web
  89.   , [title     =? t                 --> doShift "3-chat" |  t    <- myChatT  ] -- move chats to chat
  90.   , [className =? c                 --> doShift "3-chat" | (c,_) <- myIM     ] -- move chats to chat
  91.   , [className =? c                 --> doCenterFloat    |  c    <- myFloats ] -- float my floats
  92.   , [name      =? n                 --> doCenterFloat    |  n    <- myNames  ] -- float my names
  93.   , [isFullscreen                   --> myDoFullFloat                        ]
  94.   ]) <+> manageTypes <+> manageDocks <+> manageScratchPad
  95.  
  96.   where
  97.  
  98.     role      = stringProperty "WM_WINDOW_ROLE"
  99.     name      = stringProperty "WM_NAME"
  100.  
  101.     -- [("ClassName","Role")]
  102.     myIM      = [("Pidgin","buddy_list")]
  103.  
  104.     -- titles
  105.     myChatT   = ["irssi","mutt"]
  106.  
  107.     -- classnames
  108.     myFloats  = ["MPlayer","Zenity","VirtualBox","Xmessage","Save As...","XFontSel"]
  109.     myWebs    = ["Navigator","Shiretoko","Namoroka","Firefox","Uzbl","uzbl","Google-chrome", "Chromium"]
  110.  
  111.     -- resources
  112.     myIgnores = ["desktop","desktop_window"]
  113.  
  114.     -- names
  115.     myNames   = ["bashrun","Google Chrome Options","Chromium Options"]
  116.  
  117. -- a trick for fullscreen but stil allow focusing of other WSs
  118. myDoFullFloat :: ManageHook
  119. myDoFullFloat = doF W.focusDown <+> doFullFloat
  120.  
  121. -- manage the scratchpad
  122. manageScratchPad :: ManageHook
  123. manageScratchPad = scratchpadManageHook (W.RationalRect l t w h)
  124.  
  125.   where
  126.  
  127.     -- bottom 10% of the monitor
  128.     h = 0.1
  129.     w = 1
  130.     t = 1 - h
  131.     l = 1 - w
  132.  
  133. -- modified version of manageDocks
  134. manageTypes :: ManageHook
  135. manageTypes = checkType --> doCenterFloat
  136.  
  137. checkType :: Query Bool
  138. checkType = ask >>= \w -> liftX $ do
  139.   m   <- getAtom    "_NET_WM_WINDOW_TYPE_MENU"
  140.   d   <- getAtom    "_NET_WM_WINDOW_TYPE_DIALOG"
  141.   u   <- getAtom    "_NET_WM_WINDOW_TYPE_UTILITY"
  142.   mbr <- getProp32s "_NET_WM_WINDOW_TYPE" w
  143.  
  144.   case mbr of
  145.     Just [r] -> return $ elem (fromIntegral r) [m,d,u]
  146.     _        -> return False
  147.  
  148.  
  149. -- LogHook
  150. myLogHook :: Handle -> X ()
  151. myLogHook h = dynamicLogWithPP $ xmobarPP { ppOutput = hPutStrLn h }
  152.  
  153. -- Keys
  154. myKeys = [ ("M-S-t"                   , scratchPad       ) -- Spawn scratchpad terminal
  155.          ]
  156.          where
  157.            scratchPad = scratchpadSpawnActionTerminal
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement