xmonad/xmonad.hs
author Fabien Ninoles <fabien@tzone.org>
Sun, 26 Oct 2014 14:48:50 -0400
changeset 4 a31ea9d76d14
parent 0 df7496e40bee
permissions -rw-r--r--
Clean up.

-- Import statements
import XMonad
-- import XMonad.Config.Gnome
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.Place
import XMonad.Hooks.FadeInactive
import XMonad.Hooks.UrgencyHook
import XMonad.Config.Gnome
import XMonad.Util.Run
import XMonad.Util.EZConfig
import XMonad.Actions.CycleWS
import XMonad.Actions.Promote
import XMonad.Actions.RotSlaves
import qualified XMonad.StackSet as S
import System.IO
import XMonad.Layout.NoBorders
import XMonad.Layout.Tabbed
import XMonad.Layout.Spiral
import XMonad.Layout.MosaicAlt
import XMonad.Layout.ThreeColumns
import qualified Data.Map as M
import System.Exit

-- defines

myModMask = mod4Mask -- Windows key
myTerminal = "x-terminal-emulator"
myWorkspaces = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
upperRowKeys = [ xK_quotedbl, 
                 xK_guillemotleft, 
                 xK_guillemotright,
                 xK_parenleft,
                 xK_parenright,
                 xK_at,
                 xK_plus,
                 xK_minus,
                 xK_slash,
                 xK_asterisk ]
numberOfWS = 4
               
myWSKeys = [ ((m .|. myModMask, k), windows $ f i)
           | (i, k) <- take numberOfWS (zip myWorkspaces upperRowKeys),
             (f, m) <- [(S.greedyView, 0), (S.shift, shiftMask)]]

-- X Y W H
myDefaultDialogSize = S.RationalRect (1/4) (1/4) (1/2) (1/2)

myKeys = [ 
    ((myModMask .|. shiftMask, xK_Return        ), spawn $ myTerminal),
    ((myModMask,               xK_m             ), windows S.focusMaster ),
    ((myModMask .|. shiftMask, xK_m             ), promote ),
    ((myModMask .|. shiftMask, xK_Tab           ), rotAllUp ),
    ((myModMask              , xK_space         ), sendMessage NextLayout),
    ((myModMask,               xK_q             ), kill),
    ((myModMask .|. shiftMask, xK_q             ), io (exitWith ExitSuccess)),
    ((myModMask .|. shiftMask, xK_r             ), spawn "xmonad --recompile && xmonad --restart"),
    (( 0,                      xK_Print         ), spawn "gnome-screenshot -i"),
    ((myModMask,               xK_b             ), sendMessage ToggleStruts),
    -- S.
    ((myModMask,               xK_d             ), withFocused $ windows . (`S.float` myDefaultDialogSize)),
    ((myModMask .|. shiftMask, xK_d             ), withFocused $ windows . S.sink),
    -- ((myModMask .|. shiftMask, xK_b             ), sendMessage (SetStruts [D] [])),
    
    -- Vi-like bindings for modifying layout
    ((myModMask,                 xK_t             ), windows S.focusDown ),
    ((myModMask,                 xK_s             ), windows S.focusUp ),
    ((myModMask .|. shiftMask  , xK_t             ), windows S.swapDown ),
    ((myModMask .|. shiftMask  , xK_s             ), windows S.swapUp ),
    ((myModMask .|. controlMask, xK_t             ), sendMessage Shrink ),
    ((myModMask .|. controlMask, xK_s             ), sendMessage Expand ),
    ((myModMask .|. shiftMask  , xK_n             ), sendMessage (IncMasterN (1))),
    ((myModMask                , xK_n             ), sendMessage (IncMasterN (-1)))
    ] ++ myWSKeys
         
         
fib :: Int -> Int
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

golden :: Int -> Rational
golden n = toRational (fib n) / toRational (fib (n-1))

myLayouts = tall ||| threeCol ||| Mirror tall ||| threeCol ||| mosaic ||| simpleTabbed ||| Full
  where 
    mosaic = MosaicAlt M.empty
    mySpiral = spiral ratio
    tall = Tall nmaster delta ratio
    threeCol = ThreeCol nmaster delta ratio
    nmaster = 2
    delta = 3/100
    ratio = 2/3

fadingHook = fadeInactiveLogHook fadeAmount
  where fadeAmount = 0.7

-- Run
main = do
  xmproc <- spawnPipe "xmobar"  
  xmonad 
    $ withUrgencyHook dzenUrgencyHook { args = ["-bg", "darkgreen", "-xs", "1"] }
    $ ewmh 
    $ gnomeConfig { 
    terminal = myTerminal,
    borderWidth = 0,
    focusFollowsMouse = False,
    workspaces = take numberOfWS myWorkspaces,
    manageHook = manageDocks <+> 
                 placeHook (smart (0.5, 0.5)) <+> 
                 manageHook defaultConfig,
    layoutHook = avoidStruts $ myLayouts,
    logHook = fadingHook >> dynamicLogWithPP xmobarPP {
      ppOutput = hPutStrLn xmproc,
      ppTitle = xmobarColor "green" "" . shorten 50 
      },
    modMask = myModMask -- windows key
    } `removeKeys` [
      (myModMask, xK_Return)
    ] `additionalKeys` myKeys