Xmonad/General xmonad.hs config tips

From HaskellWiki
< Xmonad
Revision as of 23:54, 14 January 2008 by Neale (talk | contribs)
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.

This site is for general tips for configuring xmonad.hs, for example "How to make window X float by default" and others. If you can't find what you're searching for, you may want to look at the Config archive.

Please add what you found useful in your xmonad.hs and course improving existing tips or adding alternatives is highly appreciated!

Making window float by default, or send it to specific workspace

This example sends Firefox to workspace "web" by default, makes Gajim float and sends it to webspace "jabber" and Xmessage is floating by default, too.

  main = xmonad $ defaultConfig
  {
  ....
  , manageHook    = manageHook defaultConfig <+> myManageHook
  ...
  }
  myManageHook :: ManageHook
  myManageHook = composeAll . concat $
      [ [ className =? c --> doFloat | c <- myFloats ]
      , [ className =? "Firefox-bin" --> doF (W.shift "web" ) ]
      , [ className =? "Gajim.py" --> doF (W.shift "jabber" ) ] ]
      where myFloats = ["Gajim.py", "Xmessage"]

Adding your own keybindings

This adds Mod-x keybinding for running xlock.

  import qualified Data.Map as M
  ....
  main = xmonad $ defaultConfig
  {
  ....
  , keys          = \c -> mykeys c `M.union` keys defaultConfig c }
  ....
  }
  where
      mykeys (XConfig {modMask = modm}) = M.fromList $
           [ ((modm , xK_x), spawn "xlock") ]

Sharing a configuration across different hosts

It is possible to have different parts of the configuration file vary from one host to another, without needing a different config file for each host. Here is an example from my configuration file:

   import System.Posix.Unistd
   .
   .
   .
   main = do
       host <- fmap nodeName getSystemID
       xmonad $ defaultConfig
         { terminal           = "rxvt"
         , modMask            = (if host == "janice" then
                                   mod1Mask .|. controlMask
                                 else
                                   mod4Mask)}