Xmonad/Config archive/sereven's xmonad.hs one-host: Difference between revisions
< Xmonad | Config archive
No edit summary |
mNo edit summary |
||
(13 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
<haskell>------ sereven.0.8. | <haskell> | ||
------ sereven.0.8.base.xmonad.hs ---------------- | |||
import XMonad | import XMonad | ||
import qualified XMonad.StackSet as W | import qualified XMonad.StackSet as W | ||
import System.Environment (getEnvironment) | |||
import | import XMonad.Actions.DynamicWorkspaces | ||
import | import XMonad.Actions.WindowNavigation | ||
import XMonad.Hooks.DynamicLog | |||
import XMonad.Hooks.ManageDocks | import XMonad.Hooks.ManageDocks | ||
import XMonad.Hooks.ManageHelpers(doCenterFloat) | import XMonad.Hooks.ManageHelpers (doCenterFloat, isFullscreen, doFullFloat) | ||
import XMonad.Hooks.UrgencyHook | import XMonad.Hooks.UrgencyHook | ||
import XMonad. | import XMonad.Layout.IM -- (m%n) can be (m/n) don't need Data.Ratio | ||
-- | import XMonad.Layout.LayoutScreens | ||
import XMonad.Layout.NoBorders | |||
import XMonad. | import XMonad.Layout.PerWorkspace | ||
import XMonad. | |||
import XMonad.Layout. | |||
import XMonad.Layout.Reflect | import XMonad.Layout.Reflect | ||
import XMonad.Layout.ResizableTile | import XMonad.Layout.ResizableTile | ||
import XMonad.Layout.ToggleLayouts as TL | |||
import XMonad.Layout.TwoPane | |||
import XMonad.Layout.WindowNavigation | import XMonad.Layout.WindowNavigation | ||
import XMonad.Prompt | import XMonad.Prompt | ||
import XMonad.Prompt.Shell | import XMonad.Prompt.Shell | ||
import XMonad.Prompt.RunOrRaise | import XMonad.Prompt.RunOrRaise | ||
import XMonad.Util.EZConfig | |||
import XMonad.Util.Run | import XMonad.Util.Run | ||
import XMonad.Util.Scratchpad | import XMonad.Util.Scratchpad | ||
import XMonad.Util. | import XMonad.Util.WorkspaceCompare (getSortByTag,getSortByIndex) | ||
modm = mod4Mask | |||
sWorkspaces = [ [x] | x <- ['A'..'I'] ] -- /3 MINIMUM/ (easy to mod num wss) | |||
ws2 = sWorkspaces !! 1 | |||
ws3 = sWorkspaces !! 2 | |||
main = do | main = do | ||
dz <- spawnPipe $ dzenWith darkXPC | |||
home <- fmap (maybe "/home/svv/" (++"/") . lookup "HOME") getEnvironment | |||
conf <- withWindowNavigation (xK_k, xK_h, xK_j, xK_l) $ | |||
withUrgencyHook NoUrgencyHook $ | |||
defaultConfig | |||
{ modMask = modm | |||
, focusFollowsMouse = True | |||
, terminal = "urxvtc" | |||
, focusedBorderColor = "#694" | |||
, normalBorderColor = "black" | |||
, borderWidth = 1 | |||
, workspaces = sWorkspaces | |||
, layoutHook = sLayouts | |||
, logHook = dynamicLogWithPP $ dzdarkPP home dz | |||
, manageHook = sManageHook | |||
} `additionalKeys` sKeys `additionalKeysP` sKeysP | |||
-- silly to use both, but.. meh.. | |||
xmonad conf | |||
sKeys = -- need normal bindings for testing ScreenWorkspaces | |||
[ ((modm .|. controlMask, xK_space), sendMessage TL.ToggleLayout ) | |||
, ((modm,xK_b) , sendMessage ToggleStruts) | |||
, ((shiftMask,xK_F1), shellPrompt darkXPC) | |||
, ((shiftMask,xK_F2), runOrRaisePrompt darkXPC) | |||
, ((shiftMask,xK_F3), scratchpadSpawnActionTerminal "urxvt -pe tabbed") | |||
-- for more screens, workspaces, or exploring ion style subframes | |||
, ((modm, xK_backslash), selectWorkspace darkXPC) | |||
, ((modm .|. shiftMask ,xK_BackSpace), removeWorkspace) | |||
, ((modm , xK_F8), rescreen) | |||
-- | , ((modm .|. shiftMask, xK_F8), layoutScreens 4 (Tall 2 (1/8) (1/2))) | ||
, | |||
, ( | |||
, ( | |||
, ( | |||
] | ] | ||
sKeysP = -- TODO convert to additionalKeys | |||
[ ("M-C-k", sendMessage MirrorExpand) | |||
, ("M-C-j", sendMessage MirrorShrink) | , ("M-C-j", sendMessage MirrorShrink) | ||
, ("M-C-h", sendMessage Shrink) | , ("M-C-h", sendMessage Shrink) | ||
, ("M-C-l", sendMessage Expand) | , ("M-C-l", sendMessage Expand) | ||
] | ] | ||
++ -- mod-<key> and mod-shift-<key> are as default | ++ -- workspace and screen keys ------------------------------------ | ||
-- mod-<key> and mod-shift-<key> are as default | |||
-- mod-ctrl-<key> shifts focused window *and* view to <key>'s ws | -- mod-ctrl-<key> shifts focused window *and* view to <key>'s ws | ||
[ (addtlmods ++ "M-" ++ [key], action tag) | [ (addtlmods ++ "M-" ++ [key], action tag) | ||
| (tag, key) <- zip sWorkspaces " | | (tag, key) <- zip sWorkspaces "1234567890_=" | ||
, (addtlmods, action) <- [ ("", windows . W.greedyView) | , (addtlmods, action) <- [ ("", windows . W.greedyView) -- or W.view) | ||
, ("S-", windows . W.shift) | , ("S-", windows . W.shift) | ||
, ("C-", \x -> (windows . W.shift) x >> (windows . W.view) x)] | , ("C-", \x -> (windows . W.shift) x >> (windows . W.view) x)] | ||
] | ] | ||
sManageHook = composeAll | sManageHook = composeAll | ||
[ | [ scratchpadManageHookDefault | ||
, isFullscreen --> doFullFloat | |||
, className =? "Gimp" --> doShift ws3 -- don't float | |||
, | , className =? "MPlayer" --> doShift ws2 | ||
, className =? "Gimp" --> doShift | , title =? "shellfm" --> doShift ws2 | ||
, className =? "MPlayer" --> doShift " | |||
, title =? "" --> doFloat -- SOE graphics | , title =? "" --> doFloat -- SOE graphics | ||
, title =? "shellfm" --> doFloat | , title =? "shellfm" --> doFloat | ||
, className =? "MPlayer" --> doFloat | |||
, className =? "Hback" --> doCenterFloat | , className =? "Hback" --> doCenterFloat | ||
, className =? "XFontSel" --> doCenterFloat | , className =? "XFontSel" --> doCenterFloat | ||
, className =? "Xmessage" --> doCenterFloat | , className =? "Xmessage" --> doCenterFloat | ||
] | ] | ||
sLayouts = | |||
avoidStruts | smartBorders . avoidStruts $ | ||
TL.toggleLayouts (noBorders Full) $ | TL.toggleLayouts (noBorders Full) $ | ||
modWorkspace | modWorkspace ws3 reflectHoriz $ withIM (11/64) (Role "gimp-toolbox") $ | ||
onWorkspace ws2 (TwoPane (1/118) (11/15)) $ | |||
ResizableTall 2 -- default number of masters | ResizableTall 2 -- default number of masters | ||
(1/118) -- resize increment | (1/118) -- resize increment | ||
(11/20) -- horizontal ratio | (11/20) -- horizontal ratio | ||
[5/4 -- master column ~ top/bottom | [5/4 -- master column ~ top/bottom | ||
,5/4 -- no effect w/ 2 masters | ,5/4 -- no effect w/ 2 masters | ||
,5/4 -- slave column ~ top/bottom | ,5/4 -- slave column ~ top/bottom | ||
] -- then defaults to (repeat 1) | ] -- then defaults to (repeat 1) | ||
-- (theming, font, colors) ------------------ | -- (theming, font, colors) ------------------ | ||
darkXPC :: XPConfig | |||
darkXPC = defaultXPConfig | darkXPC = defaultXPConfig | ||
{ font = "-*-dejavu sans mono-medium-r-*-*-17-*-*-*-*-*-*-*" | |||
, height = 28 | |||
, bgColor = "black" | |||
, fgColor = "#684" | |||
, bgHLight = "#785" | |||
, fgHLight = "black" | |||
, promptBorderWidth = 0 | |||
} | |||
-- (dzen) ---------------------------------- | -- (dzen) ---------------------------------- | ||
dzenWith :: XPConfig -> String | |||
dzenWith xpc = -- use XPConfig theming | |||
"dzen2 -xs 1 -ta l -h " ++ (show $ height xpc) | |||
++ " -fn '" ++ font xpc ++ "'" | |||
++ " -bg '" ++ bgColor xpc ++ "'" | |||
++ " -fg '" ++ fgColor xpc ++ "'" | |||
"dzen2 - | |||
++ " -fn | |||
++ " -bg | |||
++ " -fg | |||
++ " -e 'onstart=lower'" | ++ " -e 'onstart=lower'" | ||
dzdarkPP hm dzIn = defaultPP | dzdarkPP hm dzIn = defaultPP | ||
{ ppCurrent = wrap (dzfg | { ppOutput = hPutStrLn dzIn | ||
, ppVisible = dzfg | , ppCurrent = wrap (dzfg "#4d5" box) "" . dzfg "#bca" | ||
, ppHidden = dzfg | , ppVisible = dzfg "#ab9" . (emptybox ++) | ||
, ppHiddenNoWindows = dzfg | , ppHidden = dzfg "#786" | ||
, ppUrgent = dzfg | , ppHiddenNoWindows = dzfg "#554" | ||
, ppUrgent = dzfg "#d54" . stripDzen | |||
, ppWsSep = kernedsp | , ppWsSep = kernedsp | ||
, ppSep = "" | , ppSep = "" | ||
, ppSort = fmap (.scratchpadFilterOutWorkspace) getSortByIndex | |||
, ppExtras = [xmonicon] | , ppExtras = [xmonicon] | ||
, ppOrder = \(ws:_:_:xs) -> [" "] ++ [ws] ++ xs | , ppOrder = \(ws:_:_:xs) -> [" "] ++ [ws] ++ xs | ||
} | } | ||
where kernedsp = "^p(+12)" | -- for layouts and titles use something like ppOrder = \(ws:l:t:xs) -> [l,ws,t] ++ xs | ||
where dzfg c = dzenColor c "" | |||
box = "^p(;+7)^r(5x5)^p(+2;-7)" | |||
emptybox = "^p(;+7)^ro(5x5)^p(+2;-7)" | |||
kernedsp = "^p(+12)" | |||
xpm path = wrap ("^i(" ++ path ++ ".dzen/icons/") ".xpm)" | |||
xmonicon = io $ return . Just $ | xmonicon = io $ return . Just $ | ||
kernedsp ++ "^p(;4)" ++ xpm hm "xmonad16" ++ "^p(;-4)" ++ kernedsp | kernedsp ++ "^p(;4)" ++ xpm hm "xmonad16" ++ "^p(;-4)" ++ kernedsp | ||
stripDzen :: String -> String -- strip dzen formatting to undo ppHidden | |||
stripDzen = strip [] where | |||
strip keep [] = keep | |||
strip keep ('^':'^':x) = strip (keep ++ "^") x | |||
strip keep ('^':x) = strip keep (drop 1 . dropWhile (')' /=) $ x) | |||
strip keep x = let (good,x') = span ('^' /=) x | |||
in strip (keep ++ good) x' | |||
</haskell> | </haskell> |
Latest revision as of 19:13, 21 February 2010
------ sereven.0.8.base.xmonad.hs ----------------
import XMonad
import qualified XMonad.StackSet as W
import System.Environment (getEnvironment)
import XMonad.Actions.DynamicWorkspaces
import XMonad.Actions.WindowNavigation
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.ManageHelpers (doCenterFloat, isFullscreen, doFullFloat)
import XMonad.Hooks.UrgencyHook
import XMonad.Layout.IM -- (m%n) can be (m/n) don't need Data.Ratio
import XMonad.Layout.LayoutScreens
import XMonad.Layout.NoBorders
import XMonad.Layout.PerWorkspace
import XMonad.Layout.Reflect
import XMonad.Layout.ResizableTile
import XMonad.Layout.ToggleLayouts as TL
import XMonad.Layout.TwoPane
import XMonad.Layout.WindowNavigation
import XMonad.Prompt
import XMonad.Prompt.Shell
import XMonad.Prompt.RunOrRaise
import XMonad.Util.EZConfig
import XMonad.Util.Run
import XMonad.Util.Scratchpad
import XMonad.Util.WorkspaceCompare (getSortByTag,getSortByIndex)
modm = mod4Mask
sWorkspaces = [ [x] | x <- ['A'..'I'] ] -- /3 MINIMUM/ (easy to mod num wss)
ws2 = sWorkspaces !! 1
ws3 = sWorkspaces !! 2
main = do
dz <- spawnPipe $ dzenWith darkXPC
home <- fmap (maybe "/home/svv/" (++"/") . lookup "HOME") getEnvironment
conf <- withWindowNavigation (xK_k, xK_h, xK_j, xK_l) $
withUrgencyHook NoUrgencyHook $
defaultConfig
{ modMask = modm
, focusFollowsMouse = True
, terminal = "urxvtc"
, focusedBorderColor = "#694"
, normalBorderColor = "black"
, borderWidth = 1
, workspaces = sWorkspaces
, layoutHook = sLayouts
, logHook = dynamicLogWithPP $ dzdarkPP home dz
, manageHook = sManageHook
} `additionalKeys` sKeys `additionalKeysP` sKeysP
-- silly to use both, but.. meh..
xmonad conf
sKeys = -- need normal bindings for testing ScreenWorkspaces
[ ((modm .|. controlMask, xK_space), sendMessage TL.ToggleLayout )
, ((modm,xK_b) , sendMessage ToggleStruts)
, ((shiftMask,xK_F1), shellPrompt darkXPC)
, ((shiftMask,xK_F2), runOrRaisePrompt darkXPC)
, ((shiftMask,xK_F3), scratchpadSpawnActionTerminal "urxvt -pe tabbed")
-- for more screens, workspaces, or exploring ion style subframes
, ((modm, xK_backslash), selectWorkspace darkXPC)
, ((modm .|. shiftMask ,xK_BackSpace), removeWorkspace)
, ((modm , xK_F8), rescreen)
, ((modm .|. shiftMask, xK_F8), layoutScreens 4 (Tall 2 (1/8) (1/2)))
]
sKeysP = -- TODO convert to additionalKeys
[ ("M-C-k", sendMessage MirrorExpand)
, ("M-C-j", sendMessage MirrorShrink)
, ("M-C-h", sendMessage Shrink)
, ("M-C-l", sendMessage Expand)
]
++ -- workspace and screen keys ------------------------------------
-- mod-<key> and mod-shift-<key> are as default
-- mod-ctrl-<key> shifts focused window *and* view to <key>'s ws
[ (addtlmods ++ "M-" ++ [key], action tag)
| (tag, key) <- zip sWorkspaces "1234567890_="
, (addtlmods, action) <- [ ("", windows . W.greedyView) -- or W.view)
, ("S-", windows . W.shift)
, ("C-", \x -> (windows . W.shift) x >> (windows . W.view) x)]
]
sManageHook = composeAll
[ scratchpadManageHookDefault
, isFullscreen --> doFullFloat
, className =? "Gimp" --> doShift ws3 -- don't float
, className =? "MPlayer" --> doShift ws2
, title =? "shellfm" --> doShift ws2
, title =? "" --> doFloat -- SOE graphics
, title =? "shellfm" --> doFloat
, className =? "MPlayer" --> doFloat
, className =? "Hback" --> doCenterFloat
, className =? "XFontSel" --> doCenterFloat
, className =? "Xmessage" --> doCenterFloat
]
sLayouts =
smartBorders . avoidStruts $
TL.toggleLayouts (noBorders Full) $
modWorkspace ws3 reflectHoriz $ withIM (11/64) (Role "gimp-toolbox") $
onWorkspace ws2 (TwoPane (1/118) (11/15)) $
ResizableTall 2 -- default number of masters
(1/118) -- resize increment
(11/20) -- horizontal ratio
[5/4 -- master column ~ top/bottom
,5/4 -- no effect w/ 2 masters
,5/4 -- slave column ~ top/bottom
] -- then defaults to (repeat 1)
-- (theming, font, colors) ------------------
darkXPC :: XPConfig
darkXPC = defaultXPConfig
{ font = "-*-dejavu sans mono-medium-r-*-*-17-*-*-*-*-*-*-*"
, height = 28
, bgColor = "black"
, fgColor = "#684"
, bgHLight = "#785"
, fgHLight = "black"
, promptBorderWidth = 0
}
-- (dzen) ----------------------------------
dzenWith :: XPConfig -> String
dzenWith xpc = -- use XPConfig theming
"dzen2 -xs 1 -ta l -h " ++ (show $ height xpc)
++ " -fn '" ++ font xpc ++ "'"
++ " -bg '" ++ bgColor xpc ++ "'"
++ " -fg '" ++ fgColor xpc ++ "'"
++ " -e 'onstart=lower'"
dzdarkPP hm dzIn = defaultPP
{ ppOutput = hPutStrLn dzIn
, ppCurrent = wrap (dzfg "#4d5" box) "" . dzfg "#bca"
, ppVisible = dzfg "#ab9" . (emptybox ++)
, ppHidden = dzfg "#786"
, ppHiddenNoWindows = dzfg "#554"
, ppUrgent = dzfg "#d54" . stripDzen
, ppWsSep = kernedsp
, ppSep = ""
, ppSort = fmap (.scratchpadFilterOutWorkspace) getSortByIndex
, ppExtras = [xmonicon]
, ppOrder = \(ws:_:_:xs) -> [" "] ++ [ws] ++ xs
}
-- for layouts and titles use something like ppOrder = \(ws:l:t:xs) -> [l,ws,t] ++ xs
where dzfg c = dzenColor c ""
box = "^p(;+7)^r(5x5)^p(+2;-7)"
emptybox = "^p(;+7)^ro(5x5)^p(+2;-7)"
kernedsp = "^p(+12)"
xpm path = wrap ("^i(" ++ path ++ ".dzen/icons/") ".xpm)"
xmonicon = io $ return . Just $
kernedsp ++ "^p(;4)" ++ xpm hm "xmonad16" ++ "^p(;-4)" ++ kernedsp
stripDzen :: String -> String -- strip dzen formatting to undo ppHidden
stripDzen = strip [] where
strip keep [] = keep
strip keep ('^':'^':x) = strip (keep ++ "^") x
strip keep ('^':x) = strip keep (drop 1 . dropWhile (')' /=) $ x)
strip keep x = let (good,x') = span ('^' /=) x
in strip (keep ++ good) x'