Skip to content

Instantly share code, notes, and snippets.

@dcolish
Created April 11, 2013 22:26
Show Gist options
  • Save dcolish/5367708 to your computer and use it in GitHub Desktop.
Save dcolish/5367708 to your computer and use it in GitHub Desktop.
--
--
--
import qualified Data.Map as M
import Data.Monoid
import Data.Ratio
import Control.Monad
import XMonad
import XMonad.Actions.CycleWS
import XMonad.Actions.FloatKeys
import XMonad.Actions.Warp
import XMonad.Actions.WithAll
import XMonad.Hooks.DynamicHooks
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ICCCMFocus
import XMonad.Hooks.FadeInactive
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.SetWMName
import XMonad.Hooks.UrgencyHook
import XMonad.Layout.DecorationMadness
import XMonad.Layout.NoBorders
import XMonad.Layout.LayoutHints
import XMonad.Layout.PerWorkspace
import XMonad.Layout.ResizableTile
import XMonad.Layout.Reflect
import XMonad.Layout.IM
import XMonad.Layout.Tabbed
import XMonad.Layout.PerWorkspace (onWorkspace)
import XMonad.Layout.Grid
import XMonad.Layout.Magnifier
import XMonad.Layout.Circle
import XMonad.Util.Loggers
import XMonad.Util.Run(spawnPipe)
import XMonad.Util.EZConfig(additionalKeys)
import XMonad.Actions.WindowBringer
import XMonad.ManageHook
import XMonad.Prompt
import XMonad.Prompt.Shell
import XMonad.Util.Run
import Graphics.X11
import System.Exit
import System.IO
import qualified XMonad.Actions.FlexibleResize as Flex
import qualified XMonad.StackSet as W
myTerminal = "/usr/bin/xterm"
myFocusFollowsMouse :: Bool
myFocusFollowsMouse = True
myBorderWidth = 1
myModMask = mod4Mask
myWorkspaces = ["1","2","3","4","5","6","7","8","9"]
myNormalBorderColor = "#333333"
myFocusedBorderColor = "#1793D1"
myNormalFGColor = "#ffffff"
myNormalBGColor = "#1793D1"
myFont = "'-xos4-terminus-bold-r-normal--12-*-*-*-*-*-*-'"
isVisible :: X (WindowSpace -> Bool)
isVisible = do
vs <- gets (map (W.tag . W.workspace) . W.visible . windowset)
return (\w -> (W.tag w) `elem` vs)
nextNonEmptyWS = moveTo Next (WSIs (liftM (not .) isVisible))
prevNonEmptyWS = moveTo Prev (WSIs (liftM (not .) isVisible))
myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
[ ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf)
, ((modm, xK_p ), spawn "exe=`dmenu_path | dmenu` && eval \"exec $exe\"")
, ((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_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 .|. shiftMask, xK_Left ), shiftToPrev >> nextWS)
, ((modm .|. shiftMask, xK_Right ), shiftToNext >> nextWS)
, ((modm, xK_Left ), prevNonEmptyWS)
, ((modm, xK_Right ), nextNonEmptyWS)
, ((modm, xK_h ), sendMessage Shrink)
, ((modm, xK_l ), sendMessage Expand)
, ((modm, xK_b ), sendMessage ToggleStruts)
, ((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 ), spawn "xmonad --recompile; xmonad --restart")
, ((0, xK_Print ), unsafeSpawn "scrot -q 30 -e 'mv $f ~/Pictures/screenshots' '%Y-%m_%d_$wx$h.png'")
, ((0, 0x1008ff2d), unsafeSpawn "xscreensaver-command --lock")
, ((0 , 0x1008ff11), spawn "aumix -v -2")
, ((0 , 0x1008ff13), spawn "aumix -v +2")
-- , ((0 , xK_F11), spawn "aumix -v -2")
-- , ((0 , xK_F12), spawn "aumix -v +2")
, ((0 , 0x1008ff12), spawn "amixer -q set Master toggle")
]
++
[((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)]]
myMouseBindings (XConfig {XMonad.modMask = modm}) = M.fromList $
[ ((modm, button1), (\w -> focus w >> mouseMoveWindow w
>> windows W.shiftMaster))
, ((modm, button2), (\w -> focus w >> windows W.shiftMaster))
, ((modm, button3), (\w -> focus w >> mouseResizeWindow w
>> windows W.shiftMaster)) ]
myTheme = defaultTheme { decoHeight = 16
, activeColor = "#a6c292"
, activeBorderColor = "#a6c292"
, activeTextColor = "#000000"
, inactiveBorderColor = "#000000" }
myLayoutHook = avoidStruts (tiled ||| Mirror tiled ||| Circle ||| magnify Grid ||| Full ||| floatSimpleDefault ||| accordionSimpleTabbed )
where
tiled = Tall nmaster delta ratio
nmaster = 1
delta = 3/100
ratio = 1/2
magnify = magnifiercz (12%10)
myManageHook = composeAll
[ manageDocks <+> manageHook defaultConfig
, className =? "MPlayer" --> doFloat
, className =? "VLC" --> doFloat
, className =? "Gimp" --> doFloat
, className =? "Firefox" --> doShift "2"
, (className =? "Firefox" <&&> resource =? "Dialog") --> doFloat
, className =? "Shiretoko" --> doShift "2"
, (className =? "Shiretoko" <&&> resource =? "Dialog") --> doFloat
, resource =? "desktop_window" --> doIgnore
, title =? "Compose: (no subject)" --> doFloat]
myEventHook = mempty
myLogHook :: Handle -> X ()
myLogHook h = dynamicLogWithPP $ defaultPP
{ ppCurrent = dzenColor "blue" "black" . pad
, ppVisible = dzenColor "lightblue" "" . pad
, ppHidden = dzenColor "white" "" . pad
, ppHiddenNoWindows = dzenColor "#1793D1" "" . pad
, ppUrgent = dzenColor "" "red"
, ppWsSep = ""
, ppSep = " :: "
, ppLayout = dzenColor "lightblue" "" .
(\ x -> case x of
"Tall" -> "[]="
"Mirror Tall" -> "TTT"
"Full" -> "<M>"
"Grid" -> "+++"
"Spiral" -> "(@)"
"Accordion" -> "Acc"
"Tabbed Simplest" -> "Tab"
"Tabbed Bottom Simplest" -> "TaB"
"SimplestFloat" -> "><>"
"IM" -> "IM "
"Dishes 2 (1%6)" -> "Dsh"
_ -> pad x
)
, ppTitle = (" " ++) . dzenColor "lightblue" "" . dzenEscape
, ppOutput = hPutStrLn h
}
-- >> takeTopFocus
myStartupHook = do
setWMName "LG3D"
return ()
--
myStatusBar :: String
myStatusBar = "sleep 1 && /usr/bin/dzen2 -fn " ++ myFont
++ " -bg '#000000' -h 22 -sa c -e 'onstart=lower' -ta l"
conkyDzen :: String
conkyDzen = "conky -c ~/.xmonad/conkyrcdzen | "
++"/usr/bin/dzen2 -fn " ++ myFont
++ " -bg '#000000' -y -1 -h 22 -sa r -e '' -ta c"
main = do
workspaceBarPipe <- spawnPipe myStatusBar
conkyBarPipe <- spawnPipe conkyDzen
xmonad $ defaultConfig {
terminal = myTerminal,
focusFollowsMouse = myFocusFollowsMouse,
borderWidth = myBorderWidth,
modMask = myModMask,
-- numlockMask = myNumlockMask,
workspaces = myWorkspaces,
normalBorderColor = myNormalBorderColor,
focusedBorderColor = myFocusedBorderColor,
keys = myKeys,
mouseBindings = myMouseBindings,
layoutHook = myLayoutHook,
manageHook = myManageHook,
handleEventHook = myEventHook,
logHook = myLogHook workspaceBarPipe,
-- takeTopFocus ,
startupHook = myStartupHook
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment