Skip to content

Instantly share code, notes, and snippets.

@gnidan
Created May 23, 2014 23:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gnidan/a974cf8b18556be87d29 to your computer and use it in GitHub Desktop.
Save gnidan/a974cf8b18556be87d29 to your computer and use it in GitHub Desktop.
xmonad.hs
import XMonad
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageHelpers
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.UrgencyHook
import XMonad.Hooks.FadeInactive
import qualified XMonad.StackSet as W
import XMonad.Util.Run (spawnPipe, hPutStrLn)
import XMonad.Util.EZConfig
import XMonad.Util.WorkspaceCompare
import XMonad.Layout.Spacing
import XMonad.Layout.Accordion
import XMonad.Layout.NoBorders
import XMonad.Layout.PerWorkspace
import Control.Monad (filterM, liftM, join)
import Data.IORef
import Data.List
import qualified Data.Set as S
import qualified XMonad.StackSet as W
myWorkspaces = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
myKeys toggleFadeSet =
[ ("M-p", spawn "x=$(yeganesh -x -- -i -fn Verdana-12) && exec $x")
, ("M-q", spawn "killall xmobar; xmonad --recompile && xmonad --restart")
] ++
-- Workspace keys
[ (otherModMasks ++ "M-" ++ [key], action tag)
| (tag, key) <- zip myWorkspaces "1234567890"
, (otherModMasks, action) <- [ ("", windows . W.view) -- was W.greedyView
, ("S-", windows . W.shift)
]
] ++
-- Fading
[ ("M-f", withFocused $ io . modifyIORef toggleFadeSet . toggleFadeOut) ]
myLayout = tiled ||| {- Mirror tiled ||| -} accordion ||| Full
where
-- Add spacing between windows
tiled = smartSpacing 20 $ Tall nmaster delta ratio
accordion = smartSpacing 10 $ Accordion
nmaster = 1
ratio = 1/2
delta = 3/100
myFadeHook toggleFadeSet = fadeOutLogHook $ fadeIf (testCondition toggleFadeSet) 0.5
doNotFadeOutWindows = title =? "Call with " <||> className =? "Google-chrome-stable" <||> className =? "VLC"
testCondition :: IORef (S.Set Window) -> Query Bool
testCondition floats =
liftM not doNotFadeOutWindows <&&> isUnfocused
<&&> (join . asks $ \w -> liftX . io $ S.notMember w `fmap` readIORef floats)
toggleFadeOut :: Window -> S.Set Window -> S.Set Window
toggleFadeOut w s | w `S.member` s = S.delete w s
| otherwise = S.insert w s
myManageHook = composeAll
[ manageHook defaultConfig
] <+> manageDocks
myLogHook toggleFadeSet xmobar = composeAll
[ myFadeHook toggleFadeSet
, dynamicLogWithPP $ xmobarPP
{ ppOutput = hPutStrLn xmobar
, ppVisible = wrap "[" "]"
, ppSort = getSortByXineramaRule
}
]
myConfig toggleFadeSet xmobar = defaultConfig
{ terminal = "gnome-terminal"
, focusFollowsMouse = False
, manageHook = myManageHook
, layoutHook = avoidStruts $ myLayout
, logHook = myLogHook toggleFadeSet xmobar
, borderWidth = 1
}
main :: IO ()
main = do
xmobar <- spawnPipe "xmobar"
toggleFadeSet <- newIORef S.empty
xmonad $ myConfig toggleFadeSet xmobar
`additionalKeysP` myKeys toggleFadeSet
-- | The unexported X.H.DynamicLog.toggleStrutsKey
toggleStrutsKey :: XConfig l -> (KeyMask, KeySym)
toggleStrutsKey XConfig { modMask = modm } = (modm, xK_b)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment