3 import XMonad.Hooks.DynamicLog
4 import XMonad.Hooks.ManageDocks
5 import XMonad.Hooks.Script
6 import XMonad.Layout.Grid
7 import XMonad.Layout.IM
8 import XMonad.Layout.LayoutHints
9 import XMonad.Layout.NoBorders
10 import XMonad.Layout.NoFrillsDecoration
11 import XMonad.Layout.PerWorkspace
12 import XMonad.Layout.Renamed
13 import XMonad.Layout.Tabbed
14 import XMonad.Util.Run(spawnPipe)
15 import qualified Data.Map as M
16 import qualified XMonad.StackSet as W
19 myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
21 ((modm .|. shiftMask, xK_q), spawn "gnome-session-quit"),
22 ((modm .|. shiftMask, xK_h), spawn "gnome-session-quit --power-off"),
23 -- ((modm .|. shiftMask, xK_q), spawn "gnome-session-save --logout-dialog"),
24 -- ((modm .|. shiftMask, xK_h), spawn "gnome-session-save --shutdown-dialog"),
25 ((modm .|. shiftMask, xK_l), spawn "gnome-screensaver-command --lock"),
27 ((modm, xK_n), spawn "gnome-terminal"),
28 ((modm, xK_i), spawn "firefox"),
30 ((modm .|. shiftMask, xK_c ), kill),
31 ((modm, xK_space ), sendMessage NextLayout),
32 ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf),
33 ((modm, xK_Tab ), windows W.focusDown),
34 ((modm, xK_j ), windows W.focusDown),
35 ((modm, xK_k ), windows W.focusUp ),
36 ((modm, xK_m ), windows W.focusMaster ),
37 ((modm, xK_Return), windows W.swapMaster),
38 ((modm .|. shiftMask, xK_j ), windows W.swapDown ),
39 ((modm .|. shiftMask, xK_k ), windows W.swapUp ),
40 ((modm, xK_h ), sendMessage Shrink),
41 ((modm, xK_l ), sendMessage Expand),
42 ((modm, xK_t ), withFocused $ windows . W.sink),
43 ((modm , xK_comma ), sendMessage (IncMasterN 1)),
44 ((modm , xK_period), sendMessage (IncMasterN (-1))),
45 ((modm , xK_b ), sendMessage ToggleStruts)
49 -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3
50 -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
51 [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f))
52 | (key, sc) <- zip [xK_o, xK_e, xK_u] [0..]
53 , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]
57 -- mod-[1..9], Switch to workspace N
58 -- mod-shift-[1..9], Move client to workspace N
59 [((m .|. modm, k), windows $ f i)
60 | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
61 , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]
66 myManageHook = composeAll [
67 (className =? "Gnome-fallback-mount-helper" <&&> resource =? "gnome-fallback-mount-helper") --> doFloat,
68 (className =? "Gdu-notification-daemon" <&&> resource =? "gdu-notification-daemon") --> doFloat,
69 (className =? "Firefox" <&&> resource =? "Dialog") --> doFloat,
74 myWorkspaces = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
76 myLogHook xmobar = dynamicLogWithPP xmobarPP
78 ppOutput = hPutStrLn xmobar,
79 ppTitle = xmobarColor "green" "" . shorten 50
83 goldenRatio = (toRational (2/(1+sqrt(5)::Double)))
85 createLayout name layout =
86 renamed [Replace name] $
91 myFullLayout = createLayout "Full" $
94 myTiledLayout = createLayout "Tall" $
96 Tall nMaster ratioIncrement ratio where
98 ratioIncrement = 3/100
101 myTabbedLayout = createLayout "Tab" $
105 myImLayout = createLayout "IM" $
107 noFrillsDeco shrinkText defaultTheme $
108 withIM ratio roster $ GridRatio 1
111 roster = (Or (Title "Buddy List") (And (Resource "main") (ClassName "psi")))
116 onWorkspace "1" (myImLayout) $
117 onWorkspace "2" (myTabbedLayout ||| myFullLayout) $
118 (myTiledLayout ||| myTabbedLayout ||| myFullLayout)
122 xmonadDir <- getXMonadDir
123 xmobar <- spawnPipe ("xmobar " ++ xmonadDir ++ "/xmobar.hs")
124 xmonad $ defaultConfig {
125 manageHook = myManageHook <+> manageHook defaultConfig,
126 layoutHook = myLayout,
127 workspaces = myWorkspaces,
128 logHook = myLogHook xmobar,