Xmonad/Config archive/skorpan's xmonad.hs

From HaskellWiki
< Xmonad‎ | Config archive
Revision as of 21:03, 15 December 2007 by Skorpan (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

-- -- ~/.xmonad/xmonad.hs --

-- import the necessary libraries

import XMonad import XMonad.ManageHook import XMonad.Operations import XMonad.Actions.CycleWS import XMonad.Actions.DwmPromote import XMonad.Actions.RotSlaves import XMonad.Actions.RotView import XMonad.Actions.SinkAll import XMonad.Hooks.DynamicLog ( PP(..), dynamicLogWithPP, dzenColor, wrap, defaultPP ) import XMonad.Hooks.UrgencyHook import XMonad.Layout.Grid import XMonad.Layout.Maximize 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

dmenuExec = "exe=`dmenu_path | dmenu -b -fn '-*-terminus-*-r-normal-*-*-120-*-*-*-*-iso8859-*' -nb '#000000' -nf '#FFFFFF' -sb '#333333'` && eval \"exec $exe\"" myIconsDir = "/home/deniz/usr/share/dzen2/icons" myStatusBar = "dzen2 -bg '#222222' -fg '#777777' -h 16 -w 640 -sa c -e -fn '-*-terminus-*-r-normal-*-*-120-*-*-*-*-iso8859-*' -ta l"

main = do din <- spawnPipe myStatusBar

         xmonad $ defaultConfig
                    { borderWidth        = 2
                    , normalBorderColor  = "#555555"
                    , focusedBorderColor = "#dddddd"
                    , workspaces         =
                        ["1:main", "2:web", "3:dev"] ++
                        map show [4..7] ++ ["8:warez","9:music"]
                    , terminal           = "urxvt"
                    , modMask            = mod4Mask
                    , defaultGaps        = [(16,0,0,0)]
                    , manageHook         = manageHook defaultConfig <+> myManageHook
                    , logHook            = dynamicLogWithPP $ myPP din
                    , layoutHook         = toggleLayouts (noBorders Full) $
                                           smartBorders $
                                           tiled |||
                                           Mirror tiled
                                           ||| Full
                                           ||| Grid
                                           ||| tabbed shrinkText defaultTConf
                                           ||| maximize (Tall 1 (3%100) (1%2))
                    , keys               = \c -> myKeys c `M.union` keys defaultConfig c
                    , mouseBindings      = \c -> myMouse c `M.union` mouseBindings defaultConfig c
                    }
                    where
                      tiled   = Tall nmaster delta ratio
                      nmaster = 1
                      ratio   = 50%100
                      delta   = 5%100

-- 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 "2:web") ]
   ]
   where
       myIgnores       = []
       myFloats        = ["feh",
                          "GIMP",
                          "gimp"]
       myOtherFloats   = ["Bon Echo Preferences",
                          "Mail/News Preferences",
                          "Bon Echo - Restore Previous Session",
                          "MPlayer"] 

-- modify/add default key binds -- myKeys conf@(XConfig {modMask = modm}) = M.fromList $

          [ ((modm, xK_p                   ), spawn dmenuExec)
          , ((modm, xK_x                   ), sendMessage ToggleLayout)
          , ((modm, xK_z                   ), toggleWS)
          , ((modm, xK_Left                ), windows W.focusUp)
          , ((modm, xK_Right               ), windows W.focusDown)
          , ((modm, xK_Up                  ), windows W.focusUp)
          , ((modm, xK_Down                ), windows W.focusDown)
          , ((modm, xK_Return              ), spawn $ XMonad.terminal conf)
          , ((modm .|. shiftMask, xK_Tab   ), rotSlavesUp)
          , ((modm .|. shiftMask, xK_Right ), rotView True)
          , ((modm .|. shiftMask, xK_Left  ), rotView False)
          ]

-- modify/add default mouse binds -- myMouse (XConfig {modMask = modm}) = M.fromList $

          [ ((modm, button3), (\w -> focus w >> Flex.mouseResizeWindow w))
          , ((modm, button4), (\_ -> rotView True)) 
          , ((modm, button5), (\_ -> rotView False))
          ]

-- dynamiclog pretty printer for dzen -- ironic that this is "pretty printer" with such fugly code. myPP h = defaultPP

        { ppCurrent = wrap "^fg(#ffffff)^bg(#888888)^p(3)" "^p(2)^fg()^bg()" . \wsId ->
                      if (':' `elem` wsId) then
                          drop 2 wsId
                      else wsId
        , ppVisible = wrap "^bg(grey30)^fg(grey75)^p(2)" "^p(2)^fg()^bg()"
        , ppHidden  = wrap "^fg(#ffffff)^bg()^p(2)" "^p(3)^fg()^bg()" . \wsId ->
                      if (':' `elem` wsId) then
                          drop 2 wsId
                      else wsId
        , ppHiddenNoWindows = id . \wsId ->
                              if (':' `elem` wsId) then
                                  drop 2 wsId
                              else wsId
        , ppSep     = " ^fg(#ffffff)^r(2x2)^p(2)^fg() "
        , ppWsSep   = " "
        , ppLayout  = (\x -> case x of
                               "Tall" ->
                                   " ^i(" ++ myIconsDir ++ "/tall.xbm) "
                               "Mirror Tall" ->
                                   " ^i(" ++ myIconsDir ++ "/mtall.xbm) "
                               "Full" ->
                                   " ^i(" ++ myIconsDir ++ "/full.xbm) "
                               "Grid" ->
                                   " ^i(" ++ myIconsDir ++ "/grid.xbm) "
                               "Tabbed" ->
                                   " ^i(" ++ myIconsDir ++ "/tabbed.xbm) "
                               "Maximize Tall" ->
                                   " ^i(" ++ myIconsDir ++ "/maximize.xbm) "
                      )
        , ppTitle   = dzenColor "white" ""
        , ppOutput  = hPutStrLn h
        }