]> code.delx.au - dotfiles/blobdiff - .xmonad/xmonad.hs
xmonad: fix full screen flash
[dotfiles] / .xmonad / xmonad.hs
index fe6a9a01014868b230619026385e884ea492e1c8..08b88e1c46f4431620917d9ecce351509bbdb9e0 100644 (file)
-import XMonad hiding ( (|||) )
+import System.IO
+import XMonad
 import XMonad.Hooks.DynamicLog
+import XMonad.Hooks.EwmhDesktops
+import XMonad.Hooks.ICCCMFocus
 import XMonad.Hooks.ManageDocks
-import XMonad.Util.Run(spawnPipe)
-import XMonad.Util.EZConfig(additionalKeysP)
-
+import XMonad.Hooks.Script
+import XMonad.Hooks.SetWMName
 import XMonad.Layout.IM
-import XMonad.Layout.LayoutCombinators
 import XMonad.Layout.LayoutHints
-import XMonad.Layout.Renamed
+import qualified XMonad.Layout.Magnifier as Mag
+import XMonad.Hooks.ManageHelpers
 import XMonad.Layout.NoBorders
+import XMonad.Layout.NoFrillsDecoration
 import XMonad.Layout.PerWorkspace
+import XMonad.Layout.Renamed
 import XMonad.Layout.Tabbed
+import XMonad.Layout.ThreeColumns
+import XMonad.Layout.TwoPane
+import XMonad.Util.Run(spawnPipe)
+import qualified Data.Map as M
+import qualified XMonad.StackSet as W
 
-import System.IO
 
-myKeys =
+myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
        [
-               ("C-S-l", spawn "gnome-screensaver-command --lock"),
-               ("M-S-q", spawn "gnome-session-quit"),
-               ("M-S-h", spawn "gnome-session-quit --power-off"),
-               ("M-p", spawn "dmenu_run"),
-               ("M-i", spawn "firefox")
+               ((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, xK_n), spawn "gnome-terminal"),
+               ((modm, xK_i), spawn "firefox"),
+
+               ((modm .|. shiftMask, xK_c ), kill),
+               ((modm, xK_space ), sendMessage NextLayout),
+               ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf),
+               ((modm, xK_Tab ), windows W.focusDown),
+               ((modm, xK_j ), windows W.focusDown),
+               ((modm, xK_k ), windows W.focusUp ),
+               ((modm, xK_m ), windows W.focusMaster ),
+               ((modm, xK_Return), windows W.swapMaster),
+               ((modm .|. shiftMask, xK_j ), windows W.swapDown ),
+               ((modm .|. shiftMask, xK_k ), windows W.swapUp ),
+               ((modm, xK_h ), sendMessage Shrink),
+               ((modm, xK_l ), sendMessage Expand),
+               ((modm, xK_t ), withFocused $ windows . W.sink),
+               ((modm , xK_comma ), sendMessage (IncMasterN 1)),
+               ((modm , xK_period), sendMessage (IncMasterN (-1))),
+               ((modm , xK_b ), sendMessage ToggleStruts),
+               ((modm , xK_z ), sendMessage Mag.Toggle)
+       ]
+       ++
+
+       -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3
+       -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
+       [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f))
+               | (key, sc) <- zip [xK_o, xK_e, xK_u] [0..]
+               , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]
+       ]
+       ++
+
+       -- mod-[1..9], Switch to workspace N
+       -- mod-shift-[1..9], Move client to workspace N
+       [((m .|. modm, k), windows $ f i)
+               | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
+               , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]
        ]
 
-myXMobarStatus = "xmobar /home/jamesbunton/.xmonad/xmobar.hs"
+
 
 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 =? "Screenruler" <&&> resource =? "screenruler") --> doFloat,
+               (className =? "Plugin-container" <&&> resource =? "plugin-container") --> doFullFloat,
                manageDocks
        ]
 
 
 myWorkspaces = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
 
-myLogHook xmobar = dynamicLogWithPP xmobarPP
+myPP = xmobarPP
        {
-               ppOutput = hPutStrLn xmobar,
-               ppTitle = xmobarColor "green" "" . shorten 50
+               ppTitle = xmobarColor "green" ""
        }
 
+myLogHook h1 =
+       dynamicLogWithPP myPP { ppOutput = hPutStrLn h1 } >>
+       takeTopFocus -- fix for Java Swing apps
+
+myStartupHook =
+       setWMName "LG3D" -- fix for Java Swing apps
+
 
 goldenRatio = (toRational (2/(1+sqrt(5)::Double)))
 
-myFullLayout = Full
-myTiledLayout = Tall nMaster ratioIncrement ratio where
-       nMaster = 1 
-       ratioIncrement = 3/100
-       ratio = goldenRatio
-myMirrorTiledLayout = Mirror myTiledLayout
-myTabbedLayout = simpleTabbed
-myImLayout = IM ratio roster where
-       ratio = 1/4
-       roster = (Or (Title "Buddy List") (And (Resource "main") (ClassName "psi")))
-
-myLayouts = renamed [CutWordsLeft 1] $ avoidStruts $ layoutHints $ smartBorders $
+createLayout name layout =
+       renamed [Replace name] $
+       layoutHints $
+       smartBorders $
+       layout
+
+myFullLayout = createLayout "Full" $
+       Full
+
+myTiledLayout = createLayout "Tall" $
+       avoidStruts $
+       Mag.magnifierOff $
+       Tall nMaster ratioIncrement masterRatio
+       where
+               nMaster = 1
+               ratioIncrement = 3/100
+               masterRatio = goldenRatio
+
+myTabbedLayout = createLayout "Tab" $
+       avoidStruts $
+       simpleTabbed
+
+myThreeColLayout = createLayout "ThreeCol" $
+       avoidStruts $
+       Mag.magnifierOff $
+       ThreeCol numMaster resizeDelta masterRatio
+       where
+               resizeDelta = 3/100
+               masterRatio = 4/10
+               numMaster = 1
+
+myTwoPaneLayout = createLayout "TwoPane" $
+       avoidStruts $
+       Mag.magnifierOff $
+       TwoPane resizeDelta masterRatio
+       where
+               resizeDelta = 3/100
+               masterRatio = goldenRatio
+
+myImLayout = createLayout "IM" $
+       avoidStruts $
+       noFrillsDeco shrinkText defaultTheme $
+       withIM rosterRatio roster $
+       myTiledLayout
+---    myThreeColLayout -- use this on wider screens
+       where
+               rosterRatio = 1/8
+               roster = (Or (Title "Buddy List") (And (Resource "main") (ClassName "psi")))
+
+-- This was the easiest way I found to avoid a compile error when I have
+-- an unused layout
+referenceAllLayoutsToAvoidErrors =
+       myFullLayout |||
+       myTiledLayout |||
+       myTabbedLayout |||
+       myThreeColLayout |||
+       myTwoPaneLayout |||
+       myImLayout
+
+
+myLayout =
        (
                onWorkspace "1" (myImLayout) $
-               onWorkspace "2" (myTabbedLayout) $
-               (myTiledLayout ||| myFullLayout ||| myTabbedLayout ||| myMirrorTiledLayout)
+               onWorkspace "2" (myTabbedLayout ||| myFullLayout) $
+               (myTiledLayout ||| myTabbedLayout)
        )
 
 main = do
-       xmobar <- spawnPipe myXMobarStatus
-       xmonad $ defaultConfig {
-               manageHook = manageDocks <+> myManageHook <+> manageHook defaultConfig,
-               layoutHook = myLayouts,
+       xmonadDir <- getXMonadDir
+       xmobar <- spawnPipe ("xmobar " ++ xmonadDir ++ "/xmobar.hs")
+       xmonad $ ewmh defaultConfig {
+               manageHook = myManageHook <+> manageHook defaultConfig,
+               layoutHook = myLayout,
                workspaces = myWorkspaces,
-               logHook = myLogHook xmobar
-       } `additionalKeysP` myKeys
+               logHook = myLogHook xmobar,
+               startupHook = myStartupHook,
+               keys = myKeys
+       }