Difference between revisions of "Xmonad/Config archive/Gwern's xmonad.hs"
< Xmonad | Config archive
Jump to navigation
Jump to search
(+amarok binding) |
(update for managehooks) |
||
Line 1: | Line 1: | ||
<haskell> |
<haskell> |
||
− | {-# OPTIONS_GHC -fno-warn-missing-signatures #-} |
||
module Main where |
module Main where |
||
Line 11: | Line 10: | ||
terminal, XConfig), X()) -} |
terminal, XConfig), X()) -} |
||
import XMonad.Actions.Search (google, wayback, wikipedia, selectSearch, promptSearch) |
import XMonad.Actions.Search (google, wayback, wikipedia, selectSearch, promptSearch) |
||
⚫ | |||
import XMonad.Config (defaultConfig) |
import XMonad.Config (defaultConfig) |
||
⚫ | |||
⚫ | |||
⚫ | |||
+ | import XMonad.Hooks.UrgencyHook (withUrgencyHook, FocusHook(..)) |
||
import XMonad.Layout (Full(..), Mirror(..), Tall(..), (|||)) |
import XMonad.Layout (Full(..), Mirror(..), Tall(..), (|||)) |
||
import XMonad.Layout.NoBorders (smartBorders) |
import XMonad.Layout.NoBorders (smartBorders) |
||
import XMonad.Main (xmonad) |
import XMonad.Main (xmonad) |
||
import XMonad.Operations (kill, windows) |
import XMonad.Operations (kill, windows) |
||
− | import XMonad.Prompt (XPPosition(Top), XPConfig(historySize, height, position, |
+ | import XMonad.Prompt (XPPosition(Top), XPConfig(historySize, height, position, promptBorderWidth, fgColor, bgColor, font), defaultXPConfig) |
− | promptBorderWidth, fgColor, bgColor, font), defaultXPConfig) |
||
import XMonad.Prompt.Shell (shellPrompt, prompt, safePrompt) |
import XMonad.Prompt.Shell (shellPrompt, prompt, safePrompt) |
||
− | import XMonad.StackSet as W (W.focusUp, W.focusDown, W.sink) |
+ | import XMonad.StackSet as W -- (W.focusUp, W.focusDown, W.sink) |
import XMonad.Util.Run (unsafeSpawn, runInTerm) |
import XMonad.Util.Run (unsafeSpawn, runInTerm) |
||
import XMonad.Util.XSelection (safePromptSelection) |
import XMonad.Util.XSelection (safePromptSelection) |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
main :: IO () |
main :: IO () |
||
main = xmonad myConfig |
main = xmonad myConfig |
||
⚫ | |||
− | |||
− | -- Begin customizations |
||
⚫ | |||
, keys = \c -> myKeys c `M.union` keys defaultConfig c |
, keys = \c -> myKeys c `M.union` keys defaultConfig c |
||
, layoutHook = avoidStruts $ smartBorders (Full ||| tiled ||| Mirror tiled) |
, layoutHook = avoidStruts $ smartBorders (Full ||| tiled ||| Mirror tiled) |
||
, logHook = ewmhDesktopsLogHook |
, logHook = ewmhDesktopsLogHook |
||
− | , manageHook = |
+ | , manageHook = myManageHook |
, modMask = mod4Mask |
, modMask = mod4Mask |
||
, normalBorderColor = "grey" |
, normalBorderColor = "grey" |
||
, terminal = "urxvt" |
, terminal = "urxvt" |
||
+ | , XMonad.workspaces = ["web", "irc", "code", "music", show (5::Int)] |
||
} |
} |
||
where tiled :: Tall a |
where tiled :: Tall a |
||
tiled = Tall 1 0.03 0.5 |
tiled = Tall 1 0.03 0.5 |
||
+ | {- Important things to note: We specifically don't use 'managehook |
||
+ | defaultConfig, since I don't like floating mplayer and I don't use the other |
||
+ | specified applications. Otherwise, we have manageDocks there to allow use of |
||
+ | gnome-panel; Firefox/Emacs/Irssi go to their designated workspaces. -} |
||
+ | -- TODO: suggest that these functions be moved into XMonad proper; lots of |
||
+ | -- redundancy there... |
||
+ | myManageHook :: ManageHook |
||
+ | myManageHook = composeAll [ moveToC "Emacs" "code", |
||
+ | moveToC "Firefox" "web", |
||
+ | moveToC "MPlayer" "music", |
||
+ | moveToC "amarokapp" "music", |
||
+ | moveToC "rhythmbox" "music", |
||
+ | moveToC "totem" "music", |
||
+ | moveToT "irssi" "irc" ] |
||
+ | <+> manageDocks |
||
+ | where moveToC c w = className =? c --> doF (W.shift w) |
||
+ | moveToT t w = title =? t --> doF (W.shift w) |
||
+ | |||
+ | -- Green and black are easier on my eyes. |
||
greenXPConfig :: XPConfig |
greenXPConfig :: XPConfig |
||
− | greenXPConfig = defaultXPConfig { font = "9x15bold,xft: |
+ | greenXPConfig = defaultXPConfig { font = "9x15bold,xft:Bitstream Vera Sans" |
, bgColor = "black" |
, bgColor = "black" |
||
, fgColor = "green" |
, fgColor = "green" |
||
Line 53: | Line 70: | ||
myKeys :: XConfig t -> M.Map (KeyMask, KeySym) (X ()) |
myKeys :: XConfig t -> M.Map (KeyMask, KeySym) (X ()) |
||
− | myKeys (XConfig {modMask = m}) = M.fromList $ [ -- rebind standard actions |
+ | myKeys conf@(XConfig {modMask = m}) = M.fromList $ [ -- rebind standard actions |
((m .|. shiftMask,xK_p), shellPrompt greenXPConfig) |
((m .|. shiftMask,xK_p), shellPrompt greenXPConfig) |
||
, ((m, xK_k), kill) |
, ((m, xK_k), kill) |
||
Line 83: | Line 100: | ||
, ((m, xK_d), raiseBrowser) ] |
, ((m, xK_d), raiseBrowser) ] |
||
where term :: String |
where term :: String |
||
− | term = |
+ | term = XMonad.terminal conf |
</haskell> |
</haskell> |
Revision as of 05:33, 27 July 2008
module Main where
import Data.Bits (Bits((.|.)))
import Data.Map as M (M.fromList, M.union, Map())
import XMonad
{- XMonad re-exports Graphics.X11, so we can't enumerate imports without also
enumerating all the keys and such-like. The stuff from XMonad itself is:
(XConfig(layoutHook, keys, modMask, focusedBorderColor, normalBorderColor,
terminal, XConfig), X()) -}
import XMonad.Actions.Search (google, wayback, wikipedia, selectSearch, promptSearch)
import XMonad.Actions.WindowGo (title, raiseMaybe, raiseBrowser, raiseEditor, runOrRaise, (=?))
import XMonad.Config (defaultConfig)
import XMonad.Config.Gnome (gnomeConfig)
import XMonad.Hooks.EwmhDesktops (ewmhDesktopsLogHook)
import XMonad.Hooks.ManageDocks (avoidStruts, manageDocks)
import XMonad.Hooks.UrgencyHook (withUrgencyHook, FocusHook(..))
import XMonad.Layout (Full(..), Mirror(..), Tall(..), (|||))
import XMonad.Layout.NoBorders (smartBorders)
import XMonad.Main (xmonad)
import XMonad.Operations (kill, windows)
import XMonad.Prompt (XPPosition(Top), XPConfig(historySize, height, position, promptBorderWidth, fgColor, bgColor, font), defaultXPConfig)
import XMonad.Prompt.Shell (shellPrompt, prompt, safePrompt)
import XMonad.StackSet as W -- (W.focusUp, W.focusDown, W.sink)
import XMonad.Util.Run (unsafeSpawn, runInTerm)
import XMonad.Util.XSelection (safePromptSelection)
main :: IO ()
main = xmonad myConfig
where myConfig = withUrgencyHook FocusHook $ gnomeConfig { focusedBorderColor = "red"
, keys = \c -> myKeys c `M.union` keys defaultConfig c
, layoutHook = avoidStruts $ smartBorders (Full ||| tiled ||| Mirror tiled)
, logHook = ewmhDesktopsLogHook
, manageHook = myManageHook
, modMask = mod4Mask
, normalBorderColor = "grey"
, terminal = "urxvt"
, XMonad.workspaces = ["web", "irc", "code", "music", show (5::Int)]
}
where tiled :: Tall a
tiled = Tall 1 0.03 0.5
{- Important things to note: We specifically don't use 'managehook
defaultConfig, since I don't like floating mplayer and I don't use the other
specified applications. Otherwise, we have manageDocks there to allow use of
gnome-panel; Firefox/Emacs/Irssi go to their designated workspaces. -}
-- TODO: suggest that these functions be moved into XMonad proper; lots of
-- redundancy there...
myManageHook :: ManageHook
myManageHook = composeAll [ moveToC "Emacs" "code",
moveToC "Firefox" "web",
moveToC "MPlayer" "music",
moveToC "amarokapp" "music",
moveToC "rhythmbox" "music",
moveToC "totem" "music",
moveToT "irssi" "irc" ]
<+> manageDocks
where moveToC c w = className =? c --> doF (W.shift w)
moveToT t w = title =? t --> doF (W.shift w)
-- Green and black are easier on my eyes.
greenXPConfig :: XPConfig
greenXPConfig = defaultXPConfig { font = "9x15bold,xft:Bitstream Vera Sans"
, bgColor = "black"
, fgColor = "green"
, promptBorderWidth = 0
, position = Top
, height = 16
, historySize = 256 }
myKeys :: XConfig t -> M.Map (KeyMask, KeySym) (X ())
myKeys conf@(XConfig {modMask = m}) = M.fromList $ [ -- rebind standard actions
((m .|. shiftMask,xK_p), shellPrompt greenXPConfig)
, ((m, xK_k), kill)
, ((m, xK_n), windows W.focusDown)
, ((m, xK_p), windows W.focusUp)
, ((m, xK_u), withFocused $ windows . W.sink) -- unfloat
-- Add custom bindings and commands
, ((m, xK_a), runOrRaise "amarok" (className =? "amarokapp"))
, ((m, xK_b), safePrompt "firefox" greenXPConfig)
, ((m .|. shiftMask,xK_b), safePromptSelection "firefox")
, ((m, xK_c), unsafeSpawn term)
, ((m .|. shiftMask,xK_c), prompt (term ++ " -e") greenXPConfig)
, ((m .|. shiftMask,xK_d), raiseMaybe (runInTerm "-title elinks" "elinks") (title =? "elinks"))
, ((m, xK_e), raiseEditor)
, ((m .|. shiftMask,xK_e), prompt "emacsclient -a emacs" greenXPConfig)
, ((m, xK_g), promptSearch greenXPConfig google)
, ((m .|. shiftMask,xK_g), selectSearch google)
, ((m, xK_t), promptSearch greenXPConfig wikipedia)
, ((m .|. shiftMask,xK_t), selectSearch wikipedia)
, ((m, xK_y), promptSearch greenXPConfig wayback)
, ((m .|. shiftMask,xK_y), selectSearch wayback)
, ((m, xK_Print), unsafeSpawn "import -quality 90 -window root png:$HOME/xwd-$(date +%s)$$.png")
, ((m, xK_i), raiseMaybe (runInTerm "-title irssi" "sh -c 'screen -r irssi'") (title =? "irssi"))
-- We ask for zsh specifically so .zshenv gets picked up and my
-- expanded $PATH gets used; otherwise Mutt can't find needed scripts.
, ((m, xK_m), raiseMaybe (runInTerm "-title mutt" "zsh -c 'mutt'") (title =? "mutt"))
, ((m .|. shiftMask,xK_m), runOrRaise "mnemosyne" (className =? "Mnemosyne"))
, ((m, xK_r), raiseMaybe (runInTerm "-title rtorrent" "sh -c 'screen -r rtorrent'") (title =? "rtorrent"))
, ((m, xK_d), raiseBrowser) ]
where term :: String
term = XMonad.terminal conf