Personal tools

Xmonad/Config archive/thoughtpolice's xmonad.hs

From HaskellWiki

< Xmonad | Config archive(Difference between revisions)
Jump to: navigation, search
(added config)
Current revision (15:29, 10 May 2009) (edit) (undo)
 
(14 intermediate revisions not shown.)
Line 1: Line 1:
[[Category:XMonad configuration]]
[[Category:XMonad configuration]]
-
 
+
~/.xmonad/xmonad.hs:
<haskell>--
<haskell>--
-- The horrible thing about the Two Minutes Hate was not that
-- The horrible thing about the Two Minutes Hate was not that
Line 8: Line 8:
import XMonad
import XMonad
import System.Exit
import System.Exit
 +
import Control.Monad.State
 +
import Control.Concurrent (forkIO)
import qualified XMonad.StackSet as W
import qualified XMonad.StackSet as W
import qualified Data.Map as M
import qualified Data.Map as M
import qualified XMonad.Actions.Submap as SM
import qualified XMonad.Actions.Submap as SM
import qualified XMonad.Actions.Search as S
import qualified XMonad.Actions.Search as S
 +
import XMonad.Hooks.UrgencyHook
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.ManageDocks
-
import XMonad.Util.EZConfig
+
import XMonad.Hooks.DynamicLog
 +
import XMonad.Layout.NoBorders
 +
import XMonad.Layout.Tabbed
import XMonad.Prompt
import XMonad.Prompt
import XMonad.Prompt.Shell
import XMonad.Prompt.Shell
import XMonad.Prompt.Ssh
import XMonad.Prompt.Ssh
 +
import XMonad.Util.EZConfig
 +
import XMonad.Util.Run
-
-- run xmonad
+
import qualified System.IO.UTF8 as UTF8
-
main :: IO ()
+
-
main = xmonad $ defaultConfig {
+
-
terminal = "urxvt +sb -fg white -bg black",
+
-
workspaces = ["web/irc","code"] ++ map show [3..9],
+
-
keys = myKeys,
+
-
manageHook = composeAll [className =? "Firefox" --> doF (W.shift "web/irc")]
+
-
<+> manageDocks, -- manage xmobar, uses ManageDocks
+
-
layoutHook = avoidStruts (tiled ||| Mirror tiled ||| Full)
+
-
}
+
-
 
+
-
tiled :: Tall a
+
-
tiled = Tall 1 (1/2) (3/100)
+
 +
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 :: XPConfig
xpc = defaultXPConfig { bgColor = "black"
xpc = defaultXPConfig { bgColor = "black"
Line 39: Line 60:
, height = 15
, height = 15
, historySize = 256 }
, historySize = 256 }
-
 
+
myKeys c = mkKeymap c $ -- keys; uses EZConfig
myKeys c = mkKeymap c $ -- keys; uses EZConfig
[ ("M-S-<Return>", spawn $ XMonad.terminal c) -- spawn terminal
[ ("M-S-<Return>", spawn $ XMonad.terminal c) -- spawn terminal
, ("M-p" , shellPrompt xpc) -- spawn menu program, uses Shell
, ("M-p" , shellPrompt xpc) -- spawn menu program, uses Shell
-
, ("M-s" , sshPrompt xpc) -- spawn ssh, uses Ssh
+
, ("M-s" , search) -- search websites, uses Search & Submap
 +
, ("M-S-s" , sshPrompt xpc) -- spawn ssh, uses Ssh
, ("M-S-c" , kill) -- kill window
, ("M-S-c" , kill) -- kill window
, ("M-<Space>" , sendMessage NextLayout) -- next layout
, ("M-<Space>" , sendMessage NextLayout) -- next layout
Line 60: Line 82:
, ("M-." , sendMessage (IncMasterN (-1))) -- decrease 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-b" , sendMessage ToggleStruts) -- toggle status bar gap, uses ManageDocks
-
, ("M-S-q" , broadcastMessage ReleaseResources
+
, ("M-C-q" , broadcastMessage ReleaseResources
>> restart "xmonad" True) -- restart xmonad
>> restart "xmonad" True) -- restart xmonad
, ("C-S-q" , io (exitWith ExitSuccess)) -- exit xmonad
, ("C-S-q" , io (exitWith ExitSuccess)) -- exit xmonad
-
, ("C-S-s" , SM.submap . mkKeymap c $ -- search sites. TODO: needs cleanup, but this works for now
 
-
zip ["g","h","a","i"]
 
-
. map (S.promptSearchBrowser xpc "ff3")
 
-
$ [S.google,S.hoogle,S.amazon,S.imdb])
 
] ++
] ++
-- mod-[1..9], Switch to workspace N
-- mod-[1..9], Switch to workspace N
Line 72: Line 90:
[(m ++ k, windows $ f w)
[(m ++ k, windows $ f w)
| (w, k) <- zip (XMonad.workspaces c) (map show [1..9])
| (w, k) <- zip (XMonad.workspaces c) (map show [1..9])
-
, (m, f) <- [("M-",W.greedyView), ("M-S-",W.shift)]]
+
, (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)]
 +
 +
</haskell>
 +
~/.xsession:
 +
<haskell># executed by xdm at login
 +
export LANG=en_US.UTF8
 +
$HOME/bin/xmobar &
 +
$HOME/bin/xmonad
</haskell>
</haskell>

Current revision

~/.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