xmonad/xmonad.hs
changeset 0 df7496e40bee
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xmonad/xmonad.hs	Thu Oct 13 08:28:49 2011 -0400
@@ -0,0 +1,121 @@
+-- Import statements
+import XMonad
+-- import XMonad.Config.Gnome
+import XMonad.Hooks.DynamicLog
+import XMonad.Hooks.ManageDocks
+import XMonad.Hooks.EwmhDesktops
+import XMonad.Hooks.Place
+import XMonad.Hooks.FadeInactive
+import XMonad.Hooks.UrgencyHook
+import XMonad.Config.Gnome
+import XMonad.Util.Run
+import XMonad.Util.EZConfig
+import XMonad.Actions.CycleWS
+import XMonad.Actions.Promote
+import XMonad.Actions.RotSlaves
+import qualified XMonad.StackSet as S
+import System.IO
+import XMonad.Layout.NoBorders
+import XMonad.Layout.Tabbed
+import XMonad.Layout.Spiral
+import XMonad.Layout.MosaicAlt
+import XMonad.Layout.ThreeColumns
+import qualified Data.Map as M
+import System.Exit
+
+-- defines
+
+myModMask = mod4Mask -- Windows key
+myTerminal = "x-terminal-emulator"
+myWorkspaces = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
+upperRowKeys = [ xK_quotedbl, 
+                 xK_guillemotleft, 
+                 xK_guillemotright,
+                 xK_parenleft,
+                 xK_parenright,
+                 xK_at,
+                 xK_plus,
+                 xK_minus,
+                 xK_slash,
+                 xK_asterisk ]
+numberOfWS = 4
+               
+myWSKeys = [ ((m .|. myModMask, k), windows $ f i)
+           | (i, k) <- take numberOfWS (zip myWorkspaces upperRowKeys),
+             (f, m) <- [(S.greedyView, 0), (S.shift, shiftMask)]]
+
+-- X Y W H
+myDefaultDialogSize = S.RationalRect (1/4) (1/4) (1/2) (1/2)
+
+myKeys = [ 
+    ((myModMask .|. shiftMask, xK_Return        ), spawn $ myTerminal),
+    ((myModMask,               xK_m             ), windows S.focusMaster ),
+    ((myModMask .|. shiftMask, xK_m             ), promote ),
+    ((myModMask .|. shiftMask, xK_Tab           ), rotAllUp ),
+    ((myModMask              , xK_space         ), sendMessage NextLayout),
+    ((myModMask,               xK_q             ), kill),
+    ((myModMask .|. shiftMask, xK_q             ), io (exitWith ExitSuccess)),
+    ((myModMask .|. shiftMask, xK_r             ), spawn "xmonad --recompile && xmonad --restart"),
+    (( 0,                      xK_Print         ), spawn "gnome-screenshot -i"),
+    ((myModMask,               xK_b             ), sendMessage ToggleStruts),
+    -- S.
+    ((myModMask,               xK_d             ), withFocused $ windows . (`S.float` myDefaultDialogSize)),
+    ((myModMask .|. shiftMask, xK_d             ), withFocused $ windows . S.sink),
+    -- ((myModMask .|. shiftMask, xK_b             ), sendMessage (SetStruts [D] [])),
+    
+    -- Vi-like bindings for modifying layout
+    ((myModMask,                 xK_t             ), windows S.focusDown ),
+    ((myModMask,                 xK_s             ), windows S.focusUp ),
+    ((myModMask .|. shiftMask  , xK_t             ), windows S.swapDown ),
+    ((myModMask .|. shiftMask  , xK_s             ), windows S.swapUp ),
+    ((myModMask .|. controlMask, xK_t             ), sendMessage Shrink ),
+    ((myModMask .|. controlMask, xK_s             ), sendMessage Expand ),
+    ((myModMask .|. shiftMask  , xK_n             ), sendMessage (IncMasterN (1))),
+    ((myModMask                , xK_n             ), sendMessage (IncMasterN (-1)))
+    ] ++ myWSKeys
+         
+         
+fib :: Int -> Int
+fib 0 = 0
+fib 1 = 1
+fib n = fib (n-1) + fib (n-2)
+
+golden :: Int -> Rational
+golden n = toRational (fib n) / toRational (fib (n-1))
+
+myLayouts = tall ||| threeCol ||| Mirror tall ||| threeCol ||| mosaic ||| simpleTabbed ||| Full
+  where 
+    mosaic = MosaicAlt M.empty
+    mySpiral = spiral ratio
+    tall = Tall nmaster delta ratio
+    threeCol = ThreeCol nmaster delta ratio
+    nmaster = 2
+    delta = 3/100
+    ratio = 2/3
+
+fadingHook = fadeInactiveLogHook fadeAmount
+  where fadeAmount = 0.7
+
+-- Run
+main = do
+  xmproc <- spawnPipe "xmobar"  
+  xmonad 
+    $ withUrgencyHook dzenUrgencyHook { args = ["-bg", "darkgreen", "-xs", "1"] }
+    $ ewmh 
+    $ gnomeConfig { 
+    terminal = myTerminal,
+    borderWidth = 0,
+    focusFollowsMouse = False,
+    workspaces = take numberOfWS myWorkspaces,
+    manageHook = manageDocks <+> 
+                 placeHook (smart (0.5, 0.5)) <+> 
+                 manageHook defaultConfig,
+    layoutHook = avoidStruts $ myLayouts,
+    logHook = fadingHook >> dynamicLogWithPP xmobarPP {
+      ppOutput = hPutStrLn xmproc,
+      ppTitle = xmobarColor "green" "" . shorten 50 
+      },
+    modMask = myModMask -- windows key
+    } `removeKeys` [
+      (myModMask, xK_Return)
+    ] `additionalKeys` myKeys
\ No newline at end of file