Xmonad/Config archive/twifkak's xmonad.hs

From HaskellWiki
< Xmonad‎ | Config archive
Revision as of 02:19, 11 November 2007 by Twifkak (talk | contribs) (my xmonad.hs, config for 0.5)
(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 Core import XMonad import XMonad.Layouts import XMonad.Operations import qualified XMonad.StackSet as W

-- GHC hierarchical libraries import Data.Bits ((.|.)) import qualified Data.Map as M import Data.Ratio ((%)) import Graphics.X11.Xlib

-- Contribs import XMonad.Actions.CycleWS import XMonad.Actions.SwapWorkspaces import XMonad.Actions.Submap import XMonad.Actions.WindowBringer import XMonad.Hooks.UrgencyHook import XMonad.Layout.NoBorders import XMonad.Layout.Tabbed import XMonad.Layout.WindowNavigation

-- Get ready! main = xmonad $ defaultConfig

               { workspaces     = workspaces'
               , modMask        = modMask'
               , numlockMask    = 0
               , layoutHook     = layoutHook'
               , terminal       = "urxvtc || urxvt"
               , mouseBindings  = mouseBindings'
               }
               `additionalKeys` keys'

modMask' = mod4Mask

workspaces' = map show $ [1 .. 9 :: Int] ++ [0]

layoutHook' = Layout $ withUrgencyHook dzenUrgencyHook { args = ["-bg", "darkgreen", "-xs", "1"] }

                    $ configurableNavigation noNavigateBorders
                    $ layouts

layouts = tiled

         ||| Mirror tiled
         ||| noBorders (tabbed shrinkText defaultTConf { fontName = "fixed" })
 where
    tiled   = Tall nmaster delta ratio
    nmaster = 1     -- The default number of windows in the master pane
    ratio   = 1%2   -- Default proportion of screen occupied by master pane
    delta   = 3%100 -- Percent of screen to increment by when resizing panes

-- M.union is left-biased, so we place precedence towards the user-defined keys. additionalKeys :: XConfig -> [((ButtonMask, KeySym), X ())] -> XConfig additionalKeys conf keysList = conf { keys = \cnf -> M.union (M.fromList keysList) (keys conf cnf) }

keys' =

   [ ((modMask' .|. shiftMask, xK_d     ), spawn "date | dzen2 -p 2 -xs 1") -- %! Print current date
   , ((modMask' .|. mod1Mask,  xK_m     ), submap $ M.fromList -- %! MPD prefix key
       [ ((modMask' .|. mod1Mask,  xK_p     ), spawn "mpc toggle") -- %! MPD: Toggle pause/play
       , ((modMask' .|. mod1Mask,  xK_m     ), spawn "mpc | head -1 | dzen2 -p 2 -xs 1") -- %! MPD: Print the currently playing song
       , ((modMask' .|. mod1Mask,  xK_comma ), spawn "mpc prev") -- %! MPD: Go to previous song
       , ((modMask' .|. mod1Mask,  xK_period), spawn "mpc next") -- %! MPD: Go to next song
       ] )
   , ((modMask' .|. mod1Mask,  xK_space ), withFocused $ \w -> hide w >> reveal w >> setFocusX w) -- %! force the window to redraw itself
   , ((modMask'              , xK_i     ), prevWS)
   , ((modMask'              , xK_o     ), nextWS)
   , ((modMask' .|. shiftMask, xK_i     ), shiftToPrev)
   , ((modMask' .|. shiftMask, xK_o     ), shiftToNext)
   , ((modMask',               xK_a     ), sendMessage $ Go L)
   , ((modMask',               xK_w     ), sendMessage $ Go U)
   , ((modMask',               xK_s     ), sendMessage $ Go D)
   , ((modMask',               xK_d     ), sendMessage $ Go R)
   , ((modMask' .|. shiftMask, xK_g     ), gotoMenu)
   , ((modMask' .|. shiftMask, xK_b     ), bringMenu)
   , ((modMask'              , xK_BackSpace), focusUrgent)
   ]
   ++
   -- modMask'-[1..9] %! Switch to workspace N
   -- modMask'-shift-[1..9] %! Move client to workspace N
   [((m .|. modMask', k), windows $ f i)
       | (i, k) <- zip workspaces' $ [xK_1 .. xK_9] ++ [xK_0]
       , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
   ++
   -- modMask'-{e,r} %! Switch to physical/Xinerama screens 1 or 2
   -- modMask'-shift-{e,r} %! Move client to screen 1 or 2
   [((m .|. modMask', key), screenWorkspace sc >>= flip whenJust (windows . f))
       | (key, sc) <- zip [xK_e, xK_r] [0..]
       , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
   ++
   [((modMask' .|. mod1Mask, k), windows $ swapWithCurrent i)
       | (i, k) <- zip workspaces' $ [xK_1 .. xK_9] ++ [xK_0]]

-- I have "Emulate three button mouse" turned on in Darwin X11, so mod4 (Apple) right-clicks. -- Use ctrl-shift, instead. mouseBindings' (XConfig {XMonad.modMask = modMask}) = M.fromList $

   -- ctrl-shift-button1 %! Set the window to floating mode and move by dragging
   [ ((controlMask .|. shiftMask, button1), (\w -> focus w >> mouseMoveWindow w))
   -- ctrl-shift-button2 %! Raise the window to the top of the stack
   , ((controlMask .|. shiftMask, button2), (\w -> focus w >> windows W.swapMaster))
   -- ctrl-shift-button3 %! Set the window to floating mode and resize by dragging
   , ((controlMask .|. shiftMask, button3), (\w -> focus w >> mouseResizeWindow w))
   ]