Xmonad/Config archive/Regalia's xmonad.hs
From HaskellWiki
< Xmonad | Config archive(Difference between revisions)
(Regalia's xmonad.hs) |
|||
| Line 8: | Line 8: | ||
import Data.List | import Data.List | ||
import Data.Ratio ((%)) | import Data.Ratio ((%)) | ||
| - | + | import XMonad.ManageHook | |
-- Actions | -- Actions | ||
import XMonad.Actions.CycleWS | import XMonad.Actions.CycleWS | ||
| - | |||
| - | |||
import XMonad.Actions.SpawnOn | import XMonad.Actions.SpawnOn | ||
import XMonad.Actions.OnScreen | import XMonad.Actions.OnScreen | ||
import XMonad.Actions.SwapWorkspaces | import XMonad.Actions.SwapWorkspaces | ||
| - | + | import XMonad.Actions.Submap | |
| + | import XMonad.Actions.Search | ||
| + | import XMonad.Actions.UpdatePointer | ||
| + | import XMonad.Actions.SpawnOn | ||
-- Hooks | -- Hooks | ||
import XMonad.Hooks.ManageHelpers | import XMonad.Hooks.ManageHelpers | ||
| Line 24: | Line 25: | ||
import XMonad.Hooks.FadeInactive | import XMonad.Hooks.FadeInactive | ||
import XMonad.Hooks.UrgencyHook hiding (Never) | import XMonad.Hooks.UrgencyHook hiding (Never) | ||
| - | + | import XMonad.Hooks.ICCCMFocus | |
-- Layouts | -- Layouts | ||
import XMonad.Layout.PerWorkspace | import XMonad.Layout.PerWorkspace | ||
| Line 32: | Line 33: | ||
import XMonad.Layout.NoBorders | import XMonad.Layout.NoBorders | ||
import XMonad.Layout.Reflect | import XMonad.Layout.Reflect | ||
| - | + | import XMonad.Layout.Tabbed | |
| + | import qualified XMonad.Layout.Magnifier as Mag | ||
| + | import XMonad.Layout.MultiToggle | ||
| + | import XMonad.Layout.Minimize | ||
| + | import XMonad.Layout.BoringWindows | ||
| + | import qualified XMonad.Layout.ToggleLayouts as Tog | ||
-- Prompts | -- Prompts | ||
import XMonad.Prompt | import XMonad.Prompt | ||
| Line 41: | Line 47: | ||
import XMonad.Prompt.RunOrRaise | import XMonad.Prompt.RunOrRaise | ||
import XMonad.Prompt.AppendFile | import XMonad.Prompt.AppendFile | ||
| - | |||
-- Util | -- Util | ||
| + | import XMonad.Util.NamedScratchpad | ||
import XMonad.Util.Run(spawnPipe) | import XMonad.Util.Run(spawnPipe) | ||
import XMonad.Util.EZConfig(additionalKeysP, additionalKeys) | import XMonad.Util.EZConfig(additionalKeysP, additionalKeys) | ||
| + | |||
| + | -- Simple configuration | ||
| + | myBorderWidth = 3 | ||
| + | myBrowser = "uzbl-browser" | ||
| + | myTerminal = "urxvtc" | ||
| + | myShell = "zsh" | ||
| + | myModMask = mod4Mask | ||
| + | myIconDir = "/home/scott/.dzen/dzenIcons/" | ||
| + | myStatusBar = "dzen2 -xs 2 -x '0' -y '0' -h '18' -w '750' -ta 'l' -bg '" ++ myDBGColor ++ "' -fn '" ++ myFont ++ "'" | ||
| + | myLeft = ".dzen/left.zsh | dzen2 -xs 2 -x '750' -y '0' -h '18' -w '530' -ta 'r' -bg '" ++ myDBGColor ++ "' -fg '" ++ myFontCol ++ "' -fn '" ++ myFont ++ "'" | ||
| + | myFont = "-*-terminus-medium-*-*-*-12-120-75-75-*-*-iso8859-*" | ||
| + | myFont2 = "-*-terminus-bold-*-*-*-16-160-72-72-*-*-iso8859-*" | ||
| + | |||
| + | myWorkspaces = ["web", "de", "V", "v", "t", "Φ", "com", "music", "vm"] | ||
| + | color1 = "#262621" | ||
| + | color2 = "#a3d930" | ||
| + | color3 = "#fdfdfd" | ||
| + | color4 = "#38a2d6" | ||
| + | color5 = "#1793d1" | ||
| + | |||
| + | myDFGColor = color4 | ||
| + | myDBGColor = color1 | ||
| + | |||
| + | myFFGColor = color3 | ||
| + | myFBGColor = color4 | ||
| + | |||
| + | myVFGColor = color3 | ||
| + | myVBGColor = color1 | ||
| + | |||
| + | myUFGColor = color1 | ||
| + | myUBGColor = color2 | ||
| + | |||
| + | myIFGColor = color3 | ||
| + | myIBGColor = color1 | ||
| + | |||
| + | mySColor = color5 | ||
| + | myBorder = "#121212" | ||
| + | myFBorder = color2 | ||
| + | myFontCol = color5 | ||
| + | |||
-- | -- | ||
| Line 51: | Line 97: | ||
main = do | main = do | ||
| - | |||
dzen <- spawnPipe myStatusBar | dzen <- spawnPipe myStatusBar | ||
other <- spawnPipe myLeft | other <- spawnPipe myLeft | ||
| - | + | xmonad $ withUrgencyHook dzenUrgencyHook {args = ["-bg", "green", "-xs", "0"] } $ defaultConfig | |
| - | xmonad $ withUrgencyHook | + | { manageHook = manageHook defaultConfig <+> namedScratchpadManageHook scratchpads<+> myManageHook |
| - | { manageHook = manageHook defaultConfig <+> myManageHook | + | |
, layoutHook = mylayoutHook | , layoutHook = mylayoutHook | ||
, startupHook = setWMName "LG3D" | , startupHook = setWMName "LG3D" | ||
| Line 64: | Line 108: | ||
, focusFollowsMouse = True | , focusFollowsMouse = True | ||
, normalBorderColor = myBorder | , normalBorderColor = myBorder | ||
| - | , focusedBorderColor = | + | , focusedBorderColor = myFBorder |
| - | , workspaces = | + | , workspaces = myWorkspaces |
| - | , logHook = myLogHook >> (dynamicLogWithPP $ myDzenPP dzen) | + | , logHook = myLogHook >> (dynamicLogWithPP $ myDzenPP dzen ) |
} `additionalKeysP` myKeys | } `additionalKeysP` myKeys | ||
-- End Main | -- End Main | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
-- Layout Hook | -- Layout Hook | ||
| - | mylayoutHook = smartBorders $ avoidStruts $ lessBorders (Combine Difference Screen OnlyFloat) (Mirror tiled ||| | + | mylayoutHook = mkToggle (single REFLECTX) $ mkToggle (single REFLECTY) $ |
| + | boringWindows $ minimize $ Mag.magnifierOff $ | ||
| + | smartBorders $ avoidStruts $ lessBorders (Combine Difference Screen OnlyFloat) | ||
| + | (Tog.toggleLayouts Full (Mirror tiled ||| Grid ||| onWorkspace "web" tabbedLayout tiled)) | ||
where | where | ||
| - | + | fullscreenLayout = smartBorders Full | |
| - | + | tiled = Tall nmaster delta ratio | |
| - | + | nmaster = 1 | |
| - | + | delta = 3 / 100 | |
| - | + | ratio = 11 / 20 | |
| + | tabbedLayout = tabbed shrinkText myTabConfig | ||
| + | reflected = reflectHoriz $ tiled | ||
| + | -- Scratchpads | ||
| + | scratchpads = [ | ||
| + | NS "htop" "urxvtc -e htop" (title =? "htop") (customFloating $ W.RationalRect 0 0 1 (5/12)), | ||
| + | NS "python" "urxvtc -e python" (title =? "python") (customFloating $ W.RationalRect 0 0 1 (5/12)), | ||
| + | NS "skynet" "urxvtc -title skynet -e ssh skynet -t screen -Dr" (title =? "skynet") (customFloating $ W.RationalRect 0 0 1 (5/12)), | ||
| + | NS "devmtp" "urxvtc -title devmtp -e ssh devmtp -t screen -Dr" (title =? "devmtp") (customFloating $ W.RationalRect 0 0 1 (5/12)), | ||
| + | NS "andromeda" "urxvtc -title andromeda -e ssh andromeda -t screen -Dr" (title =? "andromeda") (customFloating $ W.RationalRect 0 0 1 (5/12)) | ||
| + | ] | ||
-- Manage hook | -- Manage hook | ||
myManageHook = composeAll | myManageHook = composeAll | ||
[ className =? "Xmessage" --> doFloat | [ className =? "Xmessage" --> doFloat | ||
| - | + | ,className =? "Dialogue" --> doFloat | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
] | ] | ||
| - | + | <+> (fmap not isDialog --> doF avoidMaster) | |
<+> composeOne [ isFullscreen -?> doFullFloat ] | <+> composeOne [ isFullscreen -?> doFullFloat ] | ||
-- Log Hook | -- Log Hook | ||
| - | myLogHook = fadeInactiveLogHook fadeAmount | + | myLogHook = takeTopFocus >> fadeInactiveLogHook fadeAmount >> updatePointer (Relative 0.2 0.5) |
where fadeAmount = 0.90 | where fadeAmount = 0.90 | ||
| Line 114: | Line 153: | ||
myXPConfig :: XPConfig | myXPConfig :: XPConfig | ||
myXPConfig = defaultXPConfig { font = myFont | myXPConfig = defaultXPConfig { font = myFont | ||
| - | + | , height = 22 | |
| - | + | , bgColor = myDBGColor | |
| + | , fgColor = myDFGColor | ||
| + | , fgHLight = myFFGColor | ||
| + | , bgHLight = myFBGColor | ||
| + | , historySize = 10 } | ||
| + | |||
| + | myTabConfig = defaultTheme { fontName = myFont | ||
| + | , activeColor = myFBGColor | ||
| + | , inactiveColor = myDBGColor | ||
| + | , activeTextColor = myFFGColor | ||
| + | , inactiveTextColor = myDFGColor } | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
-- Pretty Printing | -- Pretty Printing | ||
myDzenPP h = defaultPP | myDzenPP h = defaultPP | ||
| - | { ppCurrent = dzenColor myFFGColor myFBGColor . wrap (" | + | { ppCurrent = dzenColor myFFGColor myFBGColor . wrap ("^i(" ++ myIconDir ++ "/dzen_bitmaps/has_win.xbm)") "" |
| - | , ppVisible = dzenColor myVFGColor myVBGColor . wrap | + | , ppVisible = dzenColor myVFGColor myVBGColor . wrap ("^i(" ++ myIconDir ++ "/dzen_bitmaps/has_win.xbm)") "" |
| - | , ppHidden = dzenColor myDFGColor myDBGColor . wrap ("^i(" ++ myIconDir ++ "/dzen_bitmaps/has_win.xbm)") "" | + | , ppHidden = dzenColor myDFGColor myDBGColor . wrap ("^i(" ++ myIconDir ++ "/dzen_bitmaps/has_win.xbm)") "" . filterNSP |
| - | , ppHiddenNoWindows = dzenColor myDFGColor myDBGColor . wrap ("^i(" ++ myIconDir ++ "/dzen_bitmaps/has_win_nv.xbm)") "" | + | , ppHiddenNoWindows = dzenColor myDFGColor myDBGColor . wrap ("^i(" ++ myIconDir ++ "/dzen_bitmaps/has_win_nv.xbm)") "" .filterNSP |
, ppUrgent = dzenColor myUFGColor myUBGColor . wrap ("^i(" ++ myIconDir ++ "/info_03.xbm)") "" . dzenStrip | , ppUrgent = dzenColor myUFGColor myUBGColor . wrap ("^i(" ++ myIconDir ++ "/info_03.xbm)") "" . dzenStrip | ||
| - | , ppTitle = dzenColor myDFGColor myDBGColor . shorten | + | , ppTitle = dzenColor myDFGColor myDBGColor . trim . shorten 20 |
, ppLayout = dzenColor myDFGColor myDBGColor . | , ppLayout = dzenColor myDFGColor myDBGColor . | ||
| + | -- None of these match anymore, need to strip off Mag/Toggle/Reflect | ||
(\x -> case x of | (\x -> case x of | ||
"Mirror Tall" -> "^fg(" ++ myIFGColor ++ ")^i(" ++ myIconDir ++ "/dzen_bitmaps/mtall.xbm)" | "Mirror Tall" -> "^fg(" ++ myIFGColor ++ ")^i(" ++ myIconDir ++ "/dzen_bitmaps/mtall.xbm)" | ||
"Tall" -> "^fg(" ++ myIFGColor ++ ")^i(" ++ myIconDir ++ "/dzen_bitmaps/tall.xbm)" | "Tall" -> "^fg(" ++ myIFGColor ++ ")^i(" ++ myIconDir ++ "/dzen_bitmaps/tall.xbm)" | ||
"Full" -> "^fg(" ++ myIFGColor ++ ")^i(" ++ myIconDir ++ "/dzen_bitmaps/full.xbm)" | "Full" -> "^fg(" ++ myIFGColor ++ ")^i(" ++ myIconDir ++ "/dzen_bitmaps/full.xbm)" | ||
| + | "Tabbed Simplest" -> "^fg(" ++ myIFGColor ++ ")^i(" ++ myIconDir ++ "/dzen_bitmaps/full.xbm)" | ||
"Grid" -> "^fg(" ++ myIFGColor ++ ")^i(" ++ myIconDir ++ "/dzen_bitmaps/grid.xbm)" | "Grid" -> "^fg(" ++ myIFGColor ++ ")^i(" ++ myIconDir ++ "/dzen_bitmaps/grid.xbm)" | ||
"TwoPane" -> "^fg(" ++ myIFGColor ++ ")^i(" ++ myIconDir ++ "/dzen_bitmaps/two_pane.xbm)" | "TwoPane" -> "^fg(" ++ myIFGColor ++ ")^i(" ++ myIconDir ++ "/dzen_bitmaps/two_pane.xbm)" | ||
_ -> x | _ -> x | ||
) | ) | ||
| - | , ppSep = " " | + | , ppSep = "||" |
, ppOutput = hPutStrLn h } | , ppOutput = hPutStrLn h } | ||
| + | where | ||
| + | filterNSP ws = if ws /= "NSP" then ws else "" | ||
| + | |||
-- Key Bindings | -- Key Bindings | ||
| - | myKeys = [ ("M- | + | myKeys = [ ("M-u", spawnHere myBrowser) |
| - | -- | + | -- run |
| - | , ("M- | + | , ("M-r", submap . M.fromList $ |
| - | , ("M- | + | [ ((0, xK_i), spawnHere "/opt/idea/bin/idea.sh") |
| - | , ("M-S-p", | + | , ((0, xK_c), spawnHere "google-chrome") |
| - | + | ]) | |
| + | |||
| + | -- web apps | ||
| + | , ("M-a", submap . M.fromList $ | ||
| + | [ ((0, xK_p), spawnHere "google-chrome http://plus.google.com") | ||
| + | , ((0, xK_f), spawnHere "google-chrome http://facebook.com") | ||
| + | , ((0, xK_t), spawnHere "google-chrome http://www.toodledo.com/tasks/index.php") | ||
| + | , ((0, xK_g), spawnHere "google-chrome http://gmail.com") | ||
| + | , ((0, xK_m), spawnHere "google-chrome http://mint.com") | ||
| + | ]) | ||
| + | |||
| + | -- bookmarks | ||
| + | , ("M-b", submap . M.fromList $ | ||
| + | [ ((0, xK_r), spawnHere "uzbl-browser reddit.com") | ||
| + | ]) | ||
| + | -- searches | ||
| + | , ("M-s", promptSearchBrowser myXPConfig myBrowser google) | ||
| + | , ("M-S-s", submap . M.fromList $ | ||
| + | [ ((0, xK_a), promptSearchBrowser myXPConfig myBrowser amazon) | ||
| + | , ((0, xK_c), promptSearchBrowser myXPConfig myBrowser codesearch) | ||
| + | , ((0, xK_d), promptSearchBrowser myXPConfig myBrowser dictionary) | ||
| + | , ((0, xK_g), promptSearchBrowser myXPConfig myBrowser google) | ||
| + | , ((0, xK_i), promptSearchBrowser myXPConfig myBrowser imdb) | ||
| + | , ((0, xK_m), promptSearchBrowser myXPConfig myBrowser maps) | ||
| + | , ((0, xK_t), promptSearchBrowser myXPConfig myBrowser thesaurus) | ||
| + | , ((0, xK_y), promptSearchBrowser myXPConfig myBrowser youtube) | ||
| + | ]) | ||
| + | -- documentation | ||
| + | , ("M-d", submap . M.fromList $ | ||
| + | [ ((0, xK_p), spawnHere "uzbl-browser http://docs.python.org/modindex.html") | ||
| + | , ((0, xK_t), spawnHere "uzbl-browser twistedmatrix.com/documents/current/api/classIndex.html") | ||
| + | , ((0, xK_u), spawnHere "uzbl-browser uzbl.org") | ||
| + | , ((0, xK_e), spawnHere "uzbl-browser http://erldocs.com/") | ||
| + | , ((0, xK_x), spawnHere "uzbl-browser xmonad.org/xmonad-docs/xmonad-contrib/index.html") | ||
| + | ]) | ||
| + | -- scratchpads | ||
| + | , ("M-p", submap . M.fromList $ | ||
| + | [ ((0, xK_h), namedScratchpadAction scratchpads "htop") | ||
| + | , ((0, xK_p), namedScratchpadAction scratchpads "python") | ||
| + | , ((0, xK_n), namedScratchpadAction scratchpads "skynet") | ||
| + | , ((0, xK_d), namedScratchpadAction scratchpads "devmtp") | ||
| + | , ((0, xK_a), namedScratchpadAction scratchpads "andromeda") | ||
| + | ]) | ||
| + | |||
| + | -- alsa volume | ||
, ("M-C-e", spawn "amixer set Master 2%-") | , ("M-C-e", spawn "amixer set Master 2%-") | ||
, ("M-C-u", spawn "amixer set Master 2%+") | , ("M-C-u", spawn "amixer set Master 2%+") | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | + | -- lock | |
| - | + | , ("M-S-x", spawn "xscreensaver-command -lock") | |
| - | + | -- prompt | |
| - | + | , ("M-C-p", runOrRaisePrompt myXPConfig) | |
| - | + | -- toggle Struts | |
| - | + | , ("M-C-s", sendMessage ToggleStruts) | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | -- zoom | |
| - | + | , ("M-S-i", sendMessage Mag.MagnifyMore) | |
| - | + | , ("M-S-o", sendMessage Mag.MagnifyLess) | |
| - | + | , ("M-S-z", sendMessage Mag.Toggle) | |
| - | + | ||
| - | + | -- reflectoggle | |
| - | + | , ("M-x", sendMessage $ Toggle REFLECTX) | |
| + | , ("M-y", sendMessage $ Toggle REFLECTY) | ||
| - | + | -- minimize | |
| - | + | , ("M-c", withFocused minimizeWindow) | |
| + | , ("M-g", sendMessage RestoreNextMinimizedWin) | ||
| - | + | -- boring Windows | |
| - | + | , ("M-j", focusDown) | |
| + | , ("M-k", focusUp) | ||
| + | , ("M-m", focusMaster) | ||
| + | |||
| + | -- toggleLayouts | ||
| + | , ("M-n", sendMessage (Tog.ToggleLayout)) | ||
| + | |||
| + | -- restart | ||
| + | , ("M-q", spawn myRestart) | ||
| + | ] | ||
| + | ++ | ||
| + | |||
| + | -- Change Xinerama bindings | ||
| + | [ ("M-"++key, screenWorkspace sc >>= flip whenJust (windows . f)) | ||
| + | |(key, sc) <- zip ["w", "v", "z"] [0..] | ||
| + | , (f, m) <- [(W.view, 0)]] | ||
-- Helper functions | -- Helper functions | ||
| Line 225: | Line 298: | ||
myRestart = "for pid in `pgrep dzen2`; do kill -9 $pid; done && xmonad --recompile && xmonad --restart" | myRestart = "for pid in `pgrep dzen2`; do kill -9 $pid; done && xmonad --recompile && xmonad --restart" | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
</haskell> | </haskell> | ||
Current revision
import XMonad import qualified XMonad.StackSet as W import qualified Data.Map as M import Control.Monad import System.IO import System.IO.Unsafe import Data.List import Data.Ratio ((%)) import XMonad.ManageHook -- Actions import XMonad.Actions.CycleWS import XMonad.Actions.SpawnOn import XMonad.Actions.OnScreen import XMonad.Actions.SwapWorkspaces import XMonad.Actions.Submap import XMonad.Actions.Search import XMonad.Actions.UpdatePointer import XMonad.Actions.SpawnOn -- Hooks import XMonad.Hooks.ManageHelpers import XMonad.Hooks.DynamicLog import XMonad.Hooks.ManageDocks import XMonad.Hooks.SetWMName import XMonad.Hooks.FadeInactive import XMonad.Hooks.UrgencyHook hiding (Never) import XMonad.Hooks.ICCCMFocus -- Layouts import XMonad.Layout.PerWorkspace import XMonad.Layout.IM import XMonad.Layout.Grid import XMonad.Layout.TwoPane import XMonad.Layout.NoBorders import XMonad.Layout.Reflect import XMonad.Layout.Tabbed import qualified XMonad.Layout.Magnifier as Mag import XMonad.Layout.MultiToggle import XMonad.Layout.Minimize import XMonad.Layout.BoringWindows import qualified XMonad.Layout.ToggleLayouts as Tog -- Prompts import XMonad.Prompt import XMonad.Prompt.Input import XMonad.Prompt.Workspace import XMonad.Prompt.Shell import XMonad.Prompt.XMonad import XMonad.Prompt.RunOrRaise import XMonad.Prompt.AppendFile -- Util import XMonad.Util.NamedScratchpad import XMonad.Util.Run(spawnPipe) import XMonad.Util.EZConfig(additionalKeysP, additionalKeys) -- Simple configuration myBorderWidth = 3 myBrowser = "uzbl-browser" myTerminal = "urxvtc" myShell = "zsh" myModMask = mod4Mask myIconDir = "/home/scott/.dzen/dzenIcons/" myStatusBar = "dzen2 -xs 2 -x '0' -y '0' -h '18' -w '750' -ta 'l' -bg '" ++ myDBGColor ++ "' -fn '" ++ myFont ++ "'" myLeft = ".dzen/left.zsh | dzen2 -xs 2 -x '750' -y '0' -h '18' -w '530' -ta 'r' -bg '" ++ myDBGColor ++ "' -fg '" ++ myFontCol ++ "' -fn '" ++ myFont ++ "'" myFont = "-*-terminus-medium-*-*-*-12-120-75-75-*-*-iso8859-*" myFont2 = "-*-terminus-bold-*-*-*-16-160-72-72-*-*-iso8859-*" myWorkspaces = ["web", "de", "V", "v", "t", "Φ", "com", "music", "vm"] color1 = "#262621" color2 = "#a3d930" color3 = "#fdfdfd" color4 = "#38a2d6" color5 = "#1793d1" myDFGColor = color4 myDBGColor = color1 myFFGColor = color3 myFBGColor = color4 myVFGColor = color3 myVBGColor = color1 myUFGColor = color1 myUBGColor = color2 myIFGColor = color3 myIBGColor = color1 mySColor = color5 myBorder = "#121212" myFBorder = color2 myFontCol = color5 -- -- main -- main = do dzen <- spawnPipe myStatusBar other <- spawnPipe myLeft xmonad $ withUrgencyHook dzenUrgencyHook {args = ["-bg", "green", "-xs", "0"] } $ defaultConfig { manageHook = manageHook defaultConfig <+> namedScratchpadManageHook scratchpads<+> myManageHook , layoutHook = mylayoutHook , startupHook = setWMName "LG3D" , terminal = myTerminal , modMask = myModMask , borderWidth = myBorderWidth , focusFollowsMouse = True , normalBorderColor = myBorder , focusedBorderColor = myFBorder , workspaces = myWorkspaces , logHook = myLogHook >> (dynamicLogWithPP $ myDzenPP dzen ) } `additionalKeysP` myKeys -- End Main -- Layout Hook mylayoutHook = mkToggle (single REFLECTX) $ mkToggle (single REFLECTY) $ boringWindows $ minimize $ Mag.magnifierOff $ smartBorders $ avoidStruts $ lessBorders (Combine Difference Screen OnlyFloat) (Tog.toggleLayouts Full (Mirror tiled ||| Grid ||| onWorkspace "web" tabbedLayout tiled)) where fullscreenLayout = smartBorders Full tiled = Tall nmaster delta ratio nmaster = 1 delta = 3 / 100 ratio = 11 / 20 tabbedLayout = tabbed shrinkText myTabConfig reflected = reflectHoriz $ tiled -- Scratchpads scratchpads = [ NS "htop" "urxvtc -e htop" (title =? "htop") (customFloating $ W.RationalRect 0 0 1 (5/12)), NS "python" "urxvtc -e python" (title =? "python") (customFloating $ W.RationalRect 0 0 1 (5/12)), NS "skynet" "urxvtc -title skynet -e ssh skynet -t screen -Dr" (title =? "skynet") (customFloating $ W.RationalRect 0 0 1 (5/12)), NS "devmtp" "urxvtc -title devmtp -e ssh devmtp -t screen -Dr" (title =? "devmtp") (customFloating $ W.RationalRect 0 0 1 (5/12)), NS "andromeda" "urxvtc -title andromeda -e ssh andromeda -t screen -Dr" (title =? "andromeda") (customFloating $ W.RationalRect 0 0 1 (5/12)) ] -- Manage hook myManageHook = composeAll [ className =? "Xmessage" --> doFloat ,className =? "Dialogue" --> doFloat ] <+> (fmap not isDialog --> doF avoidMaster) <+> composeOne [ isFullscreen -?> doFullFloat ] -- Log Hook myLogHook = takeTopFocus >> fadeInactiveLogHook fadeAmount >> updatePointer (Relative 0.2 0.5) where fadeAmount = 0.90 -- XP Config myXPConfig :: XPConfig myXPConfig = defaultXPConfig { font = myFont , height = 22 , bgColor = myDBGColor , fgColor = myDFGColor , fgHLight = myFFGColor , bgHLight = myFBGColor , historySize = 10 } myTabConfig = defaultTheme { fontName = myFont , activeColor = myFBGColor , inactiveColor = myDBGColor , activeTextColor = myFFGColor , inactiveTextColor = myDFGColor } -- Pretty Printing myDzenPP h = defaultPP { ppCurrent = dzenColor myFFGColor myFBGColor . wrap ("^i(" ++ myIconDir ++ "/dzen_bitmaps/has_win.xbm)") "" , ppVisible = dzenColor myVFGColor myVBGColor . wrap ("^i(" ++ myIconDir ++ "/dzen_bitmaps/has_win.xbm)") "" , ppHidden = dzenColor myDFGColor myDBGColor . wrap ("^i(" ++ myIconDir ++ "/dzen_bitmaps/has_win.xbm)") "" . filterNSP , ppHiddenNoWindows = dzenColor myDFGColor myDBGColor . wrap ("^i(" ++ myIconDir ++ "/dzen_bitmaps/has_win_nv.xbm)") "" .filterNSP , ppUrgent = dzenColor myUFGColor myUBGColor . wrap ("^i(" ++ myIconDir ++ "/info_03.xbm)") "" . dzenStrip , ppTitle = dzenColor myDFGColor myDBGColor . trim . shorten 20 , ppLayout = dzenColor myDFGColor myDBGColor . -- None of these match anymore, need to strip off Mag/Toggle/Reflect (\x -> case x of "Mirror Tall" -> "^fg(" ++ myIFGColor ++ ")^i(" ++ myIconDir ++ "/dzen_bitmaps/mtall.xbm)" "Tall" -> "^fg(" ++ myIFGColor ++ ")^i(" ++ myIconDir ++ "/dzen_bitmaps/tall.xbm)" "Full" -> "^fg(" ++ myIFGColor ++ ")^i(" ++ myIconDir ++ "/dzen_bitmaps/full.xbm)" "Tabbed Simplest" -> "^fg(" ++ myIFGColor ++ ")^i(" ++ myIconDir ++ "/dzen_bitmaps/full.xbm)" "Grid" -> "^fg(" ++ myIFGColor ++ ")^i(" ++ myIconDir ++ "/dzen_bitmaps/grid.xbm)" "TwoPane" -> "^fg(" ++ myIFGColor ++ ")^i(" ++ myIconDir ++ "/dzen_bitmaps/two_pane.xbm)" _ -> x ) , ppSep = "||" , ppOutput = hPutStrLn h } where filterNSP ws = if ws /= "NSP" then ws else "" -- Key Bindings myKeys = [ ("M-u", spawnHere myBrowser) -- run , ("M-r", submap . M.fromList $ [ ((0, xK_i), spawnHere "/opt/idea/bin/idea.sh") , ((0, xK_c), spawnHere "google-chrome") ]) -- web apps , ("M-a", submap . M.fromList $ [ ((0, xK_p), spawnHere "google-chrome http://plus.google.com") , ((0, xK_f), spawnHere "google-chrome http://facebook.com") , ((0, xK_t), spawnHere "google-chrome http://www.toodledo.com/tasks/index.php") , ((0, xK_g), spawnHere "google-chrome http://gmail.com") , ((0, xK_m), spawnHere "google-chrome http://mint.com") ]) -- bookmarks , ("M-b", submap . M.fromList $ [ ((0, xK_r), spawnHere "uzbl-browser reddit.com") ]) -- searches , ("M-s", promptSearchBrowser myXPConfig myBrowser google) , ("M-S-s", submap . M.fromList $ [ ((0, xK_a), promptSearchBrowser myXPConfig myBrowser amazon) , ((0, xK_c), promptSearchBrowser myXPConfig myBrowser codesearch) , ((0, xK_d), promptSearchBrowser myXPConfig myBrowser dictionary) , ((0, xK_g), promptSearchBrowser myXPConfig myBrowser google) , ((0, xK_i), promptSearchBrowser myXPConfig myBrowser imdb) , ((0, xK_m), promptSearchBrowser myXPConfig myBrowser maps) , ((0, xK_t), promptSearchBrowser myXPConfig myBrowser thesaurus) , ((0, xK_y), promptSearchBrowser myXPConfig myBrowser youtube) ]) -- documentation , ("M-d", submap . M.fromList $ [ ((0, xK_p), spawnHere "uzbl-browser http://docs.python.org/modindex.html") , ((0, xK_t), spawnHere "uzbl-browser twistedmatrix.com/documents/current/api/classIndex.html") , ((0, xK_u), spawnHere "uzbl-browser uzbl.org") , ((0, xK_e), spawnHere "uzbl-browser http://erldocs.com/") , ((0, xK_x), spawnHere "uzbl-browser xmonad.org/xmonad-docs/xmonad-contrib/index.html") ]) -- scratchpads , ("M-p", submap . M.fromList $ [ ((0, xK_h), namedScratchpadAction scratchpads "htop") , ((0, xK_p), namedScratchpadAction scratchpads "python") , ((0, xK_n), namedScratchpadAction scratchpads "skynet") , ((0, xK_d), namedScratchpadAction scratchpads "devmtp") , ((0, xK_a), namedScratchpadAction scratchpads "andromeda") ]) -- alsa volume , ("M-C-e", spawn "amixer set Master 2%-") , ("M-C-u", spawn "amixer set Master 2%+") -- lock , ("M-S-x", spawn "xscreensaver-command -lock") -- prompt , ("M-C-p", runOrRaisePrompt myXPConfig) -- toggle Struts , ("M-C-s", sendMessage ToggleStruts) -- zoom , ("M-S-i", sendMessage Mag.MagnifyMore) , ("M-S-o", sendMessage Mag.MagnifyLess) , ("M-S-z", sendMessage Mag.Toggle) -- reflectoggle , ("M-x", sendMessage $ Toggle REFLECTX) , ("M-y", sendMessage $ Toggle REFLECTY) -- minimize , ("M-c", withFocused minimizeWindow) , ("M-g", sendMessage RestoreNextMinimizedWin) -- boring Windows , ("M-j", focusDown) , ("M-k", focusUp) , ("M-m", focusMaster) -- toggleLayouts , ("M-n", sendMessage (Tog.ToggleLayout)) -- restart , ("M-q", spawn myRestart) ] ++ -- Change Xinerama bindings [ ("M-"++key, screenWorkspace sc >>= flip whenJust (windows . f)) |(key, sc) <- zip ["w", "v", "z"] [0..] , (f, m) <- [(W.view, 0)]] -- Helper functions -- -- Avoid changing master on new window creation avoidMaster :: W.StackSet i l a s sd -> W.StackSet i l a s sd avoidMaster = W.modify' $ \c -> case c of W.Stack t [] (r:rs) -> W.Stack t [r] rs otherwise -> c -- Kill zombie dzens before normal xmonad restart myRestart :: String myRestart = "for pid in `pgrep dzen2`; do kill -9 $pid; done && xmonad --recompile && xmonad --restart"
