Difference between revisions of "Xmonad/Config archive/vvv's xmonad.hs"
From HaskellWiki
< Xmonad | Config archive
(CustomKeys.hs moved into `Util' directory) |
m |
||
(10 intermediate revisions by one other user not shown) | |||
Line 2: | Line 2: | ||
{-# OPTIONS_GHC -Wall #-} | {-# OPTIONS_GHC -Wall #-} | ||
import XMonad | import XMonad | ||
− | |||
− | |||
import qualified XMonad.StackSet as W | import qualified XMonad.StackSet as W | ||
− | |||
-- XMonadContrib | -- XMonadContrib | ||
Line 11: | Line 8: | ||
import XMonad.Actions.DynamicWorkspaces | import XMonad.Actions.DynamicWorkspaces | ||
import XMonad.Actions.Submap | import XMonad.Actions.Submap | ||
− | import XMonad.Hooks. | + | import XMonad.Hooks.ManageDocks |
import XMonad.Layout.NoBorders | import XMonad.Layout.NoBorders | ||
import XMonad.Prompt | import XMonad.Prompt | ||
Line 17: | Line 14: | ||
import XMonad.Prompt.Shell | import XMonad.Prompt.Shell | ||
import XMonad.Prompt.Ssh | import XMonad.Prompt.Ssh | ||
− | import XMonad.Util. | + | import XMonad.Util.EZConfig |
import Data.Bits ((.|.)) | import Data.Bits ((.|.)) | ||
import qualified Data.Map as M | import qualified Data.Map as M | ||
import Data.Ratio ((%)) | import Data.Ratio ((%)) | ||
+ | import Control.Monad (ap) | ||
main :: IO () | main :: IO () | ||
− | main = xmonad defaultConfig | + | main = xmonad $ customKeys $ defaultConfig |
− | { workspaces | + | { workspaces = ["1:emacs", "2:ssh", "3:web", "4:qemu"] |
− | + | , layoutHook = avoidStruts (tiled ||| Mirror tiled ||| noBorders Full) | |
− | , layoutHook | + | , modMask = mod4Mask |
− | |||
− | , modMask | ||
− | |||
− | |||
} | } | ||
where | where | ||
− | tiled = Tall 1 (2%100) ( | + | tiled = Tall 1 (2%100) (748%1440) -- Tall <nmaster> <delta> <ratio> |
+ | customKeys = (additionalKeys `ap` addKeys) . (removeKeys `ap` delKeys) | ||
− | delKeys :: XConfig l -> [ | + | type Key = (KeyMask, KeySym) |
+ | |||
+ | delKeys :: XConfig l -> [Key] | ||
delKeys XConfig {modMask = modm} = | delKeys XConfig {modMask = modm} = | ||
− | [ (modm .|. shiftMask, xK_Return) | + | [ (modm .|. shiftMask, xK_Return) -- > terminal |
− | , (modm, xK_p) | + | , (modm, xK_p) -- > dmenu |
− | , (modm .|. shiftMask, xK_p) | + | , (modm .|. shiftMask, xK_p) -- > gmrun |
− | , (modm .|. shiftMask, xK_c) | + | , (modm .|. shiftMask, xK_c) -- > close the focused window |
− | , (modm, xK_b) | + | , (modm, xK_b) -- > toggle status bar gap |
− | |||
− | |||
− | |||
− | |||
] | ] | ||
− | + | addKeys :: XConfig l -> [(Key, X ())] | |
− | + | addKeys 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, | + | , ((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 -q 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 -q set Master 1+") -- mod1-up %! Increase audio volume |
− | , ((modm | + | , ((modm, xK_z ), spawn "mpc --no-status prev") -- mod1-z %! MPD: Play the previous song in the current playlist |
− | , ((modm, | + | , ((modm, xK_c ), spawn "mpc --no-status toggle") -- mod1-c %! MPD: Toggle play/pause, play if stopped |
+ | , ((modm, xK_v ), spawn "mpc --no-status stop") -- mod1-v %! MPD: Stop the currently playing playlists | ||
+ | , ((modm, xK_b ), spawn "mpc --no-status next") -- mod1-b %! MPD: Play the next song in the current playlist | ||
+ | , ((modm, xK_s ), sendMessage ToggleStruts) -- mod1-s %! Toggle the status bar gap | ||
+ | , ((modm .|. controlMask, xK_F1), spawn "mpc --no-status pause; xscreensaver-command -lock") -- %! Lock the screen | ||
+ | , ((modm .|. controlMask, xK_F3), spawn "lsmod | grep -q psmouse && sudo rmmod psmouse || sudo modprobe psmouse") -- %! Toggle touchpad | ||
] | ] | ||
++ | ++ | ||
Line 63: | Line 61: | ||
, ((mod1Mask, xK_F4), sshPrompt defaultXPConfig) -- mod1-f4 %! Query for host to connect to with SSH | , ((mod1Mask, xK_F4), sshPrompt defaultXPConfig) -- mod1-f4 %! Query for host to connect to with SSH | ||
− | , (-- mod- | + | , ((modm, xK_0 ), toggleWS) -- mod-0 %! Toggle to the workspace displayed previously |
− | (modm, | + | , ((modm, xK_minus), prevWS ) -- mod-- %! Switch to the previous workspace |
+ | , ((modm, xK_equal), nextWS ) -- mod-= %! Switch to the next workspace | ||
+ | |||
+ | , (-- mod-a submap | ||
+ | (modm, xK_a), submap . M.fromList $ | ||
[ ((m, k), f) | [ ((m, k), f) | ||
| m <- [0, modm] | | m <- [0, modm] | ||
− | , (k, f) <- [ ( | + | , (k, f) <- [ (xK_a, toggleWS) -- mod-a a, mod-a mod-a %! Toggle to the workspace displayed previously |
− | , (xK_p, prevWS ) -- mod- | + | , (xK_p, prevWS ) -- mod-a p, mod-a mod-p %! Switch to the previous workspace |
− | , (xK_n, nextWS ) -- mod- | + | , (xK_n, nextWS ) -- mod-a n, mod-a mod-n %! Switch to the next workspace |
+ | , (xK_Escape, return () ) -- mod-a esc, mod-a mod-a esc %! Do nothing (useful if `mod-a' was pressed by mistake) | ||
] | ] | ||
] | ] | ||
++ | ++ | ||
− | [ ((0, xK_apostrophe), selectWorkspace defaultXPConfig) -- mod- | + | [ ((0, xK_apostrophe), selectWorkspace defaultXPConfig) -- mod-a ' %! Prompt for a workspace number/name to switch to |
− | , ((shiftMask, xK_a ), renameWorkspace defaultXPConfig) -- mod- | + | , ((shiftMask, xK_a ), renameWorkspace defaultXPConfig) -- mod-a A %! Allow the user to enter a name for the current workspace |
− | , ((0, xK_BackSpace ), removeWorkspace) -- mod- | + | , ((0, xK_BackSpace ), removeWorkspace) -- mod-a backspace %! Destroy current workspace |
] | ] | ||
++ | ++ | ||
[ ((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 ) -- mod- | + | , (f, m) <- [ (W.greedyView, 0 ) -- mod-a [1..9] %! Switch to workspace 0..9 |
− | , (W.greedyView, modm) -- mod- | + | , (W.greedyView, modm) -- mod-a mod-[1..9] %! Switch to workspace 0..9 |
− | , (W.shift, shiftMask) -- mod- | + | , (W.shift, shiftMask) -- mod-a shift-[1..9] %! Move client to workspace 0..9 |
] | ] | ||
] | ] |
Latest revision as of 02:22, 9 October 2011
{-# OPTIONS_GHC -Wall #-}
import XMonad
import qualified XMonad.StackSet as W
-- XMonadContrib
import XMonad.Actions.CycleWS
import XMonad.Actions.DynamicWorkspaces
import XMonad.Actions.Submap
import XMonad.Hooks.ManageDocks
import XMonad.Layout.NoBorders
import XMonad.Prompt
import XMonad.Prompt.Man
import XMonad.Prompt.Shell
import XMonad.Prompt.Ssh
import XMonad.Util.EZConfig
import Data.Bits ((.|.))
import qualified Data.Map as M
import Data.Ratio ((%))
import Control.Monad (ap)
main :: IO ()
main = xmonad $ customKeys $ defaultConfig
{ workspaces = ["1:emacs", "2:ssh", "3:web", "4:qemu"]
, layoutHook = avoidStruts (tiled ||| Mirror tiled ||| noBorders Full)
, modMask = mod4Mask
}
where
tiled = Tall 1 (2%100) (748%1440) -- Tall <nmaster> <delta> <ratio>
customKeys = (additionalKeys `ap` addKeys) . (removeKeys `ap` delKeys)
type Key = (KeyMask, KeySym)
delKeys :: XConfig l -> [Key]
delKeys XConfig {modMask = modm} =
[ (modm .|. shiftMask, xK_Return) -- > terminal
, (modm, xK_p) -- > dmenu
, (modm .|. shiftMask, xK_p) -- > gmrun
, (modm .|. shiftMask, xK_c) -- > close the focused window
, (modm, xK_b) -- > toggle status bar gap
]
addKeys :: XConfig l -> [(Key, X ())]
addKeys 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 -q set Master 1-") -- mod1-down %! Decrease audio volume
, ((mod1Mask, xK_Up ), spawn "amixer -q set Master 1+") -- mod1-up %! Increase audio volume
, ((modm, xK_z ), spawn "mpc --no-status prev") -- mod1-z %! MPD: Play the previous song in the current playlist
, ((modm, xK_c ), spawn "mpc --no-status toggle") -- mod1-c %! MPD: Toggle play/pause, play if stopped
, ((modm, xK_v ), spawn "mpc --no-status stop") -- mod1-v %! MPD: Stop the currently playing playlists
, ((modm, xK_b ), spawn "mpc --no-status next") -- mod1-b %! MPD: Play the next song in the current playlist
, ((modm, xK_s ), sendMessage ToggleStruts) -- mod1-s %! Toggle the status bar gap
, ((modm .|. controlMask, xK_F1), spawn "mpc --no-status pause; xscreensaver-command -lock") -- %! Lock the screen
, ((modm .|. controlMask, xK_F3), spawn "lsmod | grep -q psmouse && sudo rmmod psmouse || sudo modprobe psmouse") -- %! Toggle touchpad
]
++
[ ((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
, ((modm, xK_0 ), toggleWS) -- mod-0 %! Toggle to the workspace displayed previously
, ((modm, xK_minus), prevWS ) -- mod-- %! Switch to the previous workspace
, ((modm, xK_equal), nextWS ) -- mod-= %! Switch to the next workspace
, (-- mod-a submap
(modm, xK_a), submap . M.fromList $
[ ((m, k), f)
| m <- [0, modm]
, (k, f) <- [ (xK_a, toggleWS) -- mod-a a, mod-a mod-a %! Toggle to the workspace displayed previously
, (xK_p, prevWS ) -- mod-a p, mod-a mod-p %! Switch to the previous workspace
, (xK_n, nextWS ) -- mod-a n, mod-a mod-n %! Switch to the next workspace
, (xK_Escape, return () ) -- mod-a esc, mod-a mod-a esc %! Do nothing (useful if `mod-a' was pressed by mistake)
]
]
++
[ ((0, xK_apostrophe), selectWorkspace defaultXPConfig) -- mod-a ' %! Prompt for a workspace number/name to switch to
, ((shiftMask, xK_a ), renameWorkspace defaultXPConfig) -- mod-a A %! Allow the user to enter a name for the current workspace
, ((0, xK_BackSpace ), removeWorkspace) -- mod-a backspace %! Destroy current workspace
]
++
[ ((m, k), withNthWorkspace f i)
| (i, k) <- zip [0..] [xK_1..xK_9]
, (f, m) <- [ (W.greedyView, 0 ) -- mod-a [1..9] %! Switch to workspace 0..9
, (W.greedyView, modm) -- mod-a mod-[1..9] %! Switch to workspace 0..9
, (W.shift, shiftMask) -- mod-a shift-[1..9] %! Move client to workspace 0..9
]
]
)
]