import System.IO
import XMonad
import XMonad.Hooks.DynamicLog
+import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.ICCCMFocus
import XMonad.Hooks.ManageDocks
+import XMonad.Hooks.ManageHelpers
import XMonad.Hooks.Script
-import XMonad.Layout.Grid
import XMonad.Hooks.SetWMName
import XMonad.Layout.IM
import XMonad.Layout.LayoutHints
import qualified XMonad.Layout.Magnifier as Mag
+import XMonad.Layout.Master
import XMonad.Layout.NoBorders
import XMonad.Layout.NoFrillsDecoration
import XMonad.Layout.PerWorkspace
import XMonad.Layout.Renamed
+import XMonad.Layout.Reflect
import XMonad.Layout.Tabbed
+import XMonad.Layout.ThreeColumns
import XMonad.Util.Run(spawnPipe)
+import XMonad.Util.WindowProperties(getProp32s)
import qualified Data.Map as M
import qualified XMonad.StackSet as W
myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
[
- ((modm .|. shiftMask, xK_q), spawn "gnome-session-quit"),
- ((modm .|. shiftMask, xK_h), spawn "gnome-session-quit --power-off"),
--- ((modm .|. shiftMask, xK_q), spawn "gnome-session-save --logout-dialog"),
--- ((modm .|. shiftMask, xK_h), spawn "gnome-session-save --shutdown-dialog"),
- ((modm .|. shiftMask, xK_l), spawn "gnome-screensaver-command --lock"),
+ ((modm .|. shiftMask, xK_h), spawn "xfce4-session-logout"),
+ ((modm .|. shiftMask, xK_l), spawn "xscreensaver-command --lock"),
- ((modm, xK_n), spawn "gnome-terminal"),
+ ((modm, xK_n), spawn "xfce4-terminal"),
((modm, xK_i), spawn "firefox"),
((modm .|. shiftMask, xK_c ), kill),
]
-
-myManageHook = composeAll [
- (className =? "Gnome-fallback-mount-helper" <&&> resource =? "gnome-fallback-mount-helper") --> doFloat,
- (className =? "Gdu-notification-daemon" <&&> resource =? "gdu-notification-daemon") --> doFloat,
- (className =? "Firefox" <&&> resource =? "Dialog") --> doFloat,
- manageDocks
+avoidMaster = W.modify' $ \c -> case c of
+ W.Stack t [] (r:rs) -> W.Stack t [r] rs
+ otherwise -> c
+
+isTransient = ask >>= \w -> liftX $ do
+ r <- getProp32s "WM_TRANSIENT_FOR" w
+ return $ case r of
+ Just [_] -> True
+ _ -> False
+
+myManageHook =
+ manageDocks <+>
+ composeOne [
+ (className =? "Firefox" <&&> resource =? "Popup") -?> (ask >>= doF . W.sink),
+ (className =? "Firefox" <&&> resource =? "Navigator" <&&> currentWs =? "1") -?> (doShift "2"),
+ (className =? "Kupfer.py" <&&> resource =? "kupfer.py") -?> doFloat,
+ (className =? "Xfce4-appfinder" <&&> resource =? "xfce4-appfinder") -?> doFloatAt 0.1 0.1,
+ (isDialog -?> doFloatAt 0.1 0.1),
+ (isTransient -?> doFloatAt 0.1 0.1),
+ (isFullscreen -?> doFullFloat),
+ (fmap Just $ doF avoidMaster)
]
myPP = xmobarPP
{
- ppTitle = xmobarColor "green" ""
+ ppCurrent = xmobarColor "#A01010" "" . wrap "[" "]",
+ ppTitle = xmobarColor "#10A010" ""
}
-myLogHook h1 =
+myLogHook h1 h2 =
dynamicLogWithPP myPP { ppOutput = hPutStrLn h1 } >>
+ dynamicLogWithPP myPP { ppOutput = hPutStrLn h2 } >>
takeTopFocus -- fix for Java Swing apps
myStartupHook =
goldenRatio = (toRational (2/(1+sqrt(5)::Double)))
+myTitleTheme = defaultTheme {
+ fontName = "xft:sans-serif:size=10",
+ decoHeight = 22
+ }
+
createLayout name layout =
renamed [Replace name] $
layoutHints $
myTiledLayout = createLayout "Tall" $
avoidStruts $
Mag.magnifierOff $
- Tall nMaster ratioIncrement ratio where
+ Tall nMaster ratioIncrement masterRatio
+ where
nMaster = 1
ratioIncrement = 3/100
- ratio = goldenRatio
+ masterRatio = goldenRatio
myTabbedLayout = createLayout "Tab" $
avoidStruts $
- simpleTabbed
+ tabbed shrinkText myTitleTheme
+
+myThreeColLayout = createLayout "ThreeCol" $
+ avoidStruts $
+ Mag.magnifierOff $
+ ThreeCol numMaster resizeDelta masterRatio
+ where
+ resizeDelta = 3/100
+ masterRatio = 4/10
+ numMaster = 1
+
+myMasterTabbedLayout = createLayout "MTab" $
+ avoidStruts $
+ Mag.magnifierOff $
+ mastered resizeDelta masterRatio $
+ tabbed shrinkText myTitleTheme
+ where
+ resizeDelta = 3/100
+ masterRatio = goldenRatio
myImLayout = createLayout "IM" $
avoidStruts $
- noFrillsDeco shrinkText defaultTheme $
- withIM ratio roster $ GridRatio 1
+ noFrillsDeco shrinkText myTitleTheme $
+ withIM rosterRatio roster $
+ myTiledLayout
+--- myThreeColLayout -- use this on wider screens
where
- ratio = 1/4
+ rosterRatio = 1/8
roster = (Or (Title "Buddy List") (And (Resource "main") (ClassName "psi")))
+myGimpLayout = createLayout "Gimp" $
+ avoidStruts $
+ withIM (1/6) (Role "gimp-toolbox") $
+ reflectHoriz $
+ withIM (1/6) (Role "gimp-dock") $
+ reflectHoriz $
+ tabbed shrinkText myTitleTheme
+
+
+-- This was the easiest way I found to avoid a compile error when I have
+-- an unused layout
+referenceAllLayoutsToAvoidErrors =
+ myFullLayout |||
+ myTiledLayout |||
+ myTabbedLayout |||
+ myThreeColLayout |||
+ myMasterTabbedLayout |||
+ myImLayout |||
+ myGimpLayout
+
myLayout =
(
onWorkspace "1" (myImLayout) $
onWorkspace "2" (myTabbedLayout ||| myFullLayout) $
+ onWorkspace "7" (myTiledLayout ||| myTabbedLayout ||| myGimpLayout) $
(myTiledLayout ||| myTabbedLayout)
)
main = do
xmonadDir <- getXMonadDir
xmobar <- spawnPipe ("xmobar " ++ xmonadDir ++ "/xmobar.hs")
- xmonad $ defaultConfig {
- manageHook = myManageHook <+> manageHook defaultConfig,
+ xmobar2 <- spawnPipe ("xmobar -x 1 " ++ xmonadDir ++ "/xmobar.hs")
+ xmonad $ ewmh defaultConfig {
+ manageHook = myManageHook,
layoutHook = myLayout,
workspaces = myWorkspaces,
- logHook = myLogHook xmobar,
+ logHook = myLogHook xmobar xmobar2,
startupHook = myStartupHook,
keys = myKeys
}