Created
September 26, 2011 22:35
-
-
Save semifor/1243606 to your computer and use it in GitHub Desktop.
xmonad.hs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import XMonad | |
| import System.IO | |
| import qualified XMonad.StackSet as W | |
| import Data.Ratio ((%)) | |
| import XMonad.Actions.Commands | |
| import XMonad.Hooks.DynamicLog | |
| import XMonad.Hooks.ManageDocks | |
| import XMonad.Hooks.ManageHelpers | |
| import XMonad.Hooks.UrgencyHook | |
| import XMonad.Layout.Grid | |
| import XMonad.Layout.IM | |
| import XMonad.Layout.NoBorders | |
| import XMonad.Layout.PerWorkspace | |
| import XMonad.Layout.Reflect | |
| import XMonad.Layout.ToggleLayouts | |
| import XMonad.Util.EZConfig (additionalKeysP) | |
| import XMonad.Util.Run(spawnPipe, unsafeSpawn) | |
| import XMonad.Util.Scratchpad | |
| ------------------------------------------------------------------------ | |
| -- workspaces | |
| myWorkspaces = ["1:comm","2:dev","3:web"] ++ map show [4..9] | |
| ------------------------------------------------------------------------ | |
| -- keybindings | |
| myKeybindings = | |
| [ ("M-<Backspace>", focusUrgent ) | |
| , ("M-<Esc>", focusUrgent ) | |
| , ("M-x", commands >>= runCommand ) | |
| , ("M-b", sendMessage ToggleStruts ) | |
| , ("<XF86AudioLowerVolume>", unsafeSpawn "amixer -q sset Master 2dB-" ) | |
| , ("<XF86AudioMute>", unsafeSpawn "amixer -q sset Master toggle" ) | |
| , ("<XF86AudioRaiseVolume>", unsafeSpawn "amixer -q sset Master 2dB+" ) | |
| , ("<Print>", unsafeSpawn "scrot '%Y-%m-%d-%H%M_$wx$h.png' -e 'mv $f ~/screenshots/'") | |
| ] | |
| where commands = defaultCommands | |
| ------------------------------------------------------------------------ | |
| -- window rules | |
| myManageHook = scratchpadManageHookDefault <+> | |
| (composeAll | |
| [ className =? "psi" --> doF (W.shift "1:comm") | |
| , className =? "Iceweasel" --> doShift "3:web" | |
| -- this doesn't work; what do I need to look for? | |
| , (className =? "Iceweasel" <&&> resource =? "Dialag") --> doFloat | |
| , isFullscreen --> doFullFloat | |
| ] ) | |
| ------------------------------------------------------------------------ | |
| -- status bar and logging | |
| myPP statusPipe = xmobarPP | |
| { ppOutput = hPutStrLn statusPipe | |
| , ppTitle = xmobarColor "green" "" . shorten 60 | |
| , ppUrgent = xmobarColor "red" "" . wrap "!" "!" | |
| } | |
| myLogHook = dynamicLogWithPP . myPP | |
| ------------------------------------------------------------------------ | |
| -- layouts | |
| tiled = Tall nmaster delta ratio | |
| where nmaster = 1 | |
| ratio = 1/2 | |
| delta = 3/100 | |
| imLayout = avoidStruts $ | |
| smartBorders $ | |
| reflectHoriz $ | |
| -- WM_CLASS(STRING) = "main", "psi" | |
| -- Resource is first string, ClassName is second | |
| withIM (1%12) (And (Resource "main") (ClassName "psi")) (reflectHoriz tiled) | |
| -- withIM (1%12) (Role "psimain") (reflectHoriz tiled) | |
| genericLayouts = avoidStruts $ | |
| smartBorders $ | |
| toggleLayouts (noBorders Full) $ | |
| tiled ||| Mirror tiled ||| (noBorders Full) ||| imLayout | |
| myLayouts = onWorkspace "1:comm" imLayout $ | |
| genericLayouts | |
| ------------------------------------------------------------------------ | |
| -- config itself | |
| myConfig statusPipe = defaultConfig | |
| { borderWidth = 2 | |
| , focusFollowsMouse = True | |
| , terminal = "urxvt" | |
| , normalBorderColor = "grey" -- "#cccccc" | |
| , focusedBorderColor = "black" -- "#cd8b00" | |
| , manageHook = manageDocks <+> myManageHook | |
| , layoutHook = myLayouts | |
| , logHook = myLogHook statusPipe | |
| , workspaces = myWorkspaces | |
| } | |
| -- myUrgencyHook = NoUrgencyHook | |
| myUrgencyHook = SpawnUrgencyHook "aplay /usr/share/psi/sound/chat1.wav #" | |
| main = do | |
| statusPipe <- spawnPipe "xmobar ~/.xmonad/xmobar" | |
| xmonad $ | |
| withUrgencyHook myUrgencyHook $ | |
| myConfig statusPipe `additionalKeysP` myKeybindings |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment