1 {-# LANGUAGE FlexibleContexts #-}
4 import XMonad.Actions.PhysicalScreens
5 import XMonad.Hooks.DynamicLog
6 import XMonad.Hooks.EwmhDesktops
7 import XMonad.Hooks.ICCCMFocus
8 import XMonad.Hooks.ManageDocks
9 import XMonad.Hooks.ManageHelpers
10 import XMonad.Hooks.SetWMName
11 import XMonad.Layout.IM
12 import XMonad.Layout.LayoutHints
13 import qualified XMonad.Layout.Magnifier as Mag
14 import XMonad.Layout.Master
15 import XMonad.Layout.NoBorders
16 import XMonad.Layout.NoFrillsDecoration
17 import XMonad.Layout.PerWorkspace
18 import XMonad.Layout.Renamed
19 import XMonad.Layout.Reflect
20 import XMonad.Layout.Tabbed
21 import XMonad.Layout.ThreeColumns
22 import XMonad.Util.Run(spawnPipe)
23 import qualified Data.Map as M
24 import qualified XMonad.StackSet as W
27 myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
29 ((modm .|. shiftMask, xK_h), spawn "xfce4-session-logout"),
30 ((modm .|. shiftMask, xK_l), spawn "xscreensaver-command --lock"),
31 ((modm .|. shiftMask, xK_r), spawn "xmonad --restart"),
33 ((modm, xK_n), spawn "xfce4-terminal"),
34 ((modm, xK_i), spawn "firefox"),
35 ((modm, xK_c), spawn "emacsclient --create-frame --no-wait"),
36 ((modm, xK_p), spawn "kupfer"),
38 ((modm .|. shiftMask, xK_c ), kill),
39 ((modm, xK_space ), sendMessage NextLayout),
40 ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf),
41 ((modm, xK_j ), windows W.focusDown),
42 ((modm, xK_k ), windows W.focusUp ),
43 ((modm, xK_m ), windows W.focusMaster ),
44 ((modm, xK_Return), windows W.swapMaster),
45 ((modm .|. shiftMask, xK_j ), windows W.swapDown ),
46 ((modm .|. shiftMask, xK_k ), windows W.swapUp ),
47 ((modm, xK_h ), sendMessage Shrink),
48 ((modm, xK_l ), sendMessage Expand),
49 ((modm, xK_t ), withFocused $ windows . W.sink),
50 ((modm , xK_comma ), sendMessage (IncMasterN 1)),
51 ((modm , xK_period), sendMessage (IncMasterN (-1))),
52 ((modm , xK_b ), sendMessage ToggleStruts),
53 ((modm , xK_z ), sendMessage Mag.Toggle)
57 -- mod-{o,e,u}, Switch to physical/Xinerama screens 1, 2, or 3
58 -- mod-shift-{o,e,u}, Move client to screen 1, 2, or 3
59 [((m .|. modm, key), f sc)
60 | (key, sc) <- zip [xK_o, xK_e, xK_u] [0..]
61 , (f, m) <- [(viewScreen, 0), (sendToScreen, shiftMask)]
65 -- mod-[1..9], Switch to workspace N
66 -- mod-shift-[1..9], Move client to workspace N
67 [((m .|. modm, k), windows $ f i)
68 | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
69 , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]
73 avoidMaster = W.modify' $ \c -> case c of
74 W.Stack t [] (r:rs) -> W.Stack t [r] rs
77 isSkipTaskBar = isInProperty "_NET_WM_STATE" "_NET_WM_STATE_SKIP_TASKBAR"
83 (isSkipTaskBar -?> doFloat),
84 (isDialog -?> doFloatAt 0.1 0.1),
85 (isFullscreen -?> doFullFloat),
86 (fmap Just $ doF avoidMaster)
90 myWorkspaces = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
94 ppCurrent = xmobarColor "#A01010" "" . wrap "[" "]",
95 ppTitle = xmobarColor "#10A010" ""
99 mapM (\h -> dynamicLogWithPP myPP { ppOutput = hPutStrLn h }) hooks
100 takeTopFocus -- fix for Java Swing apps
103 setWMName "LG3D" -- fix for Java Swing apps
104 spawn "xfce4-panel --restart" -- ensure it appears on top of xmobar
106 goldenRatio = (toRational (2/(1+sqrt(5)::Double)))
108 myTitleTheme = defaultTheme {
109 fontName = "xft:sans-serif:size=10",
113 createLayout name layout =
114 renamed [Replace name] $
119 myFullLayout = createLayout "Full" $
123 myTiledLayout = createLayout "Tall" $
126 Tall nMaster ratioIncrement masterRatio
129 ratioIncrement = 3/100
130 masterRatio = goldenRatio
132 myTabbedLayout = createLayout "Tab" $
134 tabbed shrinkText myTitleTheme
136 myThreeColLayout = createLayout "ThreeCol" $
139 ThreeCol numMaster resizeDelta masterRatio
145 myMasterTabbedLayout = createLayout "MTab" $
148 mastered resizeDelta masterRatio $
149 tabbed shrinkText myTitleTheme
152 masterRatio = goldenRatio
154 myGimpLayout = createLayout "Gimp" $
156 withIM (1/6) (Role "gimp-toolbox") $
158 withIM (1/6) (Role "gimp-dock") $
160 tabbed shrinkText myTitleTheme
163 -- This was the easiest way I found to avoid a compile error when I have
165 referenceAllLayoutsToAvoidErrors =
170 myMasterTabbedLayout |||
176 onWorkspace "1" (myTabbedLayout ||| myMasterTabbedLayout) $
177 onWorkspace "2" (myTabbedLayout ||| myMasterTabbedLayout) $
178 onWorkspace "9" (myFullLayout ||| myMasterTabbedLayout ||| myTabbedLayout ||| myTiledLayout ||| myGimpLayout) $
179 (myMasterTabbedLayout ||| myTabbedLayout ||| myTiledLayout)
183 xmonadDir <- getXMonadDir
184 xmobars <- mapM (\x -> spawnPipe ("xmobar -x " ++ (show x) ++ " " ++ xmonadDir ++ "/xmobar.hs")) [1, 2]
185 xmonad $ ewmh defaultConfig {
186 manageHook = myManageHook,
187 layoutHook = myLayout,
188 workspaces = myWorkspaces,
189 logHook = myLogHook xmobars,
190 startupHook = myStartupHook,
193 handleEventHook = handleEventHook defaultConfig <+> fullscreenEventHook,
194 focusFollowsMouse = False