]> code.delx.au - dotfiles/blobdiff - .xmonad/xmonad.hs
xmonad: remove Firefox special case for ff29+
[dotfiles] / .xmonad / xmonad.hs
index 246ff1a72567dd688fea8bf032849165bb49e4d7..898cb493af3a9450616d1b79fc221eba8257821c 100644 (file)
@@ -1,35 +1,35 @@
 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.Hooks.SetWMName
 import XMonad.Layout.IM
 import XMonad.Layout.LayoutHints
 import qualified XMonad.Layout.Magnifier as Mag
-import XMonad.Hooks.ManageHelpers
+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.Layout.TwoPane
 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),
@@ -68,15 +68,30 @@ myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
        ]
 
 
+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
+
+isSkipTaskBar = isInProperty "_NET_WM_STATE" "_NET_WM_STATE_SKIP_TASKBAR"
+
 
-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,
-               (className =? "Firefox" <&&> resource =? "Popup") --> (ask >>= doF . W.sink),
-               (className =? "Screenruler" <&&> resource =? "screenruler") --> doFloat,
-               (className =? "Plugin-container" <&&> resource =? "plugin-container") --> doFullFloat,
-               manageDocks
+myManageHook =
+       manageDocks <+>
+       composeOne [
+               (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,
+               (isSkipTaskBar -?> doFloat),
+               (isDialog -?> doFloatAt 0.1 0.1),
+               (isTransient -?> doFloatAt 0.1 0.1),
+               (isFullscreen -?> doFullFloat),
+               (fmap Just $ doF avoidMaster)
        ]
 
 
@@ -84,11 +99,13 @@ myWorkspaces = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
 
 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 =
@@ -97,6 +114,11 @@ 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 $
@@ -117,7 +139,7 @@ myTiledLayout = createLayout "Tall" $
 
 myTabbedLayout = createLayout "Tab" $
        avoidStruts $
-       simpleTabbed
+       tabbed shrinkText myTitleTheme
 
 myThreeColLayout = createLayout "ThreeCol" $
        avoidStruts $
@@ -128,17 +150,18 @@ myThreeColLayout = createLayout "ThreeCol" $
                masterRatio = 4/10
                numMaster = 1
 
-myTwoPaneLayout = createLayout "TwoPane" $
+myMasterTabbedLayout = createLayout "MTab" $
        avoidStruts $
        Mag.magnifierOff $
-       TwoPane resizeDelta masterRatio
+       mastered resizeDelta masterRatio $
+       tabbed shrinkText myTitleTheme
        where
                resizeDelta = 3/100
                masterRatio = goldenRatio
 
 myImLayout = createLayout "IM" $
        avoidStruts $
-       noFrillsDeco shrinkText defaultTheme $
+       noFrillsDeco shrinkText myTitleTheme $
        withIM rosterRatio roster $
        myTiledLayout
 ---    myThreeColLayout -- use this on wider screens
@@ -146,6 +169,15 @@ myImLayout = createLayout "IM" $
                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 =
@@ -153,25 +185,28 @@ referenceAllLayoutsToAvoidErrors =
        myTiledLayout |||
        myTabbedLayout |||
        myThreeColLayout |||
-       myTwoPaneLayout |||
-       myImLayout
+       myMasterTabbedLayout |||
+       myImLayout |||
+       myGimpLayout
 
 
 myLayout =
        (
                onWorkspace "1" (myImLayout) $
-               onWorkspace "2" (myTabbedLayout ||| myFullLayout) $
-               (myTiledLayout ||| myTabbedLayout)
+               onWorkspace "2" (myTabbedLayout ||| myMasterTabbedLayout) $
+               onWorkspace "9" (myMasterTabbedLayout ||| myTabbedLayout ||| myTiledLayout ||| myFullLayout ||| myGimpLayout) $
+               (myMasterTabbedLayout ||| myTabbedLayout ||| myTiledLayout)
        )
 
 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
        }