aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CONFIG10
-rw-r--r--README6
-rw-r--r--man/xmonad-template.hs276
-rw-r--r--xmonad.cabal2
4 files changed, 291 insertions, 3 deletions
diff --git a/CONFIG b/CONFIG
index e719e99..3ca457d 100644
--- a/CONFIG
+++ b/CONFIG
@@ -1,11 +1,17 @@
== Configuring xmonad ==
-xmonad is configured by creating and editing the Haskell file:
+xmonad is configured by creating and editing the file:
~/.xmonad/xmonad.hs
xmonad then uses settings from this file as arguments to the window manager,
-on startup.
+on startup. For a complete example of possible settings, see the file:
+
+ man/xmonad-template.hs
+
+Further examples are on the website, wiki and extension documentation.
+
+ http://haskell.org/haskellwiki/Xmonad
== A simple example ==
diff --git a/README b/README
index 86c7afe..16aa1c1 100644
--- a/README
+++ b/README
@@ -110,6 +110,12 @@ Running xmonad:
------------------------------------------------------------------------
+Configuring:
+
+ See the CONFIG document
+
+------------------------------------------------------------------------
+
XMonadContrib
There are many extensions to xmonad available in the XMonadContrib
diff --git a/man/xmonad-template.hs b/man/xmonad-template.hs
new file mode 100644
index 0000000..62d64fc
--- /dev/null
+++ b/man/xmonad-template.hs
@@ -0,0 +1,276 @@
+--
+-- xmonad example config file.
+--
+-- A template showing all available configuration hooks,
+-- and how to override the defaults in your own xmonad.hs conf file.
+--
+-- Normally, you'd only override those defaults you care about.
+--
+
+import XMonad
+import System.Exit
+
+import qualified XMonad.StackSet as W
+import qualified Data.Map as M
+
+-- The preferred terminal program, which is used in a binding below and by
+-- certain contrib modules.
+--
+myTerminal = "xterm"
+
+-- Width of the window border in pixels.
+--
+myBorderWidth = 1
+
+-- modMask lets you specify which modkey you want to use. The default
+-- is mod1Mask ("left alt"). You may also consider using mod3Mask
+-- ("right alt"), which does not conflict with emacs keybindings. The
+-- "windows key" is usually mod4Mask.
+--
+myModMask = mod1Mask
+
+-- The mask for the numlock key. Numlock status is "masked" from the
+-- current modifier status, so the keybindings will work with numlock on or
+-- off. You may need to change this on some systems.
+--
+-- You can find the numlock modifier by running "xmodmap" and looking for a
+-- modifier with Num_Lock bound to it:
+--
+-- > $ xmodmap | grep Num
+-- > mod2 Num_Lock (0x4d)
+--
+-- Set numlockMask = 0 if you don't have a numlock key, or want to treat
+-- numlock status separately.
+--
+myNumlockMask = mod2Mask
+
+-- The default number of workspaces (virtual screens) and their names.
+-- By default we use numeric strings, but any string may be used as a
+-- workspace name. The number of workspaces is determined by the length
+-- of this list.
+--
+-- A tagging example:
+--
+-- > workspaces = ["web", "irc", "code" ] ++ map show [4..9]
+--
+myWorkspaces = ["1","2","3","4","5","6","7","8","9"]
+
+-- Border colors for unfocused and focused windows, respectively.
+--
+myNormalBorderColor = "#dddddd"
+myFocusedBorderColor = "#ff0000"
+
+-- Default offset of drawable screen boundaries from each physical
+-- screen. Anything non-zero here will leave a gap of that many pixels
+-- on the given edge, on the that screen. A useful gap at top of screen
+-- for a menu bar (e.g. 15)
+--
+-- An example, to set a top gap on monitor 1, and a gap on the bottom of
+-- monitor 2, you'd use a list of geometries like so:
+--
+-- > defaultGaps = [(18,0,0,0),(0,18,0,0)] -- 2 gaps on 2 monitors
+--
+-- Fields are: top, bottom, left, right.
+--
+myDefaultGaps = [(0,0,0,0)]
+
+------------------------------------------------------------------------
+-- Key bindings. Add, modify or remove key bindings here.
+--
+myKeys conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $
+
+ -- launch a terminal
+ [ ((modMask .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf)
+
+ -- launch dmenu
+ , ((modMask, xK_p ), spawn "exe=`dmenu_path | dmenu` && eval \"exec $exe\"")
+
+ -- launch gmrun
+ , ((modMask .|. shiftMask, xK_p ), spawn "gmrun")
+
+ -- close focused window
+ , ((modMask .|. shiftMask, xK_c ), kill)
+
+ -- Rotate through the available layout algorithms
+ , ((modMask, xK_space ), sendMessage NextLayout)
+
+ -- Reset the layouts on the current workspace to default
+ , ((modMask .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf)
+
+ -- Resize viewed windows to the correct size
+ , ((modMask, xK_n ), refresh)
+
+ -- Move focus to the next window
+ , ((modMask, xK_Tab ), windows W.focusDown)
+
+ -- Move focus to the next window
+ , ((modMask, xK_j ), windows W.focusDown)
+
+ -- Move focus to the previous window
+ , ((modMask, xK_k ), windows W.focusUp )
+
+ -- Move focus to the master window
+ , ((modMask, xK_m ), windows W.focusMaster )
+
+ -- Swap the focused window and the master window
+ , ((modMask, xK_Return), windows W.swapMaster)
+
+ -- Swap the focused window with the next window
+ , ((modMask .|. shiftMask, xK_j ), windows W.swapDown )
+
+ -- Swap the focused window with the previous window
+ , ((modMask .|. shiftMask, xK_k ), windows W.swapUp )
+
+ -- Shrink the master area
+ , ((modMask, xK_h ), sendMessage Shrink)
+
+ -- Expand the master area
+ , ((modMask, xK_l ), sendMessage Expand)
+
+ -- Push window back into tiling
+ , ((modMask, xK_t ), withFocused $ windows . W.sink)
+
+ -- Increment the number of windows in the master area
+ , ((modMask , xK_comma ), sendMessage (IncMasterN 1))
+
+ -- Deincrement the number of windows in the master area
+ , ((modMask , xK_period), sendMessage (IncMasterN (-1)))
+
+ -- toggle the status bar gap
+ , ((modMask , xK_b ),
+ modifyGap (\i n -> let x = (XMonad.defaultGaps conf ++ repeat (0,0,0,0)) !! i
+ in if n == x then (0,0,0,0) else x))
+
+ -- Quit xmonad
+ , ((modMask .|. shiftMask, xK_q ), io (exitWith ExitSuccess))
+
+ -- Restart xmonad
+ , ((modMask , xK_q ),
+ broadcastMessage ReleaseResources >> restart (Just "xmonad") True)
+ ]
+ ++
+
+ --
+ -- mod-[1..9], Switch to workspace N
+ -- mod-shift-[1..9], Move client to workspace N
+ --
+ [((m .|. modMask, k), windows $ f i)
+ | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
+ , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
+ ++
+
+ --
+ -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3
+ -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
+ --
+ [((m .|. modMask, key), screenWorkspace sc >>= flip whenJust (windows . f))
+ | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..]
+ , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
+
+
+------------------------------------------------------------------------
+-- Mouse bindings: default actions bound to mouse events
+--
+myMouseBindings (XConfig {XMonad.modMask = modMask}) = M.fromList $
+
+ -- mod-button1, Set the window to floating mode and move by dragging
+ [ ((modMask, button1), (\w -> focus w >> mouseMoveWindow w))
+
+ -- mod-button2, Raise the window to the top of the stack
+ , ((modMask, button2), (\w -> focus w >> windows W.swapMaster))
+
+ -- mod-button3, Set the window to floating mode and resize by dragging
+ , ((modMask, button3), (\w -> focus w >> mouseResizeWindow w))
+
+ -- you may also bind events to the mouse scroll wheel (button4 and button5)
+ ]
+
+------------------------------------------------------------------------
+-- Layouts:
+
+-- You can specify and transform your layouts by modifying these values.
+-- If you change layout bindings be sure to use 'mod-shift-space' after
+-- restarting (with 'mod-q') to reset your layout state to the new
+-- defaults, as xmonad preserves your old layout settings by default.
+--
+-- The available layouts. Note that each layout is separated by |||,
+-- which denotes layout choice.
+--
+myLayout = tiled ||| Mirror tiled ||| Full
+ where
+ -- default tiling algorithm partitions the screen into two panes
+ tiled = Tall nmaster delta ratio
+
+ -- The default number of windows in the master pane
+ nmaster = 1
+
+ -- Default proportion of screen occupied by master pane
+ ratio = 1/2
+
+ -- Percent of screen to increment by when resizing panes
+ delta = 3/100
+
+------------------------------------------------------------------------
+-- Window rules:
+
+-- Execute arbitrary actions and WindowSet manipulations when managing
+-- a new window. You can use this to, for example, always float a
+-- particular program, or have a client always appear on a particular
+-- workspace.
+--
+-- To find the property name associated with a program, use
+-- > xprop | grep WM_CLASS
+-- and click on the client you're interested in.
+--
+myManageHook = composeAll
+ [ className =? "MPlayer" --> doFloat
+ , className =? "Gimp" --> doFloat
+ , resource =? "desktop_window" --> doIgnore
+ , resource =? "kdesktop" --> doIgnore ]
+
+
+------------------------------------------------------------------------
+-- Status bars and logging
+
+-- Perform an arbitrary action on each internal state change or X event.
+-- See the 'DynamicLog' extension for examples.
+--
+-- To emulate dwm's status bar
+--
+-- > logHook = dynamicLogDzen
+--
+myLogHook = return ()
+
+------------------------------------------------------------------------
+-- Now run xmonad with all the defaults we set up.
+
+-- Run xmonad with the settings you specify. No need to modify this.
+--
+main = xmonad defaults
+
+-- A structure containing your configuration settings, overriding
+-- fields in the default config. Any you don't override, will
+-- use the defaults defined in xmonad/XMonad/Config.hs
+--
+-- No need to modify this.
+--
+defaults = defaultConfig {
+ -- simple stuff
+ terminal = myTerminal,
+ borderWidth = myBorderWidth,
+ modMask = myModMask,
+ numlockMask = myNumlockMask,
+ workspaces = myWorkspaces,
+ normalBorderColor = myNormalBorderColor,
+ focusedBorderColor = myFocusedBorderColor,
+ defaultGaps = myDefaultGaps,
+
+ -- key bindings
+ keys = myKeys,
+ mouseBindings = myMouseBindings,
+
+ -- hooks, layouts
+ layoutHook = myLayout,
+ manageHook = myManageHook,
+ logHook = myLogHook
+ }
diff --git a/xmonad.cabal b/xmonad.cabal
index 3e8de7d..97354f8 100644
--- a/xmonad.cabal
+++ b/xmonad.cabal
@@ -18,7 +18,7 @@ license-file: LICENSE
author: Spencer Janssen
maintainer: xmonad@haskell.org
extra-source-files: README TODO CONFIG STYLE tests/loc.hs tests/Properties.hs
- man/xmonad.1.in man/xmonad.1 man/xmonad.html
+ man/xmonad.1.in man/xmonad.1 man/xmonad.html man/xmonad-template.hs
util/GenerateManpage.hs
cabal-version: >= 1.2