xmonad-contrib/xmonad-contrib.cabal
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

435 lines
19 KiB
Plaintext

name: xmonad-contrib
version: 0.16.999
homepage: http://xmonad.org/
synopsis: Third party extensions for xmonad
description:
Third party tiling algorithms, configurations and scripts to xmonad,
a tiling window manager for X.
.
For an introduction to building, configuring and using xmonad
extensions, see "XMonad.Doc". In particular:
.
"XMonad.Doc.Configuring", a guide to configuring xmonad
.
"XMonad.Doc.Extending", using the contributed extensions library
.
"XMonad.Doc.Developing", introduction to xmonad internals and writing
your own extensions.
.
category: System
license: BSD3
license-file: LICENSE
author: Spencer Janssen & others
maintainer: xmonad@haskell.org
extra-source-files: README.md CHANGES.md scripts/generate-configs scripts/run-xmonad.sh
scripts/window-properties.sh
scripts/xinitrc scripts/xmonad-acpi.c
scripts/xmonad-clock.c
XMonad/Config/dmwit.xmobarrc
XMonad/Config/Example.hs
cabal-version: >= 1.8
build-type: Simple
bug-reports: https://github.com/xmonad/xmonad-contrib/issues
tested-with: GHC == 8.4.4 || == 8.6.5 || == 8.8.4 || == 8.10.3 || == 9.0.1
source-repository head
type: git
location: https://github.com/xmonad/xmonad-contrib
flag use_xft
description: Use Xft to render text
flag pedantic
description: Be pedantic (-Werror and the like)
default: False
manual: True
library
build-depends: base >= 4.9 && < 5,
bytestring >= 0.10 && < 0.11,
containers >= 0.5 && < 0.7,
directory,
filepath,
time >= 1.8 && < 1.12,
process,
random,
mtl >= 1 && < 3,
unix,
X11 >= 1.10 && < 1.11,
xmonad >= 0.16.999 && < 0.18,
utf8-string
ghc-options: -Wall -Wno-unused-do-bind
if flag(pedantic)
ghc-options: -Werror -Wwarn=deprecations
-- Keep this in sync with the oldest version in 'tested-with'
if impl(ghc > 8.4.4)
-- don't treat unused-imports warning as errors, they may be necessary
-- for compatibility with older versions of base (or other deps)
ghc-options: -Wwarn=unused-imports
if flag(use_xft)
build-depends: X11-xft >= 0.2
cpp-options: -DXFT
exposed-modules: XMonad.Actions.AfterDrag
XMonad.Actions.BluetileCommands
XMonad.Actions.Commands
XMonad.Actions.ConstrainedResize
XMonad.Actions.CopyWindow
XMonad.Actions.CycleRecentWS
XMonad.Actions.CycleSelectedLayouts
XMonad.Actions.CycleWS
XMonad.Actions.CycleWindows
XMonad.Actions.CycleWorkspaceByScreen
XMonad.Actions.DeManage
XMonad.Actions.DwmPromote
XMonad.Actions.DynamicProjects
XMonad.Actions.DynamicWorkspaceGroups
XMonad.Actions.DynamicWorkspaceOrder
XMonad.Actions.DynamicWorkspaces
XMonad.Actions.EasyMotion
XMonad.Actions.FindEmptyWorkspace
XMonad.Actions.FlexibleManipulate
XMonad.Actions.FlexibleResize
XMonad.Actions.FloatKeys
XMonad.Actions.FloatSnap
XMonad.Actions.FocusNth
XMonad.Actions.GridSelect
XMonad.Actions.GroupNavigation
XMonad.Actions.KeyRemap
XMonad.Actions.Launcher
XMonad.Actions.LinkWorkspaces
XMonad.Actions.MessageFeedback
XMonad.Actions.Minimize
XMonad.Actions.MouseGestures
XMonad.Actions.MouseResize
XMonad.Actions.Navigation2D
XMonad.Actions.NoBorders
XMonad.Actions.OnScreen
XMonad.Actions.PerWindowKeys
XMonad.Actions.PerWorkspaceKeys
XMonad.Actions.PhysicalScreens
XMonad.Actions.Plane
XMonad.Actions.Prefix
XMonad.Actions.Promote
XMonad.Actions.RandomBackground
XMonad.Actions.RotSlaves
XMonad.Actions.RotateSome
XMonad.Actions.Search
XMonad.Actions.ShowText
XMonad.Actions.Sift
XMonad.Actions.SimpleDate
XMonad.Actions.SinkAll
XMonad.Actions.SpawnOn
XMonad.Actions.Submap
XMonad.Actions.SwapPromote
XMonad.Actions.SwapWorkspaces
XMonad.Actions.TagWindows
XMonad.Actions.TiledWindowDragging
XMonad.Actions.TopicSpace
XMonad.Actions.TreeSelect
XMonad.Actions.UpdateFocus
XMonad.Actions.UpdatePointer
XMonad.Actions.Warp
XMonad.Actions.WindowBringer
XMonad.Actions.WindowGo
XMonad.Actions.WindowMenu
XMonad.Actions.WindowNavigation
XMonad.Actions.WithAll
XMonad.Actions.Workscreen
XMonad.Actions.WorkspaceCursors
XMonad.Actions.WorkspaceNames
XMonad.Config.Arossato
XMonad.Config.Azerty
XMonad.Config.Bepo
XMonad.Config.Bluetile
XMonad.Config.Desktop
XMonad.Config.Dmwit
XMonad.Config.Droundy
XMonad.Config.Gnome
XMonad.Config.Kde
XMonad.Config.Mate
XMonad.Config.Prime
XMonad.Config.Sjanssen
XMonad.Config.Xfce
XMonad.Doc
XMonad.Doc.Configuring
XMonad.Doc.Developing
XMonad.Doc.Extending
XMonad.Hooks.CurrentWorkspaceOnTop
XMonad.Hooks.DebugEvents
XMonad.Hooks.DebugKeyEvents
XMonad.Hooks.DebugStack
XMonad.Hooks.DynamicBars
XMonad.Hooks.DynamicHooks
XMonad.Hooks.DynamicIcons
XMonad.Hooks.DynamicLog
XMonad.Hooks.DynamicProperty
XMonad.Hooks.EwmhDesktops
XMonad.Hooks.FadeInactive
XMonad.Hooks.FadeWindows
XMonad.Hooks.FloatNext
XMonad.Hooks.Focus
XMonad.Hooks.ICCCMFocus
XMonad.Hooks.InsertPosition
XMonad.Hooks.ManageDebug
XMonad.Hooks.ManageDocks
XMonad.Hooks.ManageHelpers
XMonad.Hooks.Minimize
XMonad.Hooks.Place
XMonad.Hooks.PositionStoreHooks
XMonad.Hooks.RefocusLast
XMonad.Hooks.RestoreMinimized
XMonad.Hooks.ScreenCorners
XMonad.Hooks.Script
XMonad.Hooks.ServerMode
XMonad.Hooks.SetWMName
XMonad.Hooks.StatusBar
XMonad.Hooks.StatusBar.PP
XMonad.Hooks.ToggleHook
XMonad.Hooks.UrgencyHook
XMonad.Hooks.WallpaperSetter
XMonad.Hooks.WindowSwallowing
XMonad.Hooks.WorkspaceByPos
XMonad.Hooks.WorkspaceHistory
XMonad.Hooks.XPropManage
XMonad.Layout.Accordion
XMonad.Layout.AutoMaster
XMonad.Layout.AvoidFloats
XMonad.Layout.BinaryColumn
XMonad.Layout.BinarySpacePartition
XMonad.Layout.BorderResize
XMonad.Layout.BoringWindows
XMonad.Layout.ButtonDecoration
XMonad.Layout.CenteredMaster
XMonad.Layout.Circle
XMonad.Layout.Column
XMonad.Layout.Combo
XMonad.Layout.ComboP
XMonad.Layout.Cross
XMonad.Layout.Decoration
XMonad.Layout.DecorationAddons
XMonad.Layout.DecorationMadness
XMonad.Layout.Dishes
XMonad.Layout.DragPane
XMonad.Layout.DraggingVisualizer
XMonad.Layout.Drawer
XMonad.Layout.Dwindle
XMonad.Layout.DwmStyle
XMonad.Layout.FixedColumn
XMonad.Layout.Fullscreen
XMonad.Layout.Gaps
XMonad.Layout.Grid
XMonad.Layout.GridVariants
XMonad.Layout.Groups
XMonad.Layout.Groups.Examples
XMonad.Layout.Groups.Helpers
XMonad.Layout.Groups.Wmii
XMonad.Layout.Hidden
XMonad.Layout.HintedGrid
XMonad.Layout.HintedTile
XMonad.Layout.IM
XMonad.Layout.IfMax
XMonad.Layout.ImageButtonDecoration
XMonad.Layout.IndependentScreens
XMonad.Layout.LayoutBuilder
XMonad.Layout.LayoutBuilderP
XMonad.Layout.LayoutCombinators
XMonad.Layout.LayoutHints
XMonad.Layout.LayoutModifier
XMonad.Layout.LayoutScreens
XMonad.Layout.LimitWindows
XMonad.Layout.MagicFocus
XMonad.Layout.Magnifier
XMonad.Layout.Master
XMonad.Layout.Maximize
XMonad.Layout.MessageControl
XMonad.Layout.Minimize
XMonad.Layout.Monitor
XMonad.Layout.Mosaic
XMonad.Layout.MosaicAlt
XMonad.Layout.MouseResizableTile
XMonad.Layout.MultiColumns
XMonad.Layout.MultiDishes
XMonad.Layout.MultiToggle
XMonad.Layout.MultiToggle.Instances
XMonad.Layout.MultiToggle.TabBarDecoration
XMonad.Layout.Named
XMonad.Layout.NoBorders
XMonad.Layout.NoFrillsDecoration
XMonad.Layout.OnHost
XMonad.Layout.OneBig
XMonad.Layout.PerScreen
XMonad.Layout.PerWorkspace
XMonad.Layout.PositionStoreFloat
XMonad.Layout.Reflect
XMonad.Layout.Renamed
XMonad.Layout.ResizableThreeColumns
XMonad.Layout.ResizableTile
XMonad.Layout.ResizeScreen
XMonad.Layout.Roledex
XMonad.Layout.ShowWName
XMonad.Layout.SimpleDecoration
XMonad.Layout.SimpleFloat
XMonad.Layout.Simplest
XMonad.Layout.SimplestFloat
XMonad.Layout.SortedLayout
XMonad.Layout.Spacing
XMonad.Layout.Spiral
XMonad.Layout.Square
XMonad.Layout.StackTile
XMonad.Layout.StateFull
XMonad.Layout.Stoppable
XMonad.Layout.SubLayouts
XMonad.Layout.TabBarDecoration
XMonad.Layout.Tabbed
XMonad.Layout.TallMastersCombo
XMonad.Layout.ThreeColumns
XMonad.Layout.ToggleLayouts
XMonad.Layout.TrackFloating
XMonad.Layout.TwoPane
XMonad.Layout.TwoPanePersistent
XMonad.Layout.VoidBorders
XMonad.Layout.WindowArranger
XMonad.Layout.WindowNavigation
XMonad.Layout.WindowSwitcherDecoration
XMonad.Layout.WorkspaceDir
XMonad.Layout.ZoomRow
XMonad.Prelude
XMonad.Prompt
XMonad.Prompt.AppLauncher
XMonad.Prompt.AppendFile
XMonad.Prompt.ConfirmPrompt
XMonad.Prompt.DirExec
XMonad.Prompt.Directory
XMonad.Prompt.Email
XMonad.Prompt.FuzzyMatch
XMonad.Prompt.Input
XMonad.Prompt.Layout
XMonad.Prompt.Man
XMonad.Prompt.OrgMode
XMonad.Prompt.Pass
XMonad.Prompt.RunOrRaise
XMonad.Prompt.Shell
XMonad.Prompt.Ssh
XMonad.Prompt.Theme
XMonad.Prompt.Unicode
XMonad.Prompt.Window
XMonad.Prompt.Workspace
XMonad.Prompt.XMonad
XMonad.Prompt.Zsh
XMonad.Util.ActionCycle
XMonad.Util.ClickableWorkspaces
XMonad.Util.Cursor
XMonad.Util.CustomKeys
XMonad.Util.DebugWindow
XMonad.Util.Dmenu
XMonad.Util.DynamicScratchpads
XMonad.Util.Dzen
XMonad.Util.EZConfig
XMonad.Util.ExclusiveScratchpads
XMonad.Util.ExtensibleConf
XMonad.Util.ExtensibleState
XMonad.Util.Font
XMonad.Util.Hacks
XMonad.Util.Image
XMonad.Util.Invisible
XMonad.Util.Loggers
XMonad.Util.Loggers.NamedScratchpad
XMonad.Util.Minimize
XMonad.Util.NamedActions
XMonad.Util.NamedScratchpad
XMonad.Util.NamedWindows
XMonad.Util.NoTaskbar
XMonad.Util.Paste
XMonad.Util.PositionStore
XMonad.Util.PureX
XMonad.Util.Rectangle
XMonad.Util.RemoteWindows
XMonad.Util.Replace
XMonad.Util.Run
XMonad.Util.Scratchpad
XMonad.Util.SessionStart
XMonad.Util.SpawnNamedPipe
XMonad.Util.SpawnOnce
XMonad.Util.Stack
XMonad.Util.StringProp
XMonad.Util.Themes
XMonad.Util.Timer
XMonad.Util.TreeZipper
XMonad.Util.Types
XMonad.Util.Ungrab
XMonad.Util.WindowProperties
XMonad.Util.WindowState
XMonad.Util.WorkspaceCompare
XMonad.Util.XSelection
XMonad.Util.XUtils
test-suite tests
type: exitcode-stdio-1.0
main-is: Main.hs
other-modules: ManageDocks
NoBorders
RotateSome
Selective
SwapWorkspaces
XPrompt
Instances
Utils
ExtensibleConf
XMonad.Actions.CycleWS
XMonad.Actions.FocusNth
XMonad.Actions.PhysicalScreens
XMonad.Actions.RotateSome
XMonad.Actions.SwapWorkspaces
XMonad.Actions.TagWindows
XMonad.Hooks.ManageDocks
XMonad.Hooks.WorkspaceHistory
XMonad.Layout.LayoutModifier
XMonad.Layout.LimitWindows
XMonad.Layout.NoBorders
XMonad.Prelude
XMonad.Prompt
XMonad.Prompt.Shell
XMonad.Util.ExtensibleConf
XMonad.Util.ExtensibleState
XMonad.Util.Font
XMonad.Util.Image
XMonad.Util.PureX
XMonad.Util.Rectangle
XMonad.Util.Run
XMonad.Util.Stack
XMonad.Util.Types
XMonad.Util.WindowProperties
XMonad.Util.WorkspaceCompare
XMonad.Util.XSelection
XMonad.Util.XUtils
hs-source-dirs: tests, .
build-depends: base
, QuickCheck >= 2
, X11 >= 1.10 && < 1.11
, containers
, directory
, hspec >= 2.4.0 && < 3
, mtl
, process
, unix
, utf8-string
, xmonad >= 0.16.999 && < 0.18
cpp-options: -DTESTING
ghc-options: -Wall -Wno-unused-do-bind
if flag(pedantic)
ghc-options: -Werror -Wwarn=deprecations
-- Keep this in sync with the oldest version in 'tested-with'
if impl(ghc > 8.4.4)
-- don't treat unused-imports warning as errors, they may be necessary
-- for compatibility with older versions of base (or other deps)
ghc-options: -Wwarn=unused-imports