All pastes #989641 Raw Edit

Miscellany

public text v1 · immutable
#989641 ·published 2008-04-19 15:58 UTC
rendered paste body
import XMonad
import XMonad.ManageHook
import XMonad.Operations
import XMonad.Actions.CycleWS
import XMonad.Actions.DwmPromote
import XMonad.Actions.RotSlaves
import XMonad.Actions.SinkAll
import XMonad.Hooks.DynamicLog   ( PP(..), dynamicLogWithPP, dzenColor, wrap, defaultPP )
import XMonad.Layout 
import XMonad.Layout.Grid
import XMonad.Layout.NoBorders   ( noBorders, smartBorders )
import XMonad.Layout.Tabbed
import XMonad.Layout.ToggleLayouts
import XMonad.Util.Run

import qualified XMonad.StackSet as W
import qualified XMonad.Actions.FlexibleResize as Flex
import qualified Data.Map as M
import Data.Bits ((.|.))
import Data.Ratio
import Graphics.X11
import System.IO

statusBarCmd= "dzen2 -bg '#000000' -fg '#777777' -x 2 -y 1 -h 16 -w 590 -fn '-*-terminus-*-r-normal-*-*-120-*-*-*-*-iso8859-*' -sa c -e '' -ta l"
 
main = do din <- spawnPipe statusBarCmd
          xmonad $ defaultConfig
 
                     { borderWidth        = 2
                     , normalBorderColor  = "#333333"
                     , focusedBorderColor = "#555555" 
                     , workspaces         = ["1:irc", "2:main", "3:web", "4:stuff", "6:float"]
                     , terminal           = "urxvtc"
                     , modMask            = mod4Mask
                     , defaultGaps        = [(15,0,0,0)]
        	         , keys               = \c -> myKeys c `M.union` keys defaultConfig c
                     , manageHook         = manageHook defaultConfig <+> myManageHook
                     , logHook            = dynamicLogWithPP $ myPP din
                     , layoutHook         = toggleLayouts (noBorders Full) $
                        smartBorders $ tiled ||| Mirror tiled ||| Full ||| Grid ||| tabbed shrinkText
                     }
                     where
                     tiled   = Tall nmaster delta ratio

                     -- The default number of windows in the master pane
                     nmaster = 1

                     -- Default proportion of screen occupied by master pane
                     ratio   = 2/(1+(toRational(sqrt(5)::Double))) -- golden
                     
                     -- Percent of screen to increment by when resizing panes
                     delta   = 5%100

-- modify/add default key binds
--
myKeys (XConfig {modMask = modm}) = M.fromList $
           [
           -- custom dmenu
           ((modm, xK_p), spawn "exe=`dmenu_path | dmenu -nb '#000000' -nf '#EEEEEE' -sb '#a6c292'` && eval \"exec $exe\"") -- %! Launch dmenu
	   -- Emergency unclutter kill
	   , ((modm, xK_u), spawn "killall unclutter")
           -- sink all floating windows
           ,  ((modm .|. shiftMask, xK_t), sinkAll)
           -- swap focused with master, or master with next in line 
           , ((modm, xK_Return), dwmpromote)
           , ((modm, xK_KP_Enter), dwmpromote)
           -- rotate slave clients
           , ((modm .|. shiftMask, xK_Tab   ), rotSlavesUp)
           -- switch to previous workspace
           , ((modm, xK_z), toggleWS)
           -- toggle to fullscreen.
           , ((modm, xK_x), sendMessage ToggleLayout)
           -- session management
           , ((modm .|. shiftMask .|. controlMask, xK_k), spawn "xkill")
           , ((modm .|. shiftMask .|. controlMask, xK_End), spawn "sudo shutdown -h now")
           , ((modm .|. shiftMask .|. controlMask, xK_Delete), spawn "sudo shutdown -r now")
           -- application hotkeys
           , ((mod4Mask, xK_f), spawn "firefox")
           , ((mod4Mask, xK_q), spawn "thunar")
           , ((mod4Mask, xK_v), spawn "urxvtc -e alsamixer")
	   , ((mod4Mask, xK_h), spawn "urxvtc -e htop")
           , ((mod4Mask, xK_Print), spawn "scrot %Y%m%d_quarks.png -d 3 -t 20")
           ]

-- application control 
--
myManageHook :: ManageHook
myManageHook = composeAll . concat $
    [ [ className   =? c                 --> doFloat | c <- myFloats]
    , [ title       =? t                 --> doFloat | t <- myOtherFloats]
    , [ resource    =? r                 --> doIgnore | r <- myIgnores]
    , [ className   =? "Firefox-bin"     --> doF (W.shift "3:web") ]
    , [ className   =? "openftd_gui"  	 --> doF (W.shift "6:float") ]
    , [ className   =? "Gimp"  	 --> doF (W.shift "6:float") ]
    ]
    where
        myIgnores       = ["panel", "stalonetray", "trayer"]
        myFloats        = ["xv", "feh", "mplayer", "smplayer", "SMPlayer", "GIMP", "gimp", "gimp-2.4", "Pidgin", "pidgin"]
        myOtherFloats   = ["alsamixer", "Bon Echo Preferences", "Mail/News Preferences", "Bon Echo - Restore Previous Session"] 


-- dynamiclog pretty printer for dzen
-- ^bg(#8ba574) ipv a6c292
--
myPP h = defaultPP 
                 { ppCurrent = wrap "^fg(#000000)^bg(#a6c292)^p(2)^i(/home/quarks/dzen/dzen_bitmaps/has_win.xbm)" "^p(2)^fg(grey55)^bg()"
                  , ppVisible = wrap "^bg(grey30)^fg(grey75)^p(2)" "^p(2)^fg(grey55)^bg()"
                  , ppSep     = " ^fg(grey60)^r(3x3)^fg() "
                  , ppLayout  = dzenColor "#80AA83" "" .
                                (\x -> case x of
                                         "Tall" -> "tall ^i(/home/quarks/dzen/dzen_bitmaps/tall.xbm)"
                                         "Mirror Tall" -> "mirror ^i(/home/quarks/dzen/dzen_bitmaps/mtall.xbm)"
                                         "Full" -> "full ^i(/home/quarks/dzen/dzen_bitmaps/full.xbm)"
                                         "Grid" -> "grid"
                                         "Tabbed" -> "tabbed"
                                )
                  , ppTitle   = dzenColor "white" "" . wrap "< " " >" 
                  , ppOutput   = hPutStrLn h
                  }