summary refs log tree commit diff stats
path: root/xmonad
diff options
context:
space:
mode:
Diffstat (limited to 'xmonad')
-rw-r--r--xmonad/xmonad/xmonad.hs92
1 files changed, 92 insertions, 0 deletions
diff --git a/xmonad/xmonad/xmonad.hs b/xmonad/xmonad/xmonad.hs
new file mode 100644
index 0000000..21e197d
--- /dev/null
+++ b/xmonad/xmonad/xmonad.hs
@@ -0,0 +1,92 @@
+import XMonad
+import qualified XMonad.StackSet as W
+import XMonad.Hooks.DynamicLog
+import XMonad.Hooks.EwmhDesktops
+import XMonad.Hooks.ManageDocks
+import XMonad.Hooks.ManageHelpers
+import XMonad.Layout.NoBorders
+import XMonad.Layout.WindowNavigation
+import XMonad.Util.EZConfig
+import XMonad.Util.Run(spawnPipe)
+import System.Exit
+import System.IO
+import Data.List(isPrefixOf)
+
+myManageHook :: ManageHook
+myManageHook = composeOne
+               [ className =? "Firefox" -?> doShift "2"
+               , className =? "Pidgin" -?> doShift "3"
+               , className =? "nuvolaplayer" -?> doShift "8"
+               , className =? "Transmission-gtk" -?> doShift "9"
+               , isFullscreen -?> doFullFloat
+               , fmap ("mpv" `isPrefixOf`) title -?> doFullFloat
+               ]
+
+myKeys c = mkKeymap c $
+           [ ("M-S-<Return>", spawn $ XMonad.terminal c)
+           , ("M-k", kill)
+
+           , ("M-<Space>", spawn "exec $(dmenu_path | dmenu)")
+           , ("M-x M-e", spawn "emacsclient -c")
+
+           , ("M-t",  withFocused $ windows . W.sink)
+           , ("M-m",  windows W.focusMaster)
+           , ("M-S-m",  windows W.swapMaster)
+
+           , ("M-<R>",    sendMessage $ Go R)
+           , ("M-<L>",    sendMessage $ Go L)
+           , ("M-<U>",    sendMessage $ Go U)
+           , ("M-<D>",    sendMessage $ Go D)
+           , ("M-M1-<R>", sendMessage $ Swap R)
+           , ("M-M1-<L>", sendMessage $ Swap L)
+           , ("M-M1-<U>", sendMessage $ Swap U)
+           , ("M-M1-<D>", sendMessage $ Swap D)
+           , ("M-C-<R>",  sendMessage $ Move R)
+           , ("M-C-<L>",  sendMessage $ Move L)
+           , ("M-C-<U>",  sendMessage $ Move U)
+           , ("M-C-<D>",  sendMessage $ Move D)
+
+           , ("M-n", windows W.focusDown)
+           , ("M-p", windows W.focusUp)
+           , ("M-S-n", windows W.swapDown)
+           , ("M-S-p", windows W.swapUp)
+
+           , ("M-,", sendMessage (IncMasterN 1))
+           , ("M-.", sendMessage (IncMasterN (-1)))
+
+           , ("M-\\", sendMessage NextLayout)
+           , ("M-S-\\", setLayout $ XMonad.layoutHook c)
+
+           , ("M-+", sendMessage Shrink)
+           , ("M--", sendMessage Expand)
+
+           , ("M-q", broadcastMessage ReleaseResources
+                         >> restart "xmonad" True)
+           , ("C-M-q", io (exitWith ExitSuccess))
+           ] ++
+
+             -- mod-[1..9], Switch to workspace N
+             -- mod-shift-[1..9], Move client to workspace N
+           [(m ++ k, windows $ f w)
+            | (w, k) <- zip (XMonad.workspaces c) (map show [1..9])
+            , (m, f) <- [("M-",W.greedyView), ("M-S-",W.shift)]]
+
+
+main :: IO ()
+main = do
+  xmproc <-spawnPipe "/usr/bin/xmobar /home/alan/.xmobarrc"
+  xmonad $ defaultConfig
+             { manageHook = myManageHook <+> manageDocks <+> manageHook defaultConfig
+             , layoutHook = smartBorders . avoidStruts  $  layoutHook defaultConfig
+             , logHook = dynamicLogWithPP xmobarPP
+                         { ppOutput = hPutStrLn xmproc
+                         , ppTitle  = xmobarColor "#859900" "" . shorten 200
+                         , ppCurrent = xmobarColor "#b58900" "". wrap "[" "]"
+                         , ppHiddenNoWindows = xmobarColor "#93a1a1" ""
+                         , ppUrgent  = xmobarColor "#dc322f" "#b58900"
+                         }
+             , terminal = "urxvt"
+             , modMask = mod4Mask
+             , handleEventHook = fullscreenEventHook
+             , keys = myKeys
+  }