Difference between revisions of "Xmonad/Config archive/webframp's xmonad.hs"
< Xmonad | Config archive
Jump to navigation
Jump to search
(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.Window (windowPromptGoto, windowPromptBring) |
||
− | import XMonad.Prompt.Workspace (workspacePrompt) |
||
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) |
+ | import XMonad.Util.Loggers |
||
− | -- Layouts |
+ | -- 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 |
⚫ | |||
− | -- Mediakeys on the Latitude D830 |
||
− | + | , ((0 ,xF86XK_AudioMute ), unsafeSpawn "amixer -q set Master toggle" ) |
|
− | , ((0 |
+ | , ((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 |
, ((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: |
⚫ | |||
− | colorNormalBorder, colorFocusedBorder, colorNormalBG, colorNormalFG, colorFocusBG, colorFocusFG, colorFocusBO, colorUrgentBG, colorUrgentFG :: [Char] |
||
− | + | colorDarkGray = "#171717" |
|
− | + | colorPink = "#e3008d" |
|
− | + | colorGreen = "#00aa4a" |
|
− | + | colorBlue = "#008dd5" |
|
− | + | colorYellow = "#fee100" |
|
− | + | colorWhite = "#cfbfad" |
|
+ | |||
⚫ | |||
− | colorUrgentBG = "#ff00cc" |
||
− | colorUrgentFG = "#00ff99" |
||
− | colorNormalBorder, colorFocusedBorder :: [Char] |
||
colorNormalBorder = "#1c2636" |
colorNormalBorder = "#1c2636" |
||
colorFocusedBorder = "#2797d8" |
colorFocusedBorder = "#2797d8" |
||
− | barFont, barXFont, statusBarCmd, notesFile, mTerm :: [Char] |
||
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 ++ "'" ++ |
||
− | " - |
+ | " -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" -> "^i(/home/webframp/.xmonad/dzen/mtall.xbm)" |
+ | "Mirror Tall" -> pad "^i(/home/webframp/.xmonad/dzen/mtall.xbm)" |
− | "ResizableTall" -> "^i(/home/webframp/.xmonad/dzen/tall.xbm)" |
+ | "ResizableTall" -> pad "^i(/home/webframp/.xmonad/dzen/tall.xbm)" |
− | "Full" -> "^i(/home/webframp/.xmonad/dzen/full.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)" |
||
⚫ | |||
) |
) |
||
, 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 $ |
||
− | |||
− | + | 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 | c <- floats ], |
+ | [ [ 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] , |
||
⚫ | |||
[ 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 =? "Gimp" --> doShift "art" |
, className =? "Gimp" --> doShift "art" |
||
⚫ | |||
⚫ | |||
⚫ | |||
, 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") -- play/pause |
+ | , ("M-S-z" , safeSpawn "mocp" "-G") -- play/pause |
− | , ("M-S-," , safeSpawn "mocp" "-r") -- rev |
+ | , ("M-S-," , safeSpawn "mocp" "-r") -- rev |
− | , ("M-S-." , safeSpawn "mocp" "-f") -- fwd |
+ | , ("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") -- screen lock |
+ | , ("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-S-e" , unsafeSpawn "dolphin") |
||
, ("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