xmonad/xmonad.hs
changeset 0 df7496e40bee
equal deleted inserted replaced
-1:000000000000 0:df7496e40bee
       
     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