1 {-# LANGUAGE FlexibleContexts #-}
4 import XMonad.Actions.CycleRecentWS
5 import XMonad.Actions.PhysicalScreens
6 import XMonad.Config.Desktop
7 import XMonad.Hooks.DynamicLog
8 import XMonad.Hooks.EwmhDesktops
9 import XMonad.Hooks.ICCCMFocus
10 import XMonad.Hooks.ManageDocks
11 import XMonad.Hooks.ManageHelpers
12 import XMonad.Hooks.SetWMName
13 import XMonad.Layout.IM
14 import XMonad.Layout.LayoutHints
15 import qualified XMonad.Layout.Magnifier as Mag
16 import XMonad.Layout.Master
17 import XMonad.Layout.NoBorders
18 import XMonad.Layout.NoFrillsDecoration
19 import XMonad.Layout.PerWorkspace
20 import XMonad.Layout.Renamed
21 import XMonad.Layout.Reflect
22 import XMonad.Layout.Tabbed
23 import XMonad.Util.Run(spawnPipe)
24 import qualified Data.Map as M
25 import qualified XMonad.StackSet as W
28 myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
30 ((modm .|. shiftMask, xK_h), spawn "xfce4-session-logout"),
31 ((modm .|. shiftMask, xK_l), spawn "xscreensaver-command --lock"),
32 ((modm .|. shiftMask, xK_r), spawn "xmonad --restart"),
34 ((modm, xK_n), spawn "xfce4-terminal"),
35 ((modm, xK_i), spawn "firefox"),
36 ((modm, xK_c), spawn "emacsclient --create-frame --no-wait"),
37 ((modm, xK_p), spawn "kupfer"),
39 ((modm .|. shiftMask, xK_c ), kill),
40 ((modm, xK_space ), sendMessage NextLayout),
41 ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf),
42 ((modm, xK_j ), windows W.focusDown),
43 ((modm, xK_k ), windows W.focusUp ),
44 ((modm, xK_m ), windows W.focusMaster ),
45 ((modm, xK_Return), windows W.swapMaster),
46 ((modm .|. shiftMask, xK_j ), windows W.swapDown ),
47 ((modm .|. shiftMask, xK_k ), windows W.swapUp ),
48 ((modm, xK_h ), sendMessage Shrink),
49 ((modm, xK_l ), sendMessage Expand),
50 ((modm, xK_t ), withFocused $ windows . W.sink),
51 ((modm , xK_comma ), sendMessage (IncMasterN 1)),
52 ((modm , xK_period), sendMessage (IncMasterN (-1))),
53 ((modm , xK_b ), sendMessage ToggleStruts),
54 ((modm , xK_z ), sendMessage Mag.Toggle),
55 ((modm , xK_a), cycleRecentWS [xK_Super_L] xK_a xK_a)
59 -- mod-{o,e,u}, Switch to physical/Xinerama screens 1, 2, or 3
60 -- mod-shift-{o,e,u}, Move client to screen 1, 2, or 3
61 [((m .|. modm, key), f sc)
62 | (key, sc) <- zip [xK_o, xK_e, xK_u] [0..]
63 , (f, m) <- [(viewScreen, 0), (sendToScreen, shiftMask)]
67 -- mod-[1..9], Switch to workspace N
68 -- mod-shift-[1..9], Move client to workspace N
69 [((m .|. modm, k), windows $ f i)
70 | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
71 , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]
75 avoidMaster = W.modify' $ \c -> case c of
76 W.Stack t [] (r:rs) -> W.Stack t [r] rs
79 isSkipTaskBar = isInProperty "_NET_WM_STATE" "_NET_WM_STATE_SKIP_TASKBAR"
85 (isSkipTaskBar -?> doFloat),
86 (isDialog -?> doFloatAt 0.1 0.1),
87 (isFullscreen -?> doFullFloat),
88 (fmap Just $ doF avoidMaster)
92 myWorkspaces = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
96 ppCurrent = xmobarColor "#A01010" "" . wrap "[" "]",
97 ppTitle = xmobarColor "#10A010" ""
101 mapM (\h -> dynamicLogWithPP myPP { ppOutput = hPutStrLn h }) hooks
102 takeTopFocus -- fix for Java Swing apps
105 setWMName "LG3D" -- fix for Java Swing apps
106 spawn "xfce4-panel --restart" -- ensure it appears on top of xmobar
108 goldenRatio = (toRational (2/(1+sqrt(5)::Double)))
110 myTitleTheme = defaultTheme {
111 fontName = "xft:sans-serif:size=10",
115 createLayout name layout =
116 renamed [Replace name] $
121 myFullLayout = createLayout "Full" $
125 myTiledLayout = createLayout "Tall" $
128 Tall nMaster ratioIncrement masterRatio
131 ratioIncrement = 3/100
132 masterRatio = goldenRatio
134 myTabbedLayout = createLayout "Tab" $
136 tabbed shrinkText myTitleTheme
138 myMasterTabbedLayout = createLayout "MTab" $
141 mastered resizeDelta masterRatio $
142 tabbed shrinkText myTitleTheme
145 masterRatio = goldenRatio
147 myGimpLayout = createLayout "Gimp" $
149 withIM (1/6) (Role "gimp-toolbox") $
151 withIM (1/6) (Role "gimp-dock") $
153 tabbed shrinkText myTitleTheme
157 onWorkspace "9" (myTabbedLayout ||| myFullLayout ||| myGimpLayout) $
158 (myTabbedLayout ||| myMasterTabbedLayout ||| myTiledLayout)
162 xmonadDir <- getXMonadDir
163 xmobars <- mapM (\x -> spawnPipe ("xmobar -x " ++ (show x) ++ " " ++ xmonadDir ++ "/xmobar.hs")) [1, 2]
164 xmonad $ desktopConfig {
165 manageHook = myManageHook,
166 layoutHook = myLayout,
167 workspaces = myWorkspaces,
168 logHook = myLogHook xmobars,
169 startupHook = myStartupHook,
172 handleEventHook = handleEventHook desktopConfig <+> fullscreenEventHook,
173 focusFollowsMouse = False