Skip to content

Instantly share code, notes, and snippets.

@semifor
Created September 26, 2011 22:35
Show Gist options
  • Select an option

  • Save semifor/1243606 to your computer and use it in GitHub Desktop.

Select an option

Save semifor/1243606 to your computer and use it in GitHub Desktop.
xmonad.hs
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