Xmonad/Config archive/thoughtpolice's xmonad.hs

From HaskellWiki
< Xmonad‎ | Config archive
Revision as of 15:29, 10 May 2009 by Thoughtpolice (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:

--
-- The horrible thing about the Two Minutes Hate was not that 
-- one was obliged to act a part, but that it was impossible 
-- to avoid joining in.
--
import XMonad
import System.Exit
import Control.Monad.State
import Control.Concurrent (forkIO)
import qualified XMonad.StackSet as W
import qualified Data.Map        as M
import qualified XMonad.Actions.Submap as SM
import qualified XMonad.Actions.Search as S
import XMonad.Hooks.UrgencyHook
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.DynamicLog
import XMonad.Layout.NoBorders
import XMonad.Layout.Tabbed
import XMonad.Prompt
import XMonad.Prompt.Shell
import XMonad.Prompt.Ssh
import XMonad.Util.EZConfig
import XMonad.Util.Run

import qualified System.IO.UTF8 as UTF8

statusbar = "dzen2 -ta l"
 
main :: IO ()
main = do pipe <- spawnPipe statusbar
          xmonad $ withUrgencyHook NoUrgencyHook $ defaultConfig {
              terminal   = "urxvt +sb -fg white -bg black"
            , workspaces = ["web/irc","code", "reading"] ++ map show [4..9]
            , keys       = myKeys
            , layoutHook = avoidStruts layouts
            , manageHook = composeAll [ manageDocks  -- manage xmobar/dzen2, uses ManageDocks
                                      , className =? "Firefox" --> doF (W.shift "web/irc")
                                      , className =? "Xpdf"    --> doF (W.shift "reading")
                                      , className =? "Xchm"    --> doF (W.shift "reading")]
            , logHook    = dynamicLogWithPP defaultPP { ppCurrent = dzenColor "black" "grey"
                                                      , ppHidden  = dzenColor "grey"  "black" 
                                                      , ppUrgent  = dzenColor "red"   "yellow"
                                                      , ppSep     = "   |||   "
                                                      , ppWsSep   = " * "
                                                      , ppTitle   = shorten 90
                                                      , ppOrder   = reverse 
                                                      , ppOutput  = UTF8.hPutStrLn pipe } }
    where layouts  = smartBorders $ (Mirror $ Tall 1 (3/100) (1/2))
                 ||| simpleTabbed          
                 ||| Full
                        
 
xpc :: XPConfig
xpc = defaultXPConfig { bgColor  = "black"
                      , fgColor  = "grey"
                      , promptBorderWidth = 0
                      , position = Bottom
                      , height   = 15
                      , historySize = 256 }
 
myKeys c = mkKeymap c $                                 -- keys; uses EZConfig
    [ ("M-S-<Return>",  spawn $ XMonad.terminal c)       -- spawn terminal
    , ("M-p"         ,  shellPrompt xpc)                 -- spawn menu program, uses Shell
    , ("M-s"         ,  search)                          -- search websites, uses Search & Submap
    , ("M-S-s"       ,  sshPrompt xpc)                   -- spawn ssh, uses Ssh
    , ("M-S-c"       ,  kill)                            -- kill window
    , ("M-<Space>"   ,  sendMessage NextLayout)          -- next layout
    , ("M-S-<Space>" ,  setLayout $ XMonad.layoutHook c) -- default layout
    , ("M-n"         ,  refresh)                         -- resize to correct size
    , ("M-j"         ,  windows W.focusDown)             -- move focus; next window
    , ("M-k"         ,  windows W.focusUp)               -- move focus; prev. window
    , ("M-m"         ,  windows W.focusMaster)           -- focus on master
    , ("M-<Return>"  ,  windows W.swapMaster)            -- swap current with master
    , ("M-S-j"       ,  windows W.swapDown)              -- swap focused with next window
    , ("M-S-k"       ,  windows W.swapUp)                -- swap focused with prev. window
    , ("M-h"         ,  sendMessage Shrink)              -- shrink master area
    , ("M-l"         ,  sendMessage Expand)              -- expand master area
    , ("M-t"         ,  withFocused $ windows . W.sink)  -- put window back on tiling layer
    , ("M-,"         ,  sendMessage (IncMasterN 1))      -- increase number of windows in master pane
    , ("M-."         ,  sendMessage (IncMasterN (-1)))   -- decrease number of windows in master pane
    , ("M-b"         ,  sendMessage ToggleStruts)        -- toggle status bar gap, uses ManageDocks
    , ("M-C-q"       ,  broadcastMessage ReleaseResources
                        >> restart "xmonad" True)        -- restart xmonad
    , ("C-S-q"       ,  io (exitWith ExitSuccess))       -- exit xmonad
    ] ++
    -- mod-[1..9], Switch to workspace N
    -- mod-shift-[1..9], Move client to workspace N
    [(m ++ k, windows $ f w)
        | (w, k) <- zip (XMonad.workspaces c) (map show [1..9])
        , (m, f) <- [("M-",W.greedyView), ("M-S-",W.shift)]]
 
 where searchSite = S.promptSearchBrowser xpc "ff3"
       search     = SM.submap . mkKeymap c $
                     [("g", searchSite S.google)
                     ,("h", searchSite S.hoogle)
                     ,("a", searchSite S.amazon)
                     ,("i", searchSite S.imdb)
                     ,("y", searchSite S.youtube)
                     ,("w", searchSite S.wikipedia)]

~/.xsession:

# executed by xdm at login
export LANG=en_US.UTF8
$HOME/bin/xmobar &
$HOME/bin/xmonad