Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import XMonad
- import XMonad.Actions.CycleWS (toggleWS)
- import XMonad.Actions.UpdatePointer
- import XMonad.Hooks.DynamicLog
- import XMonad.Hooks.FadeInactive
- import XMonad.Hooks.ManageHelpers
- import XMonad.Hooks.ManageDocks
- import XMonad.Hooks.UrgencyHook
- import XMonad.Layout.IM
- import XMonad.Layout.LayoutHints (layoutHintsWithPlacement)
- import XMonad.Layout.NoBorders
- import XMonad.Layout.PerWorkspace (onWorkspace)
- import XMonad.Layout.ResizableTile
- import XMonad.Util.EZConfig (additionalKeysP)
- import XMonad.Util.Loggers (maildirNew,dzenColorL,wrapL)
- import XMonad.Util.Run (spawnPipe)
- import XMonad.Util.Scratchpad
- import XMonad.Util.WindowProperties (getProp32s)
- import XMonad.Util.WorkspaceCompare (getSortByXineramaRule)
- import Data.List
- import Data.Monoid
- import Data.Ratio
- import System.IO
- import qualified Data.Map as M
- import qualified XMonad.StackSet as W
- main = do
- h <- spawnPipe "xmobar"
- xmonad $ defaultConfig
- { terminal = myTerminal
- , workspaces = myWorkspaces
- , modMask = myModMask
- , borderWidth = myBorderWidth
- , normalBorderColor = myNormalBorderColor
- , focusedBorderColor = myFocusedBorderColor
- , layoutHook = myLayout
- , manageHook = myManageHook
- , logHook = myLogHook h
- } `additionalKeysP` myKeys
- colorBG = "#303030" -- background
- colorFG = "#606060" -- foreground
- colorFG2 = "#909090" -- foreground w/ emphasis
- colorFG3 = "#c4df90" -- foreground w/ strong emphasis
- colorUrg = "#cc896d" -- urgent
- myTerminal = "xterm"
- myWorkspaces = ["1-main","2-web","3-chat","4-media","5-torrent"] ++ map show [6..9]
- myModMask = mod4Mask
- myBorderWidth = 1
- myNormalBorderColor = colorBG
- myFocusedBorderColor = colorFG3
- -- Layouts
- myLayout = avoidStruts $ onWorkspace "3-chat" imLayout
- $ standardLayouts
- where
- standardLayouts = tiled ||| Mirror tiled ||| full
- -- im roster on left tenth, standardLayouts in other nine tenths
- imLayout = withIM (1/10) imProp standardLayouts
- imProp = Role "buddy_list"
- tiled = hinted (ResizableTall nmaster delta ratio [])
- full = hinted (noBorders Full)
- -- like hintedTile but for any layout
- hinted l = layoutHintsWithPlacement (0,0) l
- nmaster = 1
- delta = 3/100
- ratio = toRational (2/(1 + sqrt 5 :: Double)) -- golden ratio
- -- ManageHook
- myManageHook = (composeAll . concat $
- [ [resource =? r --> doIgnore | r <- myIgnores] -- ignore desktop
- , [className =? c --> doShift "2-web" | c <- myWebs ] -- move webs to web
- , [title =? t --> doShift "3-chat" | t <- myChatT ] -- move chats to chat
- , [className =? c --> doShift "3-chat" | (c,_) <- myIM ] -- move chats to chat
- , [className =? c --> doCenterFloat | c <- myFloats ] -- float my floats
- , [name =? n --> doCenterFloat | n <- myNames ] -- float my names
- , [isFullscreen --> myDoFullFloat ]
- ]) <+> manageTypes <+> manageDocks <+> manageScratchPad
- where
- role = stringProperty "WM_WINDOW_ROLE"
- name = stringProperty "WM_NAME"
- -- [("ClassName","Role")]
- myIM = [("Pidgin","buddy_list")]
- -- titles
- myChatT = ["irssi","mutt"]
- -- classnames
- myFloats = ["MPlayer","Zenity","VirtualBox","Xmessage","Save As...","XFontSel"]
- myWebs = ["Navigator","Shiretoko","Namoroka","Firefox","Uzbl","uzbl","Google-chrome", "Chromium"]
- -- resources
- myIgnores = ["desktop","desktop_window"]
- -- names
- myNames = ["bashrun","Google Chrome Options","Chromium Options"]
- -- a trick for fullscreen but stil allow focusing of other WSs
- myDoFullFloat :: ManageHook
- myDoFullFloat = doF W.focusDown <+> doFullFloat
- -- manage the scratchpad
- manageScratchPad :: ManageHook
- manageScratchPad = scratchpadManageHook (W.RationalRect l t w h)
- where
- -- bottom 10% of the monitor
- h = 0.1
- w = 1
- t = 1 - h
- l = 1 - w
- -- modified version of manageDocks
- manageTypes :: ManageHook
- manageTypes = checkType --> doCenterFloat
- checkType :: Query Bool
- checkType = ask >>= \w -> liftX $ do
- m <- getAtom "_NET_WM_WINDOW_TYPE_MENU"
- d <- getAtom "_NET_WM_WINDOW_TYPE_DIALOG"
- u <- getAtom "_NET_WM_WINDOW_TYPE_UTILITY"
- mbr <- getProp32s "_NET_WM_WINDOW_TYPE" w
- case mbr of
- Just [r] -> return $ elem (fromIntegral r) [m,d,u]
- _ -> return False
- -- LogHook
- myLogHook :: Handle -> X ()
- myLogHook h = dynamicLogWithPP $ xmobarPP { ppOutput = hPutStrLn h }
- -- Keys
- myKeys = [ ("M-S-t" , scratchPad ) -- Spawn scratchpad terminal
- ]
- where
- scratchPad = scratchpadSpawnActionTerminal
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement