xmonad-contrib-0.16.999: Third party extensions for xmonad
CopyrightBrandon S Allbery KF8NH <allbery.b@gmail.com>
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 [                 opaque
                        , isUnfocused --> transparency 0.2

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 in the above example myFadeHook will render unfocused windows at 4/5 opacity and the focused window as opaque. This means that, in particular, the order in the above example is important.

The opaque hook above is optional, by the way, as any unmatched window will be opaque by default. If you want to make all windows a bit transparent by default, you can replace opaque with something like

transparency 0.93

at the top of myFadeHook.

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 $ def { {- ... -} } 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 Opacity Source #

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

data Opacity Source #


Instances details
Semigroup Opacity Source # 
Instance details

Defined in XMonad.Hooks.FadeWindows

Monoid Opacity Source # 
Instance details

Defined in XMonad.Hooks.FadeWindows

idFadeHook :: FadeHook Source #

The identity FadeHook, which renders windows opaque.

Predefined FadeHooks

opaque :: FadeHook Source #

Render a window fully opaque.

transparent :: FadeHook Source #

Render a window fully transparent.

invisible :: FadeHook Source #

An alias for opaque.

An alias for transparent.

transparency Source #


:: 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.

opacity Source #


:: 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 -> FadeHook Source #

An alias for transparency.

An alias for transparency.

handleEventHook for mapped/unmapped windows

fadeWindowsEventHook :: Event -> X All Source #

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 m Source #

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

Useful Querys for FadeHooks

isFloating :: Query Bool Source #

A Query to determine if a window is floating.

isUnfocused :: Query Bool Source #

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