xmonad-contrib-0.11.1: Third party extensions for xmonad

MaintainerBrandon S Allbery KF8NH
Safe HaskellNone




A more flexible and general compositing interface than FadeInactive. Windows can be selected and opacity specified by means of FadeHooks, which are very similar to ManageHooks and use the same machinery.



To use this module, make sure your xmonad core supports generalized ManageHooks (check the type of idHook; if it's ManageHook then your xmonad is too old) and then add fadeWindowsLogHook to your logHook and fadeWindowsEventHook to your handleEventHook:

     , logHook = fadeWindowsLogHook myFadeHook
     , handleEventHook = fadeWindowsEventHook
     {- ... -}

 myFadeHook = composeAll [isUnfocused --> transparency 0.2
                         ,                opaque

The above is like FadeInactive with a fade value of 0.2.

FadeHooks do not accumulate; instead, they compose from right to left like ManageHooks, so the above example myFadeHook will render unfocused windows at 4/5 opacity and the focused window as opaque. The opaque hook above is optional, by the way, as any unmatched window will be opaque by default.

This module is best used with XMonad.Hooks.MoreManageHelpers, which exports a number of Queries that can be used in either ManageHook or FadeHook.

Note that you need a compositing manager such as xcompmgr, dcompmgr, or cairo-compmgr for window fading to work. If you aren't running a compositing manager, the opacity will be recorded but won't take effect until a compositing manager is started.

For more detailed instructions on editing the logHook see:


For more detailed instructions on editing the handleEventHook, see:

XMonad.Doc.Extending (which sadly doesnt exist at the time of writing...)

WARNING: This module is very good at triggering bugs in compositing managers. Symptoms range from windows not being repainted until the compositing manager is restarted or the window is unmapped and remapped, to the machine becoming sluggish until the compositing manager is restarted (at which point a popup/dialog will suddenly appear; apparently it's getting into a tight loop trying to fade the popup in). I find it useful to have a key binding to restart the compositing manager; for example,

main = xmonad $ defaultConfig { {- ... -} } additionalKeysP [(M-S-4,spawn killall xcompmgr; sleep 1; xcompmgr -cCfF &)] {- ... -} ]

(See XMonad.Util.EZConfig for additionalKeysP.)

The logHook for window fading

fadeWindowsLogHook :: FadeHook -> X ()Source

A logHook to fade windows under control of a FadeHook, which is similar to but not identical to ManageHook.

The FadeHook

type FadeHook = Query OpacitySource

A FadeHook is similar to a ManageHook, but records window opacity.

data Opacity Source


idFadeHook :: FadeHookSource

The identity FadeHook, which renders windows opaque.

Predefined FadeHooks

opaque :: FadeHookSource

Render a window fully opaque.

transparent :: FadeHookSource

Render a window fully transparent.

invisible :: FadeHookSource

An alias for opaque.

An alias for transparent.



:: Rational

The window's transparency as a fraction. transparency 1 is the same as transparent, whereas transparency 0 is the same as opaque.

-> FadeHook 

Specify a window's transparency.



:: Rational

The opacity of a window as a fraction. opacity 1 is the same as opaque, whereas opacity 0 is the same as transparent.

-> FadeHook 

Specify a window's opacity; this is the inverse of transparency.

fadeTo :: Rational -> FadeHookSource

An alias for transparency.

An alias for transparency.

handleEventHook for mapped/unmapped windows

fadeWindowsEventHook :: Event -> X AllSource

A handleEventHook to handle fading and unfading of newly mapped or unmapped windows; this avoids problems with layouts such as XMonad.Layout.Full or XMonad.Layout.Tabbed. This hook may also be useful with XMonad.Hooks.FadeInactive.

doF for simple hooks

doS :: Monoid m => m -> Query mSource

Like doF, but usable with ManageHook-like hooks that aren't Query wrapped around transforming functions (Endo).

Useful Querys for FadeHooks

isFloating :: Query BoolSource

A Query to determine if a window is floating.

isUnfocused :: Query BoolSource

Returns True if the window doesn't have the focus.