Skip to content

Instantly share code, notes, and snippets.

@squarehimself
Created November 8, 2010 03:55
Show Gist options
  • Save squarehimself/667362 to your computer and use it in GitHub Desktop.
Save squarehimself/667362 to your computer and use it in GitHub Desktop.
xmonad.hs
import XMonad
import System.Exit
import IO
import qualified Data.Map as M
import qualified XMonad.StackSet as W
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.ManageHelpers
import XMonad.Util.Run
import XMonad.Layout.Combo
import XMonad.Layout.Dishes
import XMonad.Layout.Gaps
import XMonad.Layout.Grid
import XMonad.Layout.LayoutHints
import XMonad.Layout.Minimize
import XMonad.Layout.NoBorders
import XMonad.Layout.PerWorkspace
import XMonad.Layout.Reflect
import XMonad.Layout.ResizableTile
import XMonad.Layout.SimplestFloat
import XMonad.Layout.Spacing
import XMonad.Layout.TwoPane
import XMonad.Layout.WindowNavigation
--------------------------------------
-- Options
-- -------
myBorderWidth = 2
myModMask = mod1Mask
--myNormalBorderColor = "#171717"
myNormalBorderColor = "#101010"
myFocusedBorderColor = "#3aab41"
myTerminal = "urxvt"
myWorkspaces = ["main","etc","misc"]
-- Keybinds
-- --------
myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
[ ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf)
, ((0, xK_F2 ), spawn $ XMonad.terminal conf)
, ((0, xK_F3 ), spawn "dmenu_run -p '>' -fa droidsansmono-8 -nb gray5 -nf gray70 -sb black -sf limegreen")
, ((modm, xK_p ), spawn "dmenu_run -p '>' -fa droidsansmono-8 -nb gray5 -nf gray70 -sb black -sf limegreen")
, ((modm .|. shiftMask, xK_p ), spawn "gmrun")
, ((modm .|. shiftMask, xK_c ), kill)
, ((modm, xK_space ), sendMessage NextLayout)
, ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf)
, ((modm, xK_n ), refresh)
, ((modm, xK_Tab ), windows W.focusDown)
, ((modm, xK_j ), windows W.focusDown)
, ((modm, xK_k ), windows W.focusUp )
, ((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 .|. shiftMask, xK_q ), io (exitWith ExitSuccess))
, ((modm, xK_q ), restart "xmonad" True)
, ((modm, xK_b ), sendMessage ToggleStruts)
, ((modm .|. shiftMask, xK_l ), sendMessage MirrorShrink)
, ((modm .|. shiftMask, xK_h ), sendMessage MirrorExpand)
, ((modm, xK_m ), withFocused minimizeWindow)
, ((modm .|. shiftMask, xK_m ), sendMessage RestoreNextMinimizedWin)
, ((modm, xK_g ), sendMessage $ ToggleGaps)
-- Manual Movements
-- ------ ---------
, ((modm .|. controlMask, xK_Right), sendMessage $ Move R)
, ((modm .|. controlMask, xK_Left ), sendMessage $ Move L)
, ((modm .|. controlMask, xK_Up ), sendMessage $ Move U)
, ((modm .|. controlMask, xK_Down ), sendMessage $ Move D)
-- Media keys
-- ----- ----
, ((0 , 0x1008ff16), spawn "mpc -q prev")
, ((0 , 0x1008ff14), spawn "mpc -q toggle")
, ((0 , 0x1008ff17), spawn "mpc -q next")
, ((modm , 0x1008ff11), spawn "mpc -q volume -5")
, ((modm , 0x1008ff13), spawn "mpc -q volume +5")
, ((modm , 0x1008ff12), spawn "/home/square/bin/headphones.sh")
, ((0 , 0x1008ff12), spawn "ossvol -t")
, ((0 , 0x1008ff11), spawn "ossvol -d")
, ((0 , 0x1008ff13), spawn "ossvol -i")
, ((0 , 0x1008ff93), spawn "showbatt")
]
++
[((m .|. modm, k), windows $ f i)
| (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
, (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
++
[((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f))
| (key, sc) <- zip [xK_w, xK_e, xK_r] [0..]
, (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
-- Mouse
-- -----
myMouseBindings (XConfig {XMonad.modMask = modMask}) = M.fromList $
[ ((modMask, button1), (\w -> focus w >> mouseMoveWindow w))
, ((modMask, button2), (\w -> focus w >> windows W.swapMaster))
, ((modMask, button3), (\w -> focus w >> mouseResizeWindow w))
]
myFocusFollowsMouse :: Bool
myFocusFollowsMouse = True
-- Layouts
-- -------
myLayout = minimize $ smartBorders $ avoidStruts gapped
where
tiled = ResizableTall 1 (1/100) (144/227) []
w1 = onWorkspace "etc" simplestFloat (w2)
w2 = reflectHoriz tiled
w3 = Mirror tiled
w4 = GridRatio (4/2)
lays = onWorkspace "misc" Full (w1) ||| tiled ||| w3 ||| w4
gapped = gaps [(U,5), (R,5), (D,5), (L,5)] (spacing 5 (lays))
-- nethack = (combineTwo (TwoPane (1/100) (147/227)) (Mirror (ResizableTall 1 (1/100) (3/4) [])) (Dishes 1 (1/6)))
-- Kludges
-- -------
myManageHook = composeAll
[ className =? "MPlayer" --> doFloat
, resource =? "gnome-mplayer" --> doFullFloat
, className =? "Gimp" --> doFloat
, className =? "feh" --> doFloat
, className =? "Xmessage" --> doFloat
, resource =? "quickhack" --> doFloat
, resource =? "desktop_window" --> doIgnore
, isFullscreen --> doFullFloat ]
-- Empties
-- -------
myLogHook = return ()
myStartupHook = return ()
-- XMobar PP
-- ------ --
myPP :: PP
myPP = defaultPP
{ ppCurrent = xmobarColor "#3aab41" ""
, ppSep = xmobarColor "#3a3a3a" "" " // "
, ppLayout = xmobarColor "#3aab41" ""
, ppUrgent = xmobarColor "red" ""
, ppTitle = xmobarColor "#acacab" "" . pad }
-- Get Ready
-- --- -----
myconfig = defaultConfig {
terminal = myTerminal,
focusFollowsMouse = myFocusFollowsMouse,
borderWidth = myBorderWidth,
modMask = myModMask,
workspaces = myWorkspaces,
normalBorderColor = myNormalBorderColor,
focusedBorderColor = myFocusedBorderColor,
keys = myKeys,
mouseBindings = myMouseBindings,
layoutHook = myLayout,
manageHook = myManageHook,
logHook = myLogHook,
startupHook = myStartupHook
}
-- Make it rain
-- ---- -- ----
main = do
-- xmonad myconfig
-- Don't use xmobar anymore.
xmobar <- spawnPipe "xmobar"
xmonad myconfig
{ logHook = dynamicLogWithPP $ myPP { ppOutput = hPutStrLn xmobar }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment