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),
]
+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)
]
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 $
myTabbedLayout = createLayout "Tab" $
avoidStruts $
- simpleTabbed
+ tabbed shrinkText myTitleTheme
myThreeColLayout = createLayout "ThreeCol" $
avoidStruts $
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
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 =
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
}