Xmonad/Config archive/vvv's xmonad.hs
From HaskellWiki
< Xmonad | Config archive
{-# OPTIONS_GHC -Wall #-} -- core import XMonad import XMonad.Layouts import XMonad.Operations import qualified XMonad.StackSet as W -- XMonadContrib import XMonad.Actions.CycleWS import XMonad.Actions.DynamicWorkspaces import XMonad.Actions.Submap import XMonad.Hooks.DynamicLog import XMonad.Layout.NoBorders import XMonad.Prompt import XMonad.Prompt.Man import XMonad.Prompt.Shell import XMonad.Prompt.Ssh import Graphics.X11.Xlib import Data.Bits ((.|.)) import qualified Data.Map as M import Prelude hiding (mod) import Ratio ((%)) main :: IO () main = xmonad defaultConfig { workspaces = ["emacs", "term", "web"] , defaultGaps = [(0,15,0,0)] , layoutHook = Layout layout' , focusedBorderColor = "#00ff00" , modMask = mod4Mask , keys = keys' , logHook = dynamicLog } where layout' = tiled ||| Mirror tiled ||| noBorders Full tiled = Tall 1 (2%100) (755%1024) -- Tall <nmaster> <delta> <ratio> keys' :: XConfig -> M.Map (KeyMask, KeySym) (X ()) keys' c = insert (iks c) $ delete (dks c) $ (keys defaultConfig) c where insert :: (Ord k) => [(k, a)] -> M.Map k a -> M.Map k a insert = flip $ foldr (uncurry M.insert) delete :: (Ord k) => [k] -> M.Map k a -> M.Map k a delete = flip $ foldr M.delete dks :: XConfig -> [(KeyMask, KeySym)] dks XConfig {modMask = mod} = [ (mod .|. shiftMask, xK_Return) , (mod, xK_p) , (mod .|. shiftMask, xK_p) , (mod .|. shiftMask, xK_c) , (mod, xK_b) ] ++ [ (mod .|. m, k) | (m, k) <- zip [0, shiftMask] ([xK_1..xK_9] ++ [xK_w, xK_e, xK_r]) ] iks :: XConfig -> [((KeyMask, KeySym), X ())] iks conf@(XConfig {modMask = mod}) = [ ((mod1Mask, xK_F2 ), spawn $ terminal conf) -- mod1-f2 %! Run a terminal emulator , ((mod, xK_Delete), kill) -- %! Close the focused window , ((mod1Mask, xK_Down ), spawn "amixer set Master 1-") -- mod1-down %! Decrease audio volume , ((mod1Mask, xK_Up ), spawn "amixer set Master 1+") -- mod1-up %! Increase audio volume , ((mod .|. controlMask, xK_F11), spawn "xscreensaver-command -lock") -- %! Lock the screen , ((mod, xK_s ), modifyGap (\i n -> let x = (defaultGaps conf ++ repeat (0,0,0,0)) !! i in if n == x then (0,0,0,0) else x)) -- %! Toggle the status bar gap ] ++ [ ((mod1Mask, xK_F1), manPrompt defaultXPConfig) -- mod1-f1 %! Query for manual page to be displayed , ((mod1Mask, xK_F3), shellPrompt defaultXPConfig) -- mod1-f3 %! Query for command line to execute , ((mod1Mask, xK_F4), sshPrompt defaultXPConfig) -- mod1-f4 %! Query for host to connect to with SSH , (-- mod-i submap (mod, xK_i), submap . M.fromList $ [ ((m, k), f) | m <- [0, mod] , (k, f) <- [ (xK_i, toggleWS) -- mod-i i, mod-i mod-i %! Toggle to the workspace displayed previously , (xK_p, prevWS ) -- mod-i p, mod-i mod-p %! Switch to the previous workspace , (xK_n, nextWS ) -- mod-i n, mod-i mod-n %! Switch to the next workspace ] ] ++ [ ((0, xK_apostrophe), selectWorkspace defaultXPConfig) -- mod-i ' %! Prompt for a workspace number/name to switch to , ((shiftMask, xK_a ), renameWorkspace defaultXPConfig) -- mod-i A %! Allow the user to enter a name for the current workspace , ((0, xK_BackSpace ), removeWorkspace) -- mod-i backspace %! Destroy current workspace ] ++ [ ((m, k), withNthWorkspace f i) | (i, k) <- zip [0..] [xK_1..xK_9] , (f, m) <- [ (W.greedyView, 0) -- mod-i [1..9] %! Switch to workspace 1..9 , (W.greedyView, mod) -- mod-i mod-[1..9] %! Switch to workspace 1..9 , (W.shift, shiftMask) -- mod-i shift-[1..9] %! Move client to workspace 1..9 ] ] ) ]
