Xmonad/Config archive/webframp's xmonad.hs
From HaskellWiki
< Xmonad | Config archive
----------------------------------------------------------------------- -- -- Module : xmonad.hs -- Copyright : (c) Sean Escriva 2008 -- License : BSD3-style (see LICENSE) -- -- Maintainer : sean.escriva@gmail.com -- Stability : unstable -- Portability : not portable, -- -- customization for the xmonad window manager ----------------------------------------------------------------------- -- Imports {{{ import XMonad -- Hooks import XMonad.Hooks.DynamicLog hiding (xmobar, xmobarPP, xmobarColor, sjanssenPP, byorgeyPP) import XMonad.Hooks.UrgencyHook (withUrgencyHook, NoUrgencyHook(..), focusUrgent) import XMonad.Hooks.ManageDocks (avoidStruts, manageDocks, ToggleStruts(..)) -- Prompt import XMonad.Prompt import XMonad.Prompt.RunOrRaise import XMonad.Prompt.Shell (shellPrompt, prompt, safePrompt) import XMonad.Prompt.Workspace import XMonad.Prompt.AppendFile -- Actions import XMonad.Actions.CycleWS --(nextWS, prevWS, shiftToNext, shiftToPrev, nextScreen, prevScreen, shiftNextScreen, shiftPrevScreen, toggleWS) import XMonad.Actions.WindowGo (title, raise, raiseMaybe, raiseBrowser, raiseEditor, runOrRaise, (=?)) import XMonad.Actions.UpdatePointer import qualified XMonad.Actions.Search as S -- Util import XMonad.Util.Run (safeSpawn, unsafeSpawn, runInTerm, spawnPipe) import XMonad.Util.Scratchpad (scratchpadSpawnAction, scratchpadManageHook) import XMonad.Util.XSelection (safePromptSelection) import XMonad.Util.EZConfig hiding (additionalMouseBindings, removeMouseBindings) -- Layouts import XMonad.Layout.NoBorders (smartBorders) import XMonad.Layout.ResizableTile (ResizableTall(..)) import System.IO (hPutStrLn) import qualified XMonad.StackSet as W import qualified Data.Map as M --}}} -- Main {{{ main = do dzpipe <- spawnPipe statusBarCmd xmonad $ withUrgencyHook NoUrgencyHook $ defaultConfig { terminal = mTerm , focusFollowsMouse = False , borderWidth = 1 , modMask = mod4Mask -- win key , numlockMask = mod2Mask , workspaces = ["mail","web","code","irc","term","read","game","art","win"] , normalBorderColor = colorNormalBorder , focusedBorderColor = colorFocusedBorder , layoutHook = mLayout , manageHook = mManageHook , logHook = (dynamicLogWithPP $ mPP dzpipe) >> updatePointer (Relative 0.95 0.95) , startupHook = return () >> checkKeymap defaultConfig lacKeys } `additionalKeysP` lacKeys `additionalKeys` -- need these since a few keys are not defined in EZConfig -- Mediakeys on the Latitude D830 [ ((0 ,0x1008ff11 ), unsafeSpawn "amixer -q set Master 2dB-" ) -- XF86AudioLowerVolume , ((0 ,0x1008ff12 ), unsafeSpawn "amixer -q set Master toggle") -- XF86Audio Mute , ((0 ,0x1008ff13 ), unsafeSpawn "amixer -q set Master 2dB+" ) -- XF86AudioRaiseVolume , ((0 ,xK_Print ), unsafeSpawn "scrot '%Y-%m-%d-%H%M_$wx$h.png' -e 'mv $f ~/screenshots/'") -- Print Screen ] -- }}} -- Config {{{ -- single options here, more complex settings(by comparison) get separated -- }}} -- Theme {{{ colorNormalBorder = "#1c2636" colorFocusedBorder = "#99ff99" colorNormalBG = "#1e1e27" colorNormalFG = "#cfbfad" colorFocusFG = "#33ccff" colorFocusBG = "#1C2636" colorFocusBO = "#99ffcc" colorUrgentBG = "#ff00cc" colorUrgentFG = "#00ff99" --barFont = "snap" --barXFont = "-artwiz-snap-*-*-*-*-*-*-*-*-*-*-iso8859" barFont = "terminus" barXFont = "-*-terminus-*-*-*-*-14-*-*-*-*-*-*-*" --}}} statusBarCmd = "dzen2" ++ " -bg '" ++ colorNormalBG ++ "'" ++ " -fg '" ++ colorNormalFG ++ "'" ++ " -sa c" ++ " -fn '" ++ barXFont ++ "'" ++ " -ta l -expand r -e ''" notesFile = "/home/webframp/TODO" mTerm = "urxvt" -- Custom Searches enro40 = S.searchEngine "enro40" "http://dictionare.com/phpdic/enro40.php?field0=" roen40 = S.searchEngine "roen40" "http://dictionare.com/phpdic/roen40.php?field0=" -- Pretty printer {{{ -- dynamiclog pretty printer for dzen mPP h = defaultPP { ppCurrent = wrap ("^fg(" ++ colorFocusFG ++ ")^bg(" ++ colorFocusBG ++ ")^p(2)") "^p(2)^fg()^bg()" , ppVisible = wrap ("^fg(" ++ colorNormalFG ++ ")^bg(" ++ colorNormalBG ++ ")^p(2)") "^p(2)^fg()^bg()" , ppSep = " ^fg(grey60)^r(1x8)^fg() " , ppLayout = dzenColor colorNormalFG "" . (\x -> case x of "Mirror Tall" -> "^i(/home/webframp/.xmonad/dzen/mtall.xbm)" "ResizableTall" -> "^i(/home/webframp/.xmonad/dzen/tall.xbm)" "Full" -> "^i(/home/webframp/.xmonad/dzen/full.xbm)" _ -> " " ++ x ++ " " ) , ppUrgent = dzenColor colorNormalBG colorUrgentBG . wrap "[" "]" , ppTitle = dzenColor colorFocusFG "" . wrap "<" ">" , ppOutput = hPutStrLn h } --}}} -- Prompt Config {{{ mXPConfig = XPC { font = barFont , bgColor = colorFocusBG , fgColor = colorNormalFG , bgHLight = colorNormalBG , fgHLight = colorFocusFG , borderColor = "black" , promptBorderWidth = 0 , position = Bottom , height = 14 , historySize = 256 , historyFilter = id , defaultText = "" , autoComplete = Nothing , showCompletionOnTab = False } largeXPConfig = mXPConfig { font = "-*-terminus-*-*-*-*-16-*-*-*-*-*-*-*" , height = 16 } -- }}} -- Layout Hook{{{ mLayout = avoidStruts $ smartBorders( Mirror tiled ||| ResizableTall 1 (3/100) (1/2) [] ||| Full) where tiled = Tall nmaster delta ratio nmaster = 1 ratio = toRational (2/(1+sqrt(5)::Double)) -- golden, thx Octoploid delta = 0.03 --}}} -- Window rules aka Manage Hook {{{ mManageHook = scratchpadManageHook (W.RationalRect 0.25 0.375 0.5 0.35) <+> (composeAll . concat $ [ [ className =? c --> doFloat | c <- floats ] , [ className =? w --> moveTo "web" | w <- webs] , [ className =? g --> moveTo "game" | g <- games] , [ resource =? "desktop_window" --> doIgnore , className =? "Epdfview" --> moveTo "read" , title =? "mutt" --> moveTo "mail" , title =? "irssi" --> moveTo "irc" , title =? "Save a Bookmark" --> doFloat , title =? "Add-ons" --> doFloat , className =? "Mitter" --> moveTo "irc" , className =? "Evolution" --> moveTo "mail" , className =? "VirtualBox" --> moveTo "win" , className =? "Tsclient" --> moveTo "win" ] ]) <+> manageDocks -- make some space where floats = ["Mplayer","Gimp","Gimp-2.4","Tsclient","VirtualBox","Gtklp","smc"] webs = ["Navigator","Gran Paradiso","Firefox", "Midori"] games = ["roguestar-gl","neverputt","neverball","wesnoth"] moveTo = doF . W.shift -- }}} lacKeys = [ ("M-p" , runOrRaisePrompt largeXPConfig { bgHLight = colorFocusFG, fgHLight = colorNormalBG }) , ("M-g" , runOrRaise "firefox" (className =? "Gran Paradiso")) , ("M-S-g" , safePromptSelection "firefox") , ("M-w" , workspacePrompt largeXPConfig (windows . W.view)) , ("M-S-w" , workspacePrompt largeXPConfig (windows . W.shift)) , ("M-C-n" , appendFilePrompt largeXPConfig { bgColor = colorFocusFG, fgColor = colorFocusBG } notesFile) , ("M-S-z" , safeSpawn "mocp" "-G") -- play/pause , ("M-S-<L>" , safeSpawn "mocp" "-r") -- rev , ("M-S-<R>" , safeSpawn "mocp" "-f") -- fwd , ("M-<Esc>" , focusUrgent) , ("M-`" , scratchpadSpawnAction defaultConfig { terminal = mTerm }) -- scratchpad , ("M-S-x" , unsafeSpawn "slock") -- screen lock , ("M-<Sys_Req>", unsafeSpawn "scrot '%Y-%m-%d-%H%M_$wx$h.png' -e 'mv $f ~/screenshots/'") , ("M-i" , raiseMaybe (runInTerm "-title irssi" "sh -c 'screen -D -R -S irc irssi'") (title =? "irssi")) , ("M-m" , raiseMaybe (runInTerm "-title mutt" "sh -c 'screen -D -R -S mail mutt'") (title =? "mutt")) , ("M-S-m", runOrRaise "evolution" (className =? "Evolution")) , ("M-e" , safeSpawn "pcmanfm" "--no-desktop") , ("M-b" , sendMessage ToggleStruts) , ("M-s" , moveTo Next NonEmptyWS) , ("M-d" , moveTo Prev NonEmptyWS) , ("M-C-s", nextWS) , ("M-C-d", prevWS) , ("M-S-s", shiftToNext) , ("M-S-d", shiftToPrev) , ("M-f" , nextScreen) , ("M-a" , prevScreen) , ("M-S-f", shiftNextScreen) , ("M-S-a", shiftPrevScreen) , ("M-z" , toggleWS) ] ++ -- Search methods -- mapped to mod-c for 'a căuta' [("M-c " ++ k,f) | (k,f) <- [ ("g", S.promptSearch largeXPConfig S.google) , ("h", S.promptSearch largeXPConfig S.hoogle) , ("w", S.promptSearch largeXPConfig S.wikipedia) , ("d", S.promptSearch largeXPConfig S.dictionary) , ("t", S.promptSearch largeXPConfig S.thesaurus) , ("a", S.promptSearch largeXPConfig S.amazon) , ("y", S.promptSearch largeXPConfig S.youtube) , ("r", S.promptSearch largeXPConfig enro40) ]] -- vim:foldmethod=marker sw=4 sts=4 ts=4 tw=0 et ai nowrap
