]> code.delx.au - dotfiles/blob - .xmonad/xmonad.hs
xmonad: Only use Full layout on web workspace
[dotfiles] / .xmonad / xmonad.hs
1 import System.IO
2 import XMonad
3 import XMonad.Hooks.DynamicLog
4 import XMonad.Hooks.ICCCMFocus
5 import XMonad.Hooks.ManageDocks
6 import XMonad.Hooks.Script
7 import XMonad.Layout.Grid
8 import XMonad.Hooks.SetWMName
9 import XMonad.Layout.IM
10 import XMonad.Layout.LayoutHints
11 import XMonad.Layout.NoBorders
12 import XMonad.Layout.NoFrillsDecoration
13 import XMonad.Layout.PerWorkspace
14 import XMonad.Layout.Renamed
15 import XMonad.Layout.Tabbed
16 import XMonad.Util.Run(spawnPipe)
17 import qualified Data.Map as M
18 import qualified XMonad.StackSet as W
19
20
21 myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
22 [
23 ((modm .|. shiftMask, xK_q), spawn "gnome-session-quit"),
24 ((modm .|. shiftMask, xK_h), spawn "gnome-session-quit --power-off"),
25 -- ((modm .|. shiftMask, xK_q), spawn "gnome-session-save --logout-dialog"),
26 -- ((modm .|. shiftMask, xK_h), spawn "gnome-session-save --shutdown-dialog"),
27 ((modm .|. shiftMask, xK_l), spawn "gnome-screensaver-command --lock"),
28
29 ((modm, xK_n), spawn "gnome-terminal"),
30 ((modm, xK_i), spawn "firefox"),
31
32 ((modm .|. shiftMask, xK_c ), kill),
33 ((modm, xK_space ), sendMessage NextLayout),
34 ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf),
35 ((modm, xK_Tab ), windows W.focusDown),
36 ((modm, xK_j ), windows W.focusDown),
37 ((modm, xK_k ), windows W.focusUp ),
38 ((modm, xK_m ), windows W.focusMaster ),
39 ((modm, xK_Return), windows W.swapMaster),
40 ((modm .|. shiftMask, xK_j ), windows W.swapDown ),
41 ((modm .|. shiftMask, xK_k ), windows W.swapUp ),
42 ((modm, xK_h ), sendMessage Shrink),
43 ((modm, xK_l ), sendMessage Expand),
44 ((modm, xK_t ), withFocused $ windows . W.sink),
45 ((modm , xK_comma ), sendMessage (IncMasterN 1)),
46 ((modm , xK_period), sendMessage (IncMasterN (-1))),
47 ((modm , xK_b ), sendMessage ToggleStruts)
48 ]
49 ++
50
51 -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3
52 -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
53 [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f))
54 | (key, sc) <- zip [xK_o, xK_e, xK_u] [0..]
55 , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]
56 ]
57 ++
58
59 -- mod-[1..9], Switch to workspace N
60 -- mod-shift-[1..9], Move client to workspace N
61 [((m .|. modm, k), windows $ f i)
62 | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
63 , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]
64 ]
65
66
67
68 myManageHook = composeAll [
69 (className =? "Gnome-fallback-mount-helper" <&&> resource =? "gnome-fallback-mount-helper") --> doFloat,
70 (className =? "Gdu-notification-daemon" <&&> resource =? "gdu-notification-daemon") --> doFloat,
71 (className =? "Firefox" <&&> resource =? "Dialog") --> doFloat,
72 manageDocks
73 ]
74
75
76 myWorkspaces = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
77
78 myPP = xmobarPP
79 {
80 ppTitle = xmobarColor "green" ""
81 }
82
83 myLogHook h1 =
84 dynamicLogWithPP myPP { ppOutput = hPutStrLn h1 } >>
85 takeTopFocus -- fix for Java Swing apps
86
87 myStartupHook =
88 setWMName "LG3D" -- fix for Java Swing apps
89
90
91 goldenRatio = (toRational (2/(1+sqrt(5)::Double)))
92
93 createLayout name layout =
94 renamed [Replace name] $
95 layoutHints $
96 smartBorders $
97 layout
98
99 myFullLayout = createLayout "Full" $
100 Full
101
102 myTiledLayout = createLayout "Tall" $
103 avoidStruts $
104 Tall nMaster ratioIncrement ratio where
105 nMaster = 1
106 ratioIncrement = 3/100
107 ratio = goldenRatio
108
109 myTabbedLayout = createLayout "Tab" $
110 avoidStruts $
111 simpleTabbed
112
113 myImLayout = createLayout "IM" $
114 avoidStruts $
115 noFrillsDeco shrinkText defaultTheme $
116 withIM ratio roster $ GridRatio 1
117 where
118 ratio = 1/4
119 roster = (Or (Title "Buddy List") (And (Resource "main") (ClassName "psi")))
120
121
122 myLayout =
123 (
124 onWorkspace "1" (myImLayout) $
125 onWorkspace "2" (myTabbedLayout ||| myFullLayout) $
126 (myTiledLayout ||| myTabbedLayout)
127 )
128
129 main = do
130 xmonadDir <- getXMonadDir
131 xmobar <- spawnPipe ("xmobar " ++ xmonadDir ++ "/xmobar.hs")
132 xmonad $ defaultConfig {
133 manageHook = myManageHook <+> manageHook defaultConfig,
134 layoutHook = myLayout,
135 workspaces = myWorkspaces,
136 logHook = myLogHook xmobar,
137 startupHook = myStartupHook,
138 keys = myKeys
139 }
140