Tomas Janousek f6b1e5dd88 X.U.ExtensibleConf: New helper module for extensible config
It's often difficult to make contrib modules work together. When one
depends on a functionality of another, it is often necessary to expose
lots of low-level functions and hooks and have the user combine these
into a complex configuration that works. This is error-prone, and
arguably a bad UX in general.

This commit presents a simple solution to that problem inspired by
"extensible state": extensible config. It allows contrib modules to
store custom configuration values inside XConfig. This lets them create
custom hooks, ensure they hook into xmonad core only once, and possibly
other use cases I haven't thought of yet.

This requires changes to xmonad core: https://github.com/xmonad/xmonad/pull/294

A couple examples of what this gives us:

* [X.H.RescreenHook](https://github.com/xmonad/xmonad-contrib/pull/460)
  can be made safe to apply multiple times, making it composable and
  usable in other contrib modules like X.H.StatusBar

* `withSB` from X.H.StatusBar can also be made safe to apply multiple
  times, and we can even provide an API [similar to what we had
  before](https://hackage.haskell.org/package/xmonad-contrib-0.16/docs/XMonad-Hooks-DynamicLog.html#v:statusBar)
  if we want (probably not, consistency with the new dynamic status bars
  of https://github.com/xmonad/xmonad-contrib/pull/463 is more important)

* The [X.H.EwmhDesktops refactor](https://github.com/xmonad/xmonad-contrib/pull/399)
  can possibly be made without breaking the `ewmh`/`ewmhFullscreen` API.
  And we will finally be able to have composable EWMH hooks.

Related: https://github.com/xmonad/xmonad/pull/294
2021-06-01 19:07:13 +01:00
2021-06-01 18:34:40 +01:00
2019-09-27 16:43:04 -04:00
2020-12-11 17:46:03 +05:30
2007-11-01 20:20:41 +00:00
2021-06-01 18:34:40 +01:00

xmonad-contrib: Third Party Extensions to the xmonad Window Manager

Tests Open Source Helpers

You need the ghc compiler and xmonad window manager installed in order to use these extensions.

For installation and configuration instructions, please see the xmonad website, the documents included with the xmonad source distribution, and the online haddock documentation.

Getting or Updating XMonadContrib

(To use git xmonad-contrib you must also use the git version of xmonad.)

Contributing

Haskell code contributed to this repo should live under the appropriate subdivision of the XMonad namespace (currently includes Actions, Config, Hooks, Layout, Prompt, and Util). For example, to use the Grid layout, one would import:

XMonad.Layout.Grid

For further details, see the documentation for the XMonad.Doc.Developing module, XMonad's CONTRIBUTING.md and the xmonad website.

License

Code submitted to the contrib repo is licensed under the same license as xmonad itself, with copyright held by the authors.

Description
Languages
Haskell 99.6%
C 0.2%
Shell 0.1%