]> code.delx.au - dotfiles/blobdiff - .xmonad/xmonad.hs
xmonad: remove unused layout
[dotfiles] / .xmonad / xmonad.hs
index fe6a9a01014868b230619026385e884ea492e1c8..d36078b694fd103c1a7bbd9606abd4473cfd9db3 100644 (file)
-import XMonad hiding ( (|||) )
+{-# LANGUAGE FlexibleContexts #-}
+import System.IO
+import XMonad
+import XMonad.Actions.CycleRecentWS
+import XMonad.Actions.PhysicalScreens
 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.ManageHelpers
+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.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.Util.Run(spawnPipe)
+import qualified Data.Map as M
+import qualified XMonad.StackSet as W
 
-import System.IO
 
-myKeys =
-       [
-               ("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")
-       ]
+myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
+    [
+        ((modm .|. shiftMask, xK_h), spawn "xfce4-session-logout"),
+        ((modm .|. shiftMask, xK_l), spawn "xscreensaver-command --lock"),
+        ((modm .|. shiftMask, xK_r), spawn "xmonad --restart"),
+
+        ((modm, xK_n), spawn "xfce4-terminal"),
+        ((modm, xK_i), spawn "firefox"),
+        ((modm, xK_c), spawn "emacsclient --create-frame --no-wait"),
+        ((modm, xK_p), spawn "kupfer"),
+
+        ((modm .|. shiftMask, xK_c ), kill),
+        ((modm, xK_space ), sendMessage NextLayout),
+        ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf),
+        ((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),
+        ((modm , xK_a), cycleRecentWS [xK_Super_L] xK_a xK_a)
+    ]
+    ++
+
+    -- mod-{o,e,u}, Switch to physical/Xinerama screens 1, 2, or 3
+    -- mod-shift-{o,e,u}, Move client to screen 1, 2, or 3
+    [((m .|. modm, key), f sc)
+        | (key, sc) <- zip [xK_o, xK_e, xK_u] [0..]
+        , (f, m) <- [(viewScreen, 0), (sendToScreen, 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 =? "Firefox" <&&> resource =? "Dialog") --> doFloat,
-               manageDocks
-       ]
+avoidMaster = W.modify' $ \c -> case c of
+    W.Stack t [] (r:rs) -> W.Stack t [r] rs
+    otherwise -> c
+
+isSkipTaskBar = isInProperty "_NET_WM_STATE" "_NET_WM_STATE_SKIP_TASKBAR"
+
+myManageHook =
+    manageDocks <+>
+    composeOne [
+        transience,
+        (isSkipTaskBar -?> doFloat),
+        (isDialog -?> doFloatAt 0.1 0.1),
+        (isFullscreen -?> doFullFloat),
+        (fmap Just $ doF avoidMaster)
+    ]
 
 
 myWorkspaces = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
 
-myLogHook xmobar = dynamicLogWithPP xmobarPP
-       {
-               ppOutput = hPutStrLn xmobar,
-               ppTitle = xmobarColor "green" "" . shorten 50
-       }
+myPP = xmobarPP
+    {
+        ppCurrent = xmobarColor "#A01010" "" . wrap "[" "]",
+        ppTitle = xmobarColor "#10A010" ""
+    }
+
+myLogHook hooks = do
+    mapM (\h -> dynamicLogWithPP myPP { ppOutput = hPutStrLn h }) hooks
+    takeTopFocus -- fix for Java Swing apps
 
+myStartupHook = do
+    setWMName "LG3D" -- fix for Java Swing apps
+    spawn "xfce4-panel --restart" -- ensure it appears on top of xmobar
 
 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 $
-       (
-               onWorkspace "1" (myImLayout) $
-               onWorkspace "2" (myTabbedLayout) $
-               (myTiledLayout ||| myFullLayout ||| myTabbedLayout ||| myMirrorTiledLayout)
-       )
+myTitleTheme = defaultTheme {
+        fontName = "xft:sans-serif:size=10",
+        decoHeight = 24
+    }
+
+createLayout name layout =
+    renamed [Replace name] $
+    layoutHints $
+    smartBorders $
+    layout
+
+myFullLayout = createLayout "Full" $
+    noBorders $
+    Full
+
+myTiledLayout = createLayout "Tall" $
+    avoidStruts $
+    Mag.magnifierOff $
+    Tall nMaster ratioIncrement masterRatio
+    where
+        nMaster = 1
+        ratioIncrement = 3/100
+        masterRatio = goldenRatio
+
+myTabbedLayout = createLayout "Tab" $
+    avoidStruts $
+    tabbed shrinkText myTitleTheme
+
+myMasterTabbedLayout = createLayout "MTab" $
+    avoidStruts $
+    Mag.magnifierOff $
+    mastered resizeDelta masterRatio $
+    tabbed shrinkText myTitleTheme
+    where
+        resizeDelta = 3/100
+        masterRatio = goldenRatio
+
+myGimpLayout = createLayout "Gimp" $
+    avoidStruts $
+    withIM (1/6) (Role "gimp-toolbox") $
+    reflectHoriz $
+    withIM (1/6) (Role "gimp-dock") $
+    reflectHoriz $
+    tabbed shrinkText myTitleTheme
+
+myLayout =
+    (
+        onWorkspace "1" (myTabbedLayout ||| myMasterTabbedLayout) $
+        onWorkspace "2" (myTabbedLayout ||| myMasterTabbedLayout) $
+        onWorkspace "9" (myFullLayout ||| myMasterTabbedLayout ||| myTabbedLayout ||| myTiledLayout ||| myGimpLayout) $
+        (myMasterTabbedLayout ||| myTabbedLayout ||| myTiledLayout)
+    )
 
 main = do
-       xmobar <- spawnPipe myXMobarStatus
-       xmonad $ defaultConfig {
-               manageHook = manageDocks <+> myManageHook <+> manageHook defaultConfig,
-               layoutHook = myLayouts,
-               workspaces = myWorkspaces,
-               logHook = myLogHook xmobar
-       } `additionalKeysP` myKeys
+    xmonadDir <- getXMonadDir
+    xmobars <- mapM (\x -> spawnPipe ("xmobar -x " ++ (show x) ++ " " ++ xmonadDir ++ "/xmobar.hs")) [1, 2]
+    xmonad $ ewmh defaultConfig {
+        manageHook = myManageHook,
+        layoutHook = myLayout,
+        workspaces = myWorkspaces,
+        logHook = myLogHook xmobars,
+        startupHook = myStartupHook,
+        keys = myKeys,
+        modMask = mod4Mask,
+        handleEventHook = handleEventHook defaultConfig <+> fullscreenEventHook,
+        focusFollowsMouse = False
+    }