Difference between revisions of "Xmonad/Config archive/vvv's xmonad.hs"
< Xmonad | Config archive
Jump to navigation
Jump to search
(vvv's xmonad.hs: new page) |
(updated - I use Config.CustomKeys now) |
||
Line 1: | Line 1: | ||
<haskell> |
<haskell> |
||
{-# OPTIONS_GHC -Wall #-} |
{-# OPTIONS_GHC -Wall #-} |
||
− | -- core |
||
import XMonad |
import XMonad |
||
import XMonad.Layouts |
import XMonad.Layouts |
||
import XMonad.Operations |
import XMonad.Operations |
||
import qualified XMonad.StackSet as W |
import qualified XMonad.StackSet as W |
||
⚫ | |||
-- XMonadContrib |
-- XMonadContrib |
||
Line 11: | Line 11: | ||
import XMonad.Actions.DynamicWorkspaces |
import XMonad.Actions.DynamicWorkspaces |
||
import XMonad.Actions.Submap |
import XMonad.Actions.Submap |
||
+ | import XMonad.Config.CustomKeys |
||
import XMonad.Hooks.DynamicLog |
import XMonad.Hooks.DynamicLog |
||
import XMonad.Layout.NoBorders |
import XMonad.Layout.NoBorders |
||
Line 17: | Line 18: | ||
import XMonad.Prompt.Shell |
import XMonad.Prompt.Shell |
||
import XMonad.Prompt.Ssh |
import XMonad.Prompt.Ssh |
||
− | |||
⚫ | |||
import Data.Bits ((.|.)) |
import Data.Bits ((.|.)) |
||
import qualified Data.Map as M |
import qualified Data.Map as M |
||
− | import |
+ | import Data.Ratio ((%)) |
− | import Ratio ((%)) |
||
main :: IO () |
main :: IO () |
||
main = xmonad defaultConfig |
main = xmonad defaultConfig |
||
− | { workspaces = [" |
+ | { workspaces = ["1:term", "2:emacs", "3:web"] |
, defaultGaps = [(0,15,0,0)] |
, defaultGaps = [(0,15,0,0)] |
||
− | , layoutHook = |
+ | , layoutHook = tiled ||| Mirror tiled ||| noBorders Full |
, focusedBorderColor = "#00ff00" |
, focusedBorderColor = "#00ff00" |
||
, modMask = mod4Mask |
, modMask = mod4Mask |
||
− | , keys = |
+ | , keys = customKeys delKeys insKeys |
, logHook = dynamicLog |
, logHook = dynamicLog |
||
} |
} |
||
where |
where |
||
⚫ | |||
− | layout' = tiled ||| Mirror tiled ||| noBorders Full |
||
⚫ | |||
− | |||
− | 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 |
||
− | + | delKeys :: XConfig l -> [(KeyMask, KeySym)] |
|
− | + | delKeys XConfig {modMask = modm} = |
|
− | [ ( |
+ | [ (modm .|. shiftMask, xK_Return) |
− | , ( |
+ | , (modm, xK_p) |
− | , ( |
+ | , (modm .|. shiftMask, xK_p) |
− | , ( |
+ | , (modm .|. shiftMask, xK_c) |
− | , ( |
+ | , (modm, xK_b) |
] |
] |
||
++ |
++ |
||
− | [ ( |
+ | [ (modm .|. m, k) |
| (m, k) <- zip [0, shiftMask] ([xK_1..xK_9] ++ [xK_w, xK_e, xK_r]) |
| (m, k) <- zip [0, shiftMask] ([xK_1..xK_9] ++ [xK_w, xK_e, xK_r]) |
||
] |
] |
||
− | + | insKeys :: XConfig l -> [((KeyMask, KeySym), X ())] |
|
− | + | insKeys conf@(XConfig {modMask = modm}) = |
|
[ ((mod1Mask, xK_F2 ), spawn $ terminal conf) -- mod1-f2 %! Run a terminal emulator |
[ ((mod1Mask, xK_F2 ), spawn $ terminal conf) -- mod1-f2 %! Run a terminal emulator |
||
− | , (( |
+ | , ((modm, xK_Delete), kill) -- %! Close the focused window |
, ((mod1Mask, xK_Down ), spawn "amixer set Master 1-") -- mod1-down %! Decrease audio volume |
, ((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 |
, ((mod1Mask, xK_Up ), spawn "amixer set Master 1+") -- mod1-up %! Increase audio volume |
||
− | , (( |
+ | , ((modm .|. controlMask, xK_F11), spawn "xscreensaver-command -lock") -- %! Lock the screen |
− | , (( |
+ | , ((modm, 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 |
] |
] |
||
++ |
++ |
||
Line 76: | Line 64: | ||
, (-- mod-i submap |
, (-- mod-i submap |
||
− | ( |
+ | (modm, xK_i), submap . M.fromList $ |
[ ((m, k), f) |
[ ((m, k), f) |
||
− | | m <- [0, |
+ | | m <- [0, modm] |
, (k, f) <- [ (xK_i, toggleWS) -- mod-i i, mod-i mod-i %! Toggle to the workspace displayed previously |
, (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_p, prevWS ) -- mod-i p, mod-i mod-p %! Switch to the previous workspace |
||
Line 92: | Line 80: | ||
[ ((m, k), withNthWorkspace f i) |
[ ((m, k), withNthWorkspace f i) |
||
| (i, k) <- zip [0..] [xK_1..xK_9] |
| (i, k) <- zip [0..] [xK_1..xK_9] |
||
− | , (f, m) <- [ (W.greedyView, 0 |
+ | , (f, m) <- [ (W.greedyView, 0 ) -- mod-i [1..9] %! Switch to workspace 1..9 |
− | , (W.greedyView, |
+ | , (W.greedyView, modm) -- mod-i mod-[1..9] %! Switch to workspace 1..9 |
, (W.shift, shiftMask) -- mod-i shift-[1..9] %! Move client to workspace 1..9 |
, (W.shift, shiftMask) -- mod-i shift-[1..9] %! Move client to workspace 1..9 |
||
] |
] |
Revision as of 21:29, 13 November 2007
{-# OPTIONS_GHC -Wall #-}
import XMonad
import XMonad.Layouts
import XMonad.Operations
import qualified XMonad.StackSet as W
import Graphics.X11.Xlib
-- XMonadContrib
import XMonad.Actions.CycleWS
import XMonad.Actions.DynamicWorkspaces
import XMonad.Actions.Submap
import XMonad.Config.CustomKeys
import XMonad.Hooks.DynamicLog
import XMonad.Layout.NoBorders
import XMonad.Prompt
import XMonad.Prompt.Man
import XMonad.Prompt.Shell
import XMonad.Prompt.Ssh
import Data.Bits ((.|.))
import qualified Data.Map as M
import Data.Ratio ((%))
main :: IO ()
main = xmonad defaultConfig
{ workspaces = ["1:term", "2:emacs", "3:web"]
, defaultGaps = [(0,15,0,0)]
, layoutHook = tiled ||| Mirror tiled ||| noBorders Full
, focusedBorderColor = "#00ff00"
, modMask = mod4Mask
, keys = customKeys delKeys insKeys
, logHook = dynamicLog
}
where
tiled = Tall 1 (2%100) (755%1024) -- Tall <nmaster> <delta> <ratio>
delKeys :: XConfig l -> [(KeyMask, KeySym)]
delKeys XConfig {modMask = modm} =
[ (modm .|. shiftMask, xK_Return)
, (modm, xK_p)
, (modm .|. shiftMask, xK_p)
, (modm .|. shiftMask, xK_c)
, (modm, xK_b)
]
++
[ (modm .|. m, k)
| (m, k) <- zip [0, shiftMask] ([xK_1..xK_9] ++ [xK_w, xK_e, xK_r])
]
insKeys :: XConfig l -> [((KeyMask, KeySym), X ())]
insKeys conf@(XConfig {modMask = modm}) =
[ ((mod1Mask, xK_F2 ), spawn $ terminal conf) -- mod1-f2 %! Run a terminal emulator
, ((modm, 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
, ((modm .|. controlMask, xK_F11), spawn "xscreensaver-command -lock") -- %! Lock the screen
, ((modm, 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
(modm, xK_i), submap . M.fromList $
[ ((m, k), f)
| m <- [0, modm]
, (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, modm) -- mod-i mod-[1..9] %! Switch to workspace 1..9
, (W.shift, shiftMask) -- mod-i shift-[1..9] %! Move client to workspace 1..9
]
]
)
]