|
1 -- Import statements |
|
2 import XMonad |
|
3 -- import XMonad.Config.Gnome |
|
4 import XMonad.Hooks.DynamicLog |
|
5 import XMonad.Hooks.ManageDocks |
|
6 import XMonad.Hooks.EwmhDesktops |
|
7 import XMonad.Hooks.Place |
|
8 import XMonad.Hooks.FadeInactive |
|
9 import XMonad.Hooks.UrgencyHook |
|
10 import XMonad.Config.Gnome |
|
11 import XMonad.Util.Run |
|
12 import XMonad.Util.EZConfig |
|
13 import XMonad.Actions.CycleWS |
|
14 import XMonad.Actions.Promote |
|
15 import XMonad.Actions.RotSlaves |
|
16 import qualified XMonad.StackSet as S |
|
17 import System.IO |
|
18 import XMonad.Layout.NoBorders |
|
19 import XMonad.Layout.Tabbed |
|
20 import XMonad.Layout.Spiral |
|
21 import XMonad.Layout.MosaicAlt |
|
22 import XMonad.Layout.ThreeColumns |
|
23 import qualified Data.Map as M |
|
24 import System.Exit |
|
25 |
|
26 -- defines |
|
27 |
|
28 myModMask = mod4Mask -- Windows key |
|
29 myTerminal = "x-terminal-emulator" |
|
30 myWorkspaces = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] |
|
31 upperRowKeys = [ xK_quotedbl, |
|
32 xK_guillemotleft, |
|
33 xK_guillemotright, |
|
34 xK_parenleft, |
|
35 xK_parenright, |
|
36 xK_at, |
|
37 xK_plus, |
|
38 xK_minus, |
|
39 xK_slash, |
|
40 xK_asterisk ] |
|
41 numberOfWS = 4 |
|
42 |
|
43 myWSKeys = [ ((m .|. myModMask, k), windows $ f i) |
|
44 | (i, k) <- take numberOfWS (zip myWorkspaces upperRowKeys), |
|
45 (f, m) <- [(S.greedyView, 0), (S.shift, shiftMask)]] |
|
46 |
|
47 -- X Y W H |
|
48 myDefaultDialogSize = S.RationalRect (1/4) (1/4) (1/2) (1/2) |
|
49 |
|
50 myKeys = [ |
|
51 ((myModMask .|. shiftMask, xK_Return ), spawn $ myTerminal), |
|
52 ((myModMask, xK_m ), windows S.focusMaster ), |
|
53 ((myModMask .|. shiftMask, xK_m ), promote ), |
|
54 ((myModMask .|. shiftMask, xK_Tab ), rotAllUp ), |
|
55 ((myModMask , xK_space ), sendMessage NextLayout), |
|
56 ((myModMask, xK_q ), kill), |
|
57 ((myModMask .|. shiftMask, xK_q ), io (exitWith ExitSuccess)), |
|
58 ((myModMask .|. shiftMask, xK_r ), spawn "xmonad --recompile && xmonad --restart"), |
|
59 (( 0, xK_Print ), spawn "gnome-screenshot -i"), |
|
60 ((myModMask, xK_b ), sendMessage ToggleStruts), |
|
61 -- S. |
|
62 ((myModMask, xK_d ), withFocused $ windows . (`S.float` myDefaultDialogSize)), |
|
63 ((myModMask .|. shiftMask, xK_d ), withFocused $ windows . S.sink), |
|
64 -- ((myModMask .|. shiftMask, xK_b ), sendMessage (SetStruts [D] [])), |
|
65 |
|
66 -- Vi-like bindings for modifying layout |
|
67 ((myModMask, xK_t ), windows S.focusDown ), |
|
68 ((myModMask, xK_s ), windows S.focusUp ), |
|
69 ((myModMask .|. shiftMask , xK_t ), windows S.swapDown ), |
|
70 ((myModMask .|. shiftMask , xK_s ), windows S.swapUp ), |
|
71 ((myModMask .|. controlMask, xK_t ), sendMessage Shrink ), |
|
72 ((myModMask .|. controlMask, xK_s ), sendMessage Expand ), |
|
73 ((myModMask .|. shiftMask , xK_n ), sendMessage (IncMasterN (1))), |
|
74 ((myModMask , xK_n ), sendMessage (IncMasterN (-1))) |
|
75 ] ++ myWSKeys |
|
76 |
|
77 |
|
78 fib :: Int -> Int |
|
79 fib 0 = 0 |
|
80 fib 1 = 1 |
|
81 fib n = fib (n-1) + fib (n-2) |
|
82 |
|
83 golden :: Int -> Rational |
|
84 golden n = toRational (fib n) / toRational (fib (n-1)) |
|
85 |
|
86 myLayouts = tall ||| threeCol ||| Mirror tall ||| threeCol ||| mosaic ||| simpleTabbed ||| Full |
|
87 where |
|
88 mosaic = MosaicAlt M.empty |
|
89 mySpiral = spiral ratio |
|
90 tall = Tall nmaster delta ratio |
|
91 threeCol = ThreeCol nmaster delta ratio |
|
92 nmaster = 2 |
|
93 delta = 3/100 |
|
94 ratio = 2/3 |
|
95 |
|
96 fadingHook = fadeInactiveLogHook fadeAmount |
|
97 where fadeAmount = 0.7 |
|
98 |
|
99 -- Run |
|
100 main = do |
|
101 xmproc <- spawnPipe "xmobar" |
|
102 xmonad |
|
103 $ withUrgencyHook dzenUrgencyHook { args = ["-bg", "darkgreen", "-xs", "1"] } |
|
104 $ ewmh |
|
105 $ gnomeConfig { |
|
106 terminal = myTerminal, |
|
107 borderWidth = 0, |
|
108 focusFollowsMouse = False, |
|
109 workspaces = take numberOfWS myWorkspaces, |
|
110 manageHook = manageDocks <+> |
|
111 placeHook (smart (0.5, 0.5)) <+> |
|
112 manageHook defaultConfig, |
|
113 layoutHook = avoidStruts $ myLayouts, |
|
114 logHook = fadingHook >> dynamicLogWithPP xmobarPP { |
|
115 ppOutput = hPutStrLn xmproc, |
|
116 ppTitle = xmobarColor "green" "" . shorten 50 |
|
117 }, |
|
118 modMask = myModMask -- windows key |
|
119 } `removeKeys` [ |
|
120 (myModMask, xK_Return) |
|
121 ] `additionalKeys` myKeys |