Personal tools

Xmonad/Config archive/nomeata’s xmonad.hs

From HaskellWiki

< Xmonad | Config archive(Difference between revisions)
Jump to: navigation, search
(My config)
 
(My config)
 
Line 202: Line 202:
 
}
 
}
 
</haskell>
 
</haskell>
  +
[[Category:XMonad configuration]]

Latest revision as of 12:08, 19 October 2008

import XMonad
import System.Exit
 
import Data.Ratio ((%))
 
import XMonad.Hooks.EventHook
import System.IO
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.EwmhDesktops
import XMonad.Actions.CycleWS
import XMonad.Layout.NoBorders
import XMonad.Layout.ResizableTile
import XMonad.Layout.ToggleLayouts
import XMonad.Layout.IM
import XMonad.Layout.Reflect
import XMonad.Actions.UpdatePointer
-- import XMonad.Layout.ShowWName
-- import XMonad.Actions.FlexibleManipulate hiding (position)
import XMonad.Prompt
import XMonad.Prompt.Shell
 
 
import qualified XMonad.StackSet as W
import qualified Data.Map        as M
 
 
shellPromptConfig = defaultXPConfig
	{ position = Top
--	, showCompletionOnTab = True
	}
 
------------------------------------------------------------------------
-- Key bindings. Add, modify or remove key bindings here.
--
myKeys conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $
 
    -- launch a terminal
    [ ((modMask .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf)
    , ((modMask              , xK_e),      spawn $ XMonad.terminal conf)
 
    , ((modMask              , xK_s     ), spawn "sm")
 
    --, ((modMask              , xK_r     ), spawn "gmrun")
    , ((modMask              , xK_r     ), shellPrompt shellPromptConfig)
 
    -- close focused window 
    , ((modMask .|. shiftMask, xK_c     ), kill)
 
     -- Rotate through the available layout algorithms
    , ((modMask,               xK_space ), sendMessage NextLayout)
 
    --  Reset the layouts on the current workspace to default
    , ((modMask .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf)
 
    , ((modMask              , xK_f), sendMessage ToggleLayout)
 
    -- Resize viewed windows to the correct size
    --, ((modMask .|. shiftMask, xK_n     ), refresh)
 
    -- Move focus to the next window
    , ((modMask,               xK_Tab   ), windows W.focusDown)
 
    -- Move focus to the next window
    , ((modMask,               xK_j     ), windows W.focusDown)
 
    -- Move focus to the previous window
    , ((modMask,               xK_k     ), windows W.focusUp  )
 
    -- Move focus to the master window
    , ((modMask,               xK_m     ), windows W.focusMaster  )
 
    -- Swap the focused window and the master window
    , ((modMask,               xK_Return), windows W.swapMaster)
 
    -- Swap the focused window with the next window
    , ((modMask .|. shiftMask, xK_j     ), windows W.swapDown  )
 
    -- Swap the focused window with the previous window
    , ((modMask .|. shiftMask, xK_k     ), windows W.swapUp    )
 
    -- Shrink the master area
    , ((modMask,               xK_h     ), sendMessage Shrink)
 
    -- Expand the master area
    , ((modMask .|. shiftMask, xK_k     ), sendMessage MirrorExpand)
 
    -- Shrink the master area
    , ((modMask .|. shiftMask, xK_j     ), sendMessage MirrorShrink)
 
    -- Expand the master area
    , ((modMask,               xK_l     ), sendMessage Expand)
 
    -- Push window back into tiling
    , ((modMask .|. shiftMask, xK_t     ), withFocused $ windows . W.sink)
 
    -- Increment the number of windows in the master area
    , ((modMask              , xK_comma ), sendMessage (IncMasterN 1))
 
    -- Deincrement the number of windows in the master area
    , ((modMask              , xK_period), sendMessage (IncMasterN (-1)))
 
    -- toggle the status bar gap
    , ((modMask              , xK_b     ), sendMessage ToggleStruts)
 
    -- Quit xmonad
    , ((modMask .|. shiftMask, xK_q     ), io (exitWith ExitSuccess))
 
    -- Restart xmonad
    , ((modMask              , xK_q     ),
          broadcastMessage ReleaseResources >> 
	  trace "Restarting xmonad" >>
	  restart "xmonad" True
	  )
    , ((modMask,               xK_Down), moveTo Next HiddenWS)
    , ((modMask,               xK_Up),   moveTo Prev HiddenWS)
    , ((modMask .|. shiftMask, xK_Down), shiftTo Next HiddenWS >> moveTo Next HiddenWS)
    , ((modMask .|. shiftMask, xK_Up),   shiftTo Prev HiddenWS >> moveTo Prev HiddenWS)
    , ((modMask,               xK_w), nextScreen) 
    , ((modMask,               xK_d), swapNextScreen)
    , ((modMask .|. shiftMask, xK_d), shiftNextScreen)
    ]
    ++
 
    --
    -- mod-[1..9], Switch to workspace N
    -- mod-shift-[1..9], Move client to workspace N
    --
    [((m .|. modMask, k), windows $ f i)
        | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
        , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
 
    --
    -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3
    -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
    --
    --[((m .|. modMask, key), screenWorkspace sc >>= flip whenJust (windows . f))
    --     | (key, sc) <- zip [xK_w, xK_a] [0..]
    --    , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
--
 
------------------------------------------------------------------------
-- Mouse bindings: default actions bound to mouse events
--
myMouseBindings (XConfig {XMonad.modMask = modMask}) = M.fromList $
 
    -- mod-button1, Set the window to floating mode and move by dragging
    [ ((modMask, button1), (\w -> focus w >> mouseMoveWindow w ))
    --[ ((modMask, button1), (\w -> focus w >> mouseWindow discrete w ))
 
    -- mod-button2, Set the window to floating mode and resize by dragging
    , ((modMask, button2), (\w -> focus w >> mouseResizeWindow w))
 
    -- you may also bind events to the mouse scroll wheel (button4 and button5)
    ]
 
data EventHookExample = EventHookExample deriving ( Show, Read )
instance EventHook EventHookExample where
       handleEvent _ e = io $ hPutStrLn stderr . show $ e --return ()
 
--myLayout = {- eventHook EventHookExample $-}  ewmhDesktopsLayout $ avoidStruts $
--		smartBorders $ toggleLayouts Full (tiled ||| Mirror tiled)
myLayout = -- eventHook EventHookExample $
           ewmhDesktopsLayout $ 
	   --smartBorders $
--	   showWName $
	   avoidStruts $
	   toggleLayouts Full $
 	   reflectHoriz $
	   withIM (1%6) (And (ClassName "Pidgin") (Role "buddy_list")) $
 	   reflectHoriz $
	   tiled ||| Mirror tiled
  where
     --tiled   = Tall nmaster delta ratio
     tiled   = ResizableTall 1 (3/100) (1/2) []
 
myManageHook = composeAll
    [ manageDocks
    , className =? "MPlayer"        --> doFloat
    ]
 
myLogHook = ewmhDesktopsLogHook
	    --updatePointer Nearest
	    >> updatePointer (Relative 0.9 0.9)
 
main = xmonad $ defaultConfig {
      -- simple stuff
        terminal           = "gnome-terminal",
        borderWidth        = 0,
        modMask            = mod4Mask,
	workspaces         = ["1","2","3","4","5","6"],
	normalBorderColor  = "#dddddd",
	focusedBorderColor = "#ff0000",
 
        keys               = myKeys,
        mouseBindings      = myMouseBindings,
 
        layoutHook         = myLayout,
        manageHook         = myManageHook,
        logHook            = myLogHook
    }