Created
May 23, 2014 23:42
-
-
Save gnidan/a974cf8b18556be87d29 to your computer and use it in GitHub Desktop.
xmonad.hs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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