Xmonad/Config archive/webframp's xmonad.hs
From HaskellWiki
(Difference between revisions)
(color theme, layout, keybindings changed) |
(updated config, small changes) |
||
| Line 8: | Line 8: | ||
-- Maintainer : sean.escriva@gmail.com | -- Maintainer : sean.escriva@gmail.com | ||
-- Stability : unstable | -- Stability : unstable | ||
| - | -- Portability : not portable, | + | -- Portability : not portable, |
-- | -- | ||
-- customization for the xmonad window manager | -- customization for the xmonad window manager | ||
----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ||
| + | |||
-- Imports {{{ | -- Imports {{{ | ||
import XMonad | import XMonad | ||
| Line 18: | Line 19: | ||
import XMonad.Hooks.UrgencyHook (withUrgencyHook, NoUrgencyHook(..), focusUrgent) | import XMonad.Hooks.UrgencyHook (withUrgencyHook, NoUrgencyHook(..), focusUrgent) | ||
import XMonad.Hooks.ManageDocks (avoidStruts, manageDocks, ToggleStruts(..)) | import XMonad.Hooks.ManageDocks (avoidStruts, manageDocks, ToggleStruts(..)) | ||
| - | import XMonad.Hooks.ManageHelpers | + | import XMonad.Hooks.ManageHelpers (isFullscreen, isDialog, doFullFloat, doCenterFloat) |
| + | import XMonad.Hooks.SetWMName | ||
-- Prompt | -- Prompt | ||
import XMonad.Prompt | import XMonad.Prompt | ||
import XMonad.Prompt.RunOrRaise (runOrRaisePrompt) | import XMonad.Prompt.RunOrRaise (runOrRaisePrompt) | ||
| - | |||
| - | |||
import XMonad.Prompt.AppendFile (appendFilePrompt) | import XMonad.Prompt.AppendFile (appendFilePrompt) | ||
| - | -- Actions | + | -- Actions |
| - | import XMonad.Actions.CycleWS | + | import XMonad.Actions.CycleWS (nextScreen, prevScreen, shiftNextScreen, shiftPrevScreen, toggleWS, WSDirection(..), WSType(..), findWorkspace) |
| - | import XMonad.Actions.WindowGo (title, raiseMaybe, runOrRaise, (=?)) | + | import XMonad.Actions.WindowGo (title, raiseMaybe, runOrRaise) --, (=?)) |
import XMonad.Actions.UpdatePointer | import XMonad.Actions.UpdatePointer | ||
import qualified XMonad.Actions.Search as S | import qualified XMonad.Actions.Search as S | ||
| - | import | + | import XMonad.Actions.GridSelect |
-- Util | -- Util | ||
import XMonad.Util.Run (safeSpawn, unsafeSpawn, runInTerm, spawnPipe) | import XMonad.Util.Run (safeSpawn, unsafeSpawn, runInTerm, spawnPipe) | ||
| - | import XMonad.Util.Scratchpad (scratchpadSpawnAction, scratchpadManageHook | + | import XMonad.Util.Scratchpad (scratchpadSpawnAction, scratchpadManageHook, scratchpadFilterOutWorkspace) |
import XMonad.Util.XSelection (safePromptSelection) | import XMonad.Util.XSelection (safePromptSelection) | ||
import XMonad.Util.EZConfig hiding (additionalMouseBindings, removeMouseBindings) | import XMonad.Util.EZConfig hiding (additionalMouseBindings, removeMouseBindings) | ||
| - | import | + | import XMonad.Util.WorkspaceCompare (getSortByIndex) |
| - | -- Layouts | + | import XMonad.Util.Loggers |
| + | -- Layouts | ||
import XMonad.Layout.NoBorders (smartBorders) | import XMonad.Layout.NoBorders (smartBorders) | ||
import XMonad.Layout.ResizableTile (ResizableTall(..)) | import XMonad.Layout.ResizableTile (ResizableTall(..)) | ||
| Line 45: | Line 46: | ||
import XMonad.Layout.IM | import XMonad.Layout.IM | ||
import XMonad.Layout.Reflect (reflectHoriz) | import XMonad.Layout.Reflect (reflectHoriz) | ||
| + | import XMonad.Layout.Named | ||
| + | import Graphics.X11.ExtraTypes.XF86 (xF86XK_AudioMute, xF86XK_AudioLowerVolume, xF86XK_AudioRaiseVolume) | ||
import System.IO (hPutStrLn) | import System.IO (hPutStrLn) | ||
import Data.Char (isSpace) | import Data.Char (isSpace) | ||
| Line 55: | Line 58: | ||
main = do | main = do | ||
dzpipe <- spawnPipe statusBarCmd | dzpipe <- spawnPipe statusBarCmd | ||
| - | xmonad $ withUrgencyHook NoUrgencyHook $ defaultConfig | + | xmonad $ withUrgencyHook NoUrgencyHook $ defaultConfig |
{ terminal = mTerm | { terminal = mTerm | ||
, focusFollowsMouse = False | , focusFollowsMouse = False | ||
| Line 64: | Line 67: | ||
, normalBorderColor = colorNormalBorder | , normalBorderColor = colorNormalBorder | ||
, focusedBorderColor = colorFocusedBorder | , focusedBorderColor = colorFocusedBorder | ||
| - | , layoutHook = avoidStruts $ | + | , layoutHook = avoidStruts $ |
smartBorders ( | smartBorders ( | ||
onWorkspace "term" grids $ | onWorkspace "term" grids $ | ||
| - | onWorkspace "web" | + | onWorkspace "web" mostlyTall $ |
| - | onWorkspace "art" | + | onWorkspace "art" gimp standardLayouts) |
| - | + | ||
, manageHook = mManageHook | , manageHook = mManageHook | ||
, logHook = (dynamicLogWithPP $ mPP dzpipe) >> updatePointer (Relative 0.95 0.95) | , logHook = (dynamicLogWithPP $ mPP dzpipe) >> updatePointer (Relative 0.95 0.95) | ||
| - | , startupHook = return () >> checkKeymap defaultConfig lacKeys | + | , startupHook = return () >> checkKeymap defaultConfig lacKeys >> setWMName "LG3D" |
} | } | ||
`additionalKeysP` lacKeys | `additionalKeysP` lacKeys | ||
| - | `additionalKeys` | + | `additionalKeys` -- need these since a few keys are not defined in EZConfig |
| - | + | [ ((0 ,xF86XK_AudioLowerVolume ), unsafeSpawn "amixer -q set Master 2dB-" ) | |
| - | [ ((0 | + | , ((0 ,xF86XK_AudioMute ), unsafeSpawn "amixer -q set Master toggle" ) |
| - | , ((0 | + | , ((0 ,xF86XK_AudioRaiseVolume ), unsafeSpawn "amixer -q set Master 2dB+" ) |
| - | , ((0 | + | |
, ((0 ,xK_Print ), unsafeSpawn "scrot '%Y-%m-%d-%H%M_$wx$h.png' -e 'mv $f ~/screenshots/'") -- Print Screen | , ((0 ,xK_Print ), unsafeSpawn "scrot '%Y-%m-%d-%H%M_$wx$h.png' -e 'mv $f ~/screenshots/'") -- Print Screen | ||
] | ] | ||
| Line 85: | Line 86: | ||
-- Config {{{ | -- Config {{{ | ||
| - | -- single options here | + | -- single options here, more complex settings(by comparison) get separated |
-- }}} | -- }}} | ||
-- Theme {{{ | -- Theme {{{ | ||
| - | -- Color names are easier to remember | + | -- Color names are easier to remember: |
| - | + | colorOrange = "#ff7701" | |
| - | + | colorDarkGray = "#171717" | |
| - | + | colorPink = "#e3008d" | |
| - | + | colorGreen = "#00aa4a" | |
| - | + | colorBlue = "#008dd5" | |
| - | + | colorYellow = "#fee100" | |
| - | + | colorWhite = "#cfbfad" | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
colorNormalBorder = "#1c2636" | colorNormalBorder = "#1c2636" | ||
colorFocusedBorder = "#2797d8" | colorFocusedBorder = "#2797d8" | ||
| - | |||
barFont = "terminus" | barFont = "terminus" | ||
| - | barXFont = " | + | barXFont = "inconsolata:size=14" |
| + | xftFont = "xft: inconsolata-14" | ||
--}}} | --}}} | ||
| - | statusBarCmd = "dzen2" ++ | + | statusBarCmd = "dzen2" ++ |
" -bg '" ++ colorDarkGray ++ "'" ++ | " -bg '" ++ colorDarkGray ++ "'" ++ | ||
" -fg '" ++ colorBlue ++ "'" ++ | " -fg '" ++ colorBlue ++ "'" ++ | ||
" -sa c" ++ | " -sa c" ++ | ||
" -fn '" ++ barXFont ++ "'" ++ | " -fn '" ++ barXFont ++ "'" ++ | ||
| - | " -ta l | + | " -w 1920 -x 0 -y 0 -ta l -e ''" |
notesFile = "/home/webframp/TODO" | notesFile = "/home/webframp/TODO" | ||
| - | mTerm = " | + | mTerm = "urxvtc" |
-- Custom Searches | -- Custom Searches | ||
| - | enro40, roen40 :: S.SearchEngine | + | enro40, roen40, hayoo :: S.SearchEngine |
enro40 = S.searchEngine "enro40" "http://dictionare.com/phpdic/enro40.php?field0=" | enro40 = S.searchEngine "enro40" "http://dictionare.com/phpdic/enro40.php?field0=" | ||
| - | roen40 = S.searchEngine "roen40" "http://dictionare.com/phpdic/roen40.php?field0=" | + | roen40 = S.searchEngine "roen40" "http://dictionare.com/phpdic/roen40.php?field0=" |
hayoo = S.searchEngine "hayoo" "http://holumbus.fh-wedel.de/hayoo/hayoo.html?query=" | hayoo = S.searchEngine "hayoo" "http://holumbus.fh-wedel.de/hayoo/hayoo.html?query=" | ||
-- Pretty printer {{{ | -- Pretty printer {{{ | ||
-- dynamiclog pretty printer for dzen | -- dynamiclog pretty printer for dzen | ||
| - | mPP h = defaultPP | + | mPP h = defaultPP |
{ ppCurrent = wrap ("^fg(" ++ colorOrange ++ ")^bg(" ++ colorDarkGray ++ ")^p(2)") "^p(2)^fg()^bg()" | { ppCurrent = wrap ("^fg(" ++ colorOrange ++ ")^bg(" ++ colorDarkGray ++ ")^p(2)") "^p(2)^fg()^bg()" | ||
, ppVisible = wrap ("^fg(" ++ colorBlue ++ ")^bg(" ++ colorDarkGray ++ ")^p(2)") "^p(2)^fg()^bg()" | , ppVisible = wrap ("^fg(" ++ colorBlue ++ ")^bg(" ++ colorDarkGray ++ ")^p(2)") "^p(2)^fg()^bg()" | ||
, ppSep = " ^fg(grey60)^r(1x8)^fg() " | , ppSep = " ^fg(grey60)^r(1x8)^fg() " | ||
, ppLayout = dzenColor colorWhite "" . (\x -> case x of | , ppLayout = dzenColor colorWhite "" . (\x -> case x of | ||
| - | "Mirror Tall" | + | "Mirror Tall" -> pad "^i(/home/webframp/.xmonad/dzen/mtall.xbm)" |
| - | "ResizableTall" | + | "ResizableTall" -> pad "^i(/home/webframp/.xmonad/dzen/tall.xbm)" |
| - | "Full" | + | "Full" -> pad "^i(/home/webframp/.xmonad/dzen/full.xbm)" |
| - | + | "Magnifier GridRatio 1.3333333333333333" -> pad "^i(/home/webframp/.xmonad/dzen/mgrid.xbm)" | |
| + | "GridRatio 1.3333333333333333" -> pad "^i(/home/webframp/.xmonad/dzen/grid.xbm)" | ||
| + | "ReflectX Gimp" -> pad "^i(/home/webframp/.xmonad/dzen/reflectx.xbm)" | ||
| + | _ -> pad x | ||
) | ) | ||
, ppUrgent = dzenColor colorDarkGray colorYellow . wrap "[" "]" | , ppUrgent = dzenColor colorDarkGray colorYellow . wrap "[" "]" | ||
| - | , ppTitle = dzenColor colorWhite "" . | + | , ppTitle = dzenColor colorWhite "" . trim |
| + | --, ppSort = scratchpadFilterOutWorkspace | ||
| + | , ppExtras = [logMail] | ||
, ppOutput = hPutStrLn h | , ppOutput = hPutStrLn h | ||
} | } | ||
| + | where | ||
| + | logMail = dzenColorL colorPink "" . wrapL mailIcon "". padL $ maildirNew mailDir | ||
| + | mailIcon = "^i(/home/webframp/.dzen/icons/dzen_bitmaps/envelope.xbm)" | ||
| + | mailDir = "/home/webframp/.mail/GMAIL/INBOX" | ||
| + | |||
--}}} | --}}} | ||
-- Prompt Config {{{ | -- Prompt Config {{{ | ||
mXPConfig :: XPConfig | mXPConfig :: XPConfig | ||
| - | mXPConfig = | + | mXPConfig = |
defaultXPConfig { font = barFont | defaultXPConfig { font = barFont | ||
, bgColor = colorDarkGray | , bgColor = colorDarkGray | ||
| Line 154: | Line 162: | ||
largeXPConfig :: XPConfig | largeXPConfig :: XPConfig | ||
| - | largeXPConfig = mXPConfig | + | largeXPConfig = mXPConfig |
| - | { font = | + | { font = xftFont |
| - | , height = | + | , height = 20 |
} | } | ||
-- }}} | -- }}} | ||
| Line 168: | Line 176: | ||
defaultTall = ResizableTall 1 (3/100) (1/2) [] | defaultTall = ResizableTall 1 (3/100) (1/2) [] | ||
nmaster = 1 | nmaster = 1 | ||
| - | ratio = toRational (2/(1+sqrt | + | ratio = toRational (2/(1 + sqrt 5 :: Double)) -- golden, thx Octoploid |
delta = 0.03 | delta = 0.03 | ||
| Line 175: | Line 183: | ||
mostlyTall = ResizableTall 1 (3/100) (1/2) [] ||| Full | mostlyTall = ResizableTall 1 (3/100) (1/2) [] ||| Full | ||
| - | + | gimp = reflectHoriz $ | |
| - | gimp | + | named "Gimp" $ |
| - | + | withIM (11/64) (Role "gimp-toolbox") $ | |
| - | + | ResizableTall 2 (1/118) (11/20) [5/4,5/4,5/4] | |
| - | --}}} | + | --}}} |
| - | -- | + | -- Manage Hook {{{ |
mManageHook :: ManageHook | mManageHook :: ManageHook | ||
| - | mManageHook = scratchpadManageHook (W.RationalRect 0.25 0.375 0.5 0.35) <+> | + | mManageHook = scratchpadManageHook (W.RationalRect 0.25 0.375 0.5 0.35) <+> |
(composeAll . concat $ | (composeAll . concat $ | ||
| - | [ [ className =? c --> doFloat | + | [ [ className =? c --> doFloat | c <- floats ], |
[ className =? w --> doShift "web" | w <- webs] , | [ className =? w --> doShift "web" | w <- webs] , | ||
[ className =? g --> doShift "game" | g <- games] , | [ className =? g --> doShift "game" | g <- games] , | ||
| + | [ className =? m --> doShift "mail" | m <- mails] , | ||
[ resource =? "desktop_window" --> doIgnore | [ resource =? "desktop_window" --> doIgnore | ||
, className =? "Epdfview" --> doShift "read" | , className =? "Epdfview" --> doShift "read" | ||
, className =? "Okular" --> doShift "read" | , className =? "Okular" --> doShift "read" | ||
| - | , | + | , className =? "Xpdf" --> doShift "read" |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
, className =? "VirtualBox" --> doShift "win" | , className =? "VirtualBox" --> doShift "win" | ||
, className =? "Tsclient" --> doShift "win" | , className =? "Tsclient" --> doShift "win" | ||
| + | , className =? "Vncviewer" --> doShift "win" | ||
, className =? "Gimp" --> doShift "art" | , className =? "Gimp" --> doShift "art" | ||
| + | , title =? "irssi" --> doShift "irc" | ||
| + | , title =? "mutt" --> doShift "mail" | ||
| + | , title =? "Save a Bookmark" --> doCenterFloat | ||
, isFullscreen --> doFullFloat | , isFullscreen --> doFullFloat | ||
, isDialog --> doCenterFloat | , isDialog --> doCenterFloat | ||
| Line 206: | Line 214: | ||
webs = ["Navigator","Gran Paradiso","Firefox", "Midori", "Minefield"] | webs = ["Navigator","Gran Paradiso","Firefox", "Midori", "Minefield"] | ||
games = ["roguestar-gl","neverputt","neverball","wesnoth"] | games = ["roguestar-gl","neverputt","neverball","wesnoth"] | ||
| + | mails = ["Evolution", "Thunderbird-bin", "Shredder"] | ||
-- }}} | -- }}} | ||
lacKeys :: [([Char], X ())] | lacKeys :: [([Char], X ())] | ||
lacKeys = | lacKeys = | ||
| - | [ ("M-p" , runOrRaisePrompt largeXPConfig ) | + | [ ("M-p" , runOrRaisePrompt largeXPConfig )--{ bgHLight = colorFocusFG, fgHLight = colorNormalBG }) |
, ("M-S-p" , spawn "exe=`dmenu_path | dmenu -b` \"exec $exe\"") -- backup launcher incase prompt causes lockups | , ("M-S-p" , spawn "exe=`dmenu_path | dmenu -b` \"exec $exe\"") -- backup launcher incase prompt causes lockups | ||
| - | , ("M-g" , runOrRaise "firefox-nightly" (className =? "Minefield")) | + | , ("M-g" , runOrRaise "firefox-nightly" (className =? "Minefield" <||> className =? "Gran Paradiso")) |
| + | , ("M-u" , runOrRaise "uzbl" (className =? "Uzbl" )) | ||
, ("M-S-g" , safePromptSelection "firefox-nightly") | , ("M-S-g" , safePromptSelection "firefox-nightly") | ||
, ("M-w" , goToSelected defaultGSConfig) | , ("M-w" , goToSelected defaultGSConfig) | ||
, ("M-C-n" , appendFilePrompt largeXPConfig { bgColor = colorOrange, fgColor = colorDarkGray } notesFile) | , ("M-C-n" , appendFilePrompt largeXPConfig { bgColor = colorOrange, fgColor = colorDarkGray } notesFile) | ||
| - | , ("M-S-z" , safeSpawn "mocp" "-G") | + | , ("M-S-z" , safeSpawn "mocp" "-G") -- play/pause |
| - | , ("M-S-," , safeSpawn "mocp" "-r") | + | , ("M-S-," , safeSpawn "mocp" "-r") -- rev |
| - | , ("M-S-." , safeSpawn "mocp" "-f") | + | , ("M-S-." , safeSpawn "mocp" "-f") -- fwd |
, ("M-<Esc>" , focusUrgent) | , ("M-<Esc>" , focusUrgent) | ||
, ("M-`" , scratchpadSpawnAction defaultConfig { terminal = mTerm }) -- scratchpad | , ("M-`" , scratchpadSpawnAction defaultConfig { terminal = mTerm }) -- scratchpad | ||
| - | , ("M-S-l" , unsafeSpawn "slock") | + | , ("M-S-l" , unsafeSpawn "slock") -- screen lock |
, ("M-i" , raiseMaybe (runInTerm "-title irssi" "sh -c 'screen -D -R -S irc irssi'") (title =? "irssi")) | , ("M-i" , raiseMaybe (runInTerm "-title irssi" "sh -c 'screen -D -R -S irc irssi'") (title =? "irssi")) | ||
, ("M-S-i" , raiseMaybe (runInTerm "-title irssi" "sh -c 'ssh -t webframp@astrotrain screen -D -R -S irc irssi'") (title =? "irssi")) | , ("M-S-i" , raiseMaybe (runInTerm "-title irssi" "sh -c 'ssh -t webframp@astrotrain 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-m" , raiseMaybe (runInTerm "-title mutt" "sh -c 'screen -D -R -S mail mutt'") (title =? "mutt")) | ||
| - | , ("M-S-m" , runOrRaise "thunderbird3" (className =? "Shredder")) | + | , ("M-S-m" , runOrRaise "thunderbird3" (className =? "Shredder")) |
| - | , ("M-e" | + | , ("M-S-e" , safeSpawn "pcmanfm" "--no-desktop") |
| - | + | ||
, ("M-b" , sendMessage ToggleStruts) | , ("M-b" , sendMessage ToggleStruts) | ||
-- focus NonEmpty wss except scratchpad | -- focus NonEmpty wss except scratchpad | ||
| Line 243: | Line 252: | ||
, ("M-z" , toggleWS) | , ("M-z" , toggleWS) | ||
] | ] | ||
| - | ++ | + | ++ |
-- Search methods | -- Search methods | ||
-- mapped to mod-c for 'a căuta' | -- mapped to mod-c for 'a căuta' | ||
| Line 267: | Line 276: | ||
, ("r", roen40) | , ("r", roen40) | ||
] | ] | ||
| + | |||
-- vim:foldmethod=marker sw=4 sts=4 ts=4 tw=0 et ai nowrap | -- vim:foldmethod=marker sw=4 sts=4 ts=4 tw=0 et ai nowrap | ||
</haskell> | </haskell> | ||
Revision as of 20:13, 5 June 2009
----------------------------------------------------------------------- -- -- 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(..)) import XMonad.Hooks.ManageHelpers (isFullscreen, isDialog, doFullFloat, doCenterFloat) import XMonad.Hooks.SetWMName -- Prompt import XMonad.Prompt import XMonad.Prompt.RunOrRaise (runOrRaisePrompt) import XMonad.Prompt.AppendFile (appendFilePrompt) -- Actions import XMonad.Actions.CycleWS (nextScreen, prevScreen, shiftNextScreen, shiftPrevScreen, toggleWS, WSDirection(..), WSType(..), findWorkspace) import XMonad.Actions.WindowGo (title, raiseMaybe, runOrRaise) --, (=?)) import XMonad.Actions.UpdatePointer import qualified XMonad.Actions.Search as S import XMonad.Actions.GridSelect -- Util import XMonad.Util.Run (safeSpawn, unsafeSpawn, runInTerm, spawnPipe) import XMonad.Util.Scratchpad (scratchpadSpawnAction, scratchpadManageHook, scratchpadFilterOutWorkspace) import XMonad.Util.XSelection (safePromptSelection) import XMonad.Util.EZConfig hiding (additionalMouseBindings, removeMouseBindings) import XMonad.Util.WorkspaceCompare (getSortByIndex) import XMonad.Util.Loggers -- Layouts import XMonad.Layout.NoBorders (smartBorders) import XMonad.Layout.ResizableTile (ResizableTall(..)) import XMonad.Layout.Grid (Grid(..)) import XMonad.Layout.Magnifier (magnifiercz) import XMonad.Layout.PerWorkspace (onWorkspace) import XMonad.Layout.IM import XMonad.Layout.Reflect (reflectHoriz) import XMonad.Layout.Named import Graphics.X11.ExtraTypes.XF86 (xF86XK_AudioMute, xF86XK_AudioLowerVolume, xF86XK_AudioRaiseVolume) import System.IO (hPutStrLn) import Data.Char (isSpace) import qualified XMonad.StackSet as W --}}} -- Main {{{ main :: IO () 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 = avoidStruts $ smartBorders ( onWorkspace "term" grids $ onWorkspace "web" mostlyTall $ onWorkspace "art" gimp standardLayouts) , manageHook = mManageHook , logHook = (dynamicLogWithPP $ mPP dzpipe) >> updatePointer (Relative 0.95 0.95) , startupHook = return () >> checkKeymap defaultConfig lacKeys >> setWMName "LG3D" } `additionalKeysP` lacKeys `additionalKeys` -- need these since a few keys are not defined in EZConfig [ ((0 ,xF86XK_AudioLowerVolume ), unsafeSpawn "amixer -q set Master 2dB-" ) , ((0 ,xF86XK_AudioMute ), unsafeSpawn "amixer -q set Master toggle" ) , ((0 ,xF86XK_AudioRaiseVolume ), unsafeSpawn "amixer -q set Master 2dB+" ) , ((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 {{{ -- Color names are easier to remember: colorOrange = "#ff7701" colorDarkGray = "#171717" colorPink = "#e3008d" colorGreen = "#00aa4a" colorBlue = "#008dd5" colorYellow = "#fee100" colorWhite = "#cfbfad" colorNormalBorder = "#1c2636" colorFocusedBorder = "#2797d8" barFont = "terminus" barXFont = "inconsolata:size=14" xftFont = "xft: inconsolata-14" --}}} statusBarCmd = "dzen2" ++ " -bg '" ++ colorDarkGray ++ "'" ++ " -fg '" ++ colorBlue ++ "'" ++ " -sa c" ++ " -fn '" ++ barXFont ++ "'" ++ " -w 1920 -x 0 -y 0 -ta l -e ''" notesFile = "/home/webframp/TODO" mTerm = "urxvtc" -- Custom Searches enro40, roen40, hayoo :: S.SearchEngine enro40 = S.searchEngine "enro40" "http://dictionare.com/phpdic/enro40.php?field0=" roen40 = S.searchEngine "roen40" "http://dictionare.com/phpdic/roen40.php?field0=" hayoo = S.searchEngine "hayoo" "http://holumbus.fh-wedel.de/hayoo/hayoo.html?query=" -- Pretty printer {{{ -- dynamiclog pretty printer for dzen mPP h = defaultPP { ppCurrent = wrap ("^fg(" ++ colorOrange ++ ")^bg(" ++ colorDarkGray ++ ")^p(2)") "^p(2)^fg()^bg()" , ppVisible = wrap ("^fg(" ++ colorBlue ++ ")^bg(" ++ colorDarkGray ++ ")^p(2)") "^p(2)^fg()^bg()" , ppSep = " ^fg(grey60)^r(1x8)^fg() " , ppLayout = dzenColor colorWhite "" . (\x -> case x of "Mirror Tall" -> pad "^i(/home/webframp/.xmonad/dzen/mtall.xbm)" "ResizableTall" -> pad "^i(/home/webframp/.xmonad/dzen/tall.xbm)" "Full" -> pad "^i(/home/webframp/.xmonad/dzen/full.xbm)" "Magnifier GridRatio 1.3333333333333333" -> pad "^i(/home/webframp/.xmonad/dzen/mgrid.xbm)" "GridRatio 1.3333333333333333" -> pad "^i(/home/webframp/.xmonad/dzen/grid.xbm)" "ReflectX Gimp" -> pad "^i(/home/webframp/.xmonad/dzen/reflectx.xbm)" _ -> pad x ) , ppUrgent = dzenColor colorDarkGray colorYellow . wrap "[" "]" , ppTitle = dzenColor colorWhite "" . trim --, ppSort = scratchpadFilterOutWorkspace , ppExtras = [logMail] , ppOutput = hPutStrLn h } where logMail = dzenColorL colorPink "" . wrapL mailIcon "". padL $ maildirNew mailDir mailIcon = "^i(/home/webframp/.dzen/icons/dzen_bitmaps/envelope.xbm)" mailDir = "/home/webframp/.mail/GMAIL/INBOX" --}}} -- Prompt Config {{{ mXPConfig :: XPConfig mXPConfig = defaultXPConfig { font = barFont , bgColor = colorDarkGray , fgColor = colorGreen , bgHLight = colorGreen , fgHLight = colorDarkGray , promptBorderWidth = 0 , height = 14 , historyFilter = deleteConsecutive } largeXPConfig :: XPConfig largeXPConfig = mXPConfig { font = xftFont , height = 20 } -- }}} -- Layout Hook{{{ standardLayouts = Mirror tiled ||| defaultTall ||| Full where tiled = Tall nmaster delta ratio defaultTall = ResizableTall 1 (3/100) (1/2) [] nmaster = 1 ratio = toRational (2/(1 + sqrt 5 :: Double)) -- golden, thx Octoploid delta = 0.03 grids = magnifiercz 1.2 (GridRatio (4/3)) ||| GridRatio (4/3) mostlyTall = ResizableTall 1 (3/100) (1/2) [] ||| Full gimp = reflectHoriz $ named "Gimp" $ withIM (11/64) (Role "gimp-toolbox") $ ResizableTall 2 (1/118) (11/20) [5/4,5/4,5/4] --}}} -- Manage Hook {{{ mManageHook :: ManageHook mManageHook = scratchpadManageHook (W.RationalRect 0.25 0.375 0.5 0.35) <+> (composeAll . concat $ [ [ className =? c --> doFloat | c <- floats ], [ className =? w --> doShift "web" | w <- webs] , [ className =? g --> doShift "game" | g <- games] , [ className =? m --> doShift "mail" | m <- mails] , [ resource =? "desktop_window" --> doIgnore , className =? "Epdfview" --> doShift "read" , className =? "Okular" --> doShift "read" , className =? "Xpdf" --> doShift "read" , className =? "VirtualBox" --> doShift "win" , className =? "Tsclient" --> doShift "win" , className =? "Vncviewer" --> doShift "win" , className =? "Gimp" --> doShift "art" , title =? "irssi" --> doShift "irc" , title =? "mutt" --> doShift "mail" , title =? "Save a Bookmark" --> doCenterFloat , isFullscreen --> doFullFloat , isDialog --> doCenterFloat ] ]) <+> manageDocks -- make some space where floats = ["Mplayer","Tsclient","VirtualBox","Gtklp","smc"] webs = ["Navigator","Gran Paradiso","Firefox", "Midori", "Minefield"] games = ["roguestar-gl","neverputt","neverball","wesnoth"] mails = ["Evolution", "Thunderbird-bin", "Shredder"] -- }}} lacKeys :: [([Char], X ())] lacKeys = [ ("M-p" , runOrRaisePrompt largeXPConfig )--{ bgHLight = colorFocusFG, fgHLight = colorNormalBG }) , ("M-S-p" , spawn "exe=`dmenu_path | dmenu -b` \"exec $exe\"") -- backup launcher incase prompt causes lockups , ("M-g" , runOrRaise "firefox-nightly" (className =? "Minefield" <||> className =? "Gran Paradiso")) , ("M-u" , runOrRaise "uzbl" (className =? "Uzbl" )) , ("M-S-g" , safePromptSelection "firefox-nightly") , ("M-w" , goToSelected defaultGSConfig) , ("M-C-n" , appendFilePrompt largeXPConfig { bgColor = colorOrange, fgColor = colorDarkGray } notesFile) , ("M-S-z" , safeSpawn "mocp" "-G") -- play/pause , ("M-S-," , safeSpawn "mocp" "-r") -- rev , ("M-S-." , safeSpawn "mocp" "-f") -- fwd , ("M-<Esc>" , focusUrgent) , ("M-`" , scratchpadSpawnAction defaultConfig { terminal = mTerm }) -- scratchpad , ("M-S-l" , unsafeSpawn "slock") -- screen lock , ("M-i" , raiseMaybe (runInTerm "-title irssi" "sh -c 'screen -D -R -S irc irssi'") (title =? "irssi")) , ("M-S-i" , raiseMaybe (runInTerm "-title irssi" "sh -c 'ssh -t webframp@astrotrain 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 "thunderbird3" (className =? "Shredder")) , ("M-S-e" , safeSpawn "pcmanfm" "--no-desktop") , ("M-b" , sendMessage ToggleStruts) -- focus NonEmpty wss except scratchpad , ("M-s", windows . W.greedyView =<< findWorkspace getSortByIndexNoSP Next NonEmptyWS 1) , ("M-d", windows . W.greedyView =<< findWorkspace getSortByIndexNoSP Prev NonEmptyWS 1) -- move window to NonEmpty wss except scratchpad , ("M-S-s", windows . W.shift =<< findWorkspace getSortByIndexNoSP Next NonEmptyWS 1) , ("M-S-d", windows . W.shift =<< findWorkspace getSortByIndexNoSP Prev NonEmptyWS 1) -- move window to and focus NonEmpty wss except scratchpad , ("M-C-s", shiftAndView Next) , ("M-C-d", shiftAndView Prev) , ("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, S.promptSearch largeXPConfig f) | (k,f) <- searchList ] ++ [("M-C-c " ++ k, S.selectSearch f) | (k,f) <- searchList ] where -- | non-empty workspaces less scratchpad shiftAndView dir = findWorkspace getSortByIndexNoSP dir NonEmptyWS 1 >>= \t -> (windows . W.shift $ t) >> (windows . W.greedyView $ t) getSortByIndexNoSP = fmap (.scratchpadFilterOutWorkspace) getSortByIndex searchList :: [([Char], S.SearchEngine)] searchList = [ ("g", S.google) , ("h", hayoo) , ("i", S.isohunt) , ("w", S.wikipedia) , ("d", S.dictionary) , ("t", S.thesaurus) , ("a", S.amazon) , ("y", S.youtube) , ("e", enro40) , ("r", roen40) ] -- vim:foldmethod=marker sw=4 sts=4 ts=4 tw=0 et ai nowrap
