Advertisement
Guest User

XMonad.hs

a guest
Jun 29th, 2011
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Import General
  2. import XMonad
  3. import qualified XMonad.StackSet as W
  4. import qualified Data.Map as M
  5. import XMonad.Util.EZConfig(additionalKeys)
  6. import System.Exit
  7. import Graphics.X11.Xlib
  8. import System.IO
  9.  
  10. -- Import Actions
  11. import XMonad.Actions.CycleWS
  12. import XMonad.Actions.CycleWindows
  13.  
  14. -- Import Utilities
  15. import XMonad.Util.Scratchpad
  16. import XMonad.Util.Run(spawnPipe)
  17. import qualified XMonad.Prompt      as P
  18. import XMonad.Prompt.Shell
  19. import XMonad.Prompt
  20.  
  21. -- Import Hooks
  22. import XMonad.Hooks.DynamicLog
  23. import XMonad.Hooks.ManageDocks
  24. import XMonad.Hooks.UrgencyHook
  25. import XMonad.Hooks.ManageHelpers
  26.  
  27. -- Import Layouts
  28. import XMonad.Layout.Tabbed
  29. import XMonad.Layout.Grid
  30. import XMonad.Layout.NoBorders
  31.  
  32. main = do
  33.     xmproc <- spawnPipe "xmobar"
  34.     xmonad $ withUrgencyHook NoUrgencyHook $ defaultConfig
  35.         { terminal              = myTerminal
  36.         , modMask               = myModMask
  37.         , focusFollowsMouse     = False
  38.  
  39.         , workspaces            = myWorkspaces
  40.         , normalBorderColor     = myNormalBorderColor
  41.         , focusedBorderColor    = myFocusedBorderColor
  42.  
  43.         , keys                  = myKeys
  44.         --, mouseBindings         = myMouseBindings
  45.  
  46.         , layoutHook            = myLayoutHook
  47.         , manageHook            = myManageHook
  48.         --, handleEventHook       = myEventHook
  49.         , logHook               = myLogHook xmproc
  50.         --, startupHook           = myStartupHook
  51.         }
  52.  
  53. -- Hooks
  54. -- LayoutHook
  55. myLayoutHook = standardLayouts
  56.     where
  57.         standardLayouts = avoidStruts $ smartBorders $ (Tall ||| Grid ||| simpleTabbed ||| Full)
  58.  
  59. -- Workspaces
  60. myWorkspaces :: [WorkspaceId]
  61. myWorkspaces = ["@", "#!", "XD"]
  62.  
  63. -- Automatically Move App to Workspace or Float
  64. myManageHook :: ManageHook
  65. myManageHook = scratchpadManageHook (W.RationalRect 0.25 0.375 0.5 0.35) <+> ( composeAll . concat $
  66.                 [[isFullscreen                  --> doFullFloat
  67.                 , className =? "Xmessage"       --> doCenterFloat
  68.                 , className =? "feh"            --> doCenterFloat
  69.                 , className =? "MPlayer"        --> (doCenterFloat <+> doShift "XD")
  70.                 , className =? "Firefox"        --> doShift "@"
  71.                 , className =? "Opera"          --> doShift "@"
  72.                 , className =? "Chromium"       --> doShift "@"
  73.                 ]]
  74.                         ) <+> manageDocks
  75.  
  76. -- LogHook
  77. myLogHook :: Handle -> X ()
  78. myLogHook h = dynamicLogWithPP $ customPP { ppOutput = hPutStrLn h }
  79.  
  80. -- Cuteness
  81. -- Borders
  82. myBorderWidth :: Dimension
  83. myBorderWidth = 1
  84. myNormalBorderColor, myFocusedBorderColor :: String
  85. myNormalBorderColor = "#151515"
  86. myFocusedBorderColor = "#DDDDDD"
  87. -- Xmobar
  88. customPP :: PP
  89. customPP = defaultPP    {
  90.                           ppHidden = xmobarColor "#151515" ""
  91.                         , ppCurrent = xmobarColor "#DDDDDD" "" . wrap "[" "]"
  92.                         , ppUrgent = xmobarColor "#FF0000" "" . wrap "*" "*"
  93.                         , ppLayout = xmobarColor "#DDDDDD" ""
  94.                         , ppTitle = xmobarColor "#DDDDDD" "" . shorten 80
  95.                         , ppSep = " // "
  96.                         }
  97. -- Tabs
  98. --myTheme = defaultTheme  { decoHeight = 16
  99. --                        , activeColor = "#a6c292"
  100. --                        , activeBorderColor = "#a6c292"
  101. --                        , activeTextColor = "#000000"
  102. --                        , inactiveBorderColor = "#000000"
  103. --                        }
  104. --------------------------------------------------------------------------
  105. -- Terminal
  106. myTerminal :: String
  107. myTerminal = "urxvt"
  108.  
  109. -- Bindings
  110. -- modMask
  111. myModMask :: KeyMask
  112. myModMask = mod4Mask
  113. -- Keys
  114. myKeys :: XConfig Layout -> M.Map (KeyMask, KeySym) (X ())
  115. myKeys conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $
  116.     [ ((modMask, xK_Return), spawn $ XMonad.terminal conf)
  117.     , ((modMask, xK_z), kill)
  118.     , ((modMask, xK_p), shellPrompt)
  119.     , ((modMask, xK_space), sendMessage NextLayout)
  120.     , ((modMask, xK_n), refresh)
  121.     -- Launch Programs
  122.     , ((modMask, xK_s), scratchpadSpawnAction)
  123.     , ((modMask, xK_w), spawn "firefox")
  124.     , ((modMask, xK_e), spawn "eclipse")
  125.     -- Focus
  126.     , ((modMask, xK_Tab), windows W.focusDown)
  127.     , ((modMask, xK_j), windows W.focusDown)
  128.     , ((modMask, xK_k), windows W.focusUp)
  129.     , ((modMask, xK_m), windows W.focusMaster)
  130.     -- Swapping
  131.     , ((modMask .|. shiftMask, xK_Return), windows W.swapMaster)
  132.     , ((modMask .|. shiftMask, xK_j), windows W.swapDown)
  133.     , ((modMask .|. shiftMask, xK_k), windows W.swapUp)
  134.     -- Resizing
  135.     , ((modMask, xK_h), sendMessage Shrink)
  136.     , ((modMask, xK_l), sendMessage Expand)
  137.     -- ncmpcpp
  138.     , ((), spawn "ncmpcpp prev")
  139.     , ((), spawn "ncmpcpp next")
  140.     , ((), spawn "ncmpcpp toggle")
  141.     -- Volume
  142.     , ((), spawn "amixer -q set Master 2dB+ unmute")
  143.     , ((), spawn "amixer -q set Master 2dB- unmute")
  144.     , ((), spawn "amixer -q set Master toggle")
  145.     -- Quit / Restart
  146.     , ((modMask .|. shiftMask, xK_q), io (exitWith ExitSuccess))
  147.     , ((modMask, xK_q), restart "xmonad" True)
  148.     ]
  149.     ++
  150.     -- mod-[1..9] %! Switch to workspace N
  151.     -- mod-shift-[1..9] %! Move client to workspace N
  152.     [((m .|. modMask, k), windows $ f i)
  153.         | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
  154.         , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement