Xmonad
xmonad is a dynamic window manager for the X Window System, noted for being written in the functional programming language Haskell.
Window manager
Begun in March 2007, version 0.1 was announced in April 2007 as 500 lines of code|lines] of Haskell. xmonad is a tiling window manager, akin to dwm, larswm, and StumpWM. It arranges windows in a non-overlapping pattern, and enables managing windows without using a mouse. xmonad is packaged and distributed on a wide range of Unix-like operating systems, including many Linux distributions, and Berkeley Software Distribution systems.While originally a clone of dwm, xmonad now supports features unavailable to dwm users such as per-workspace layout, tiling reflection, state preservation, layout mirroring, GNOME support and per-screen status bars; it can be customised by modifying an external configuration file and 'reloaded' while running. xmonad features have begun to influence other tiling window managers: dwm has borrowed "urgency hooks" from xmonad, has also included Xinerama support with release 4.8, and patches exist to reimplement xmonad's Fibonacci spiral layout.
Haskell project
In 2023 the man page stated:Since xmonad's inception, when its small source code size of 500 lines of code was advertised, it has grown to about 2,000 lines as of 2023.
Extensions to the core system, including emulation of other window managers, and unusual layout algorithms, such as window tiling based on the Fibonacci spiral—have been implemented by the active community and are available as a library.
Along with obviating the need for a mouse, the xmonad developers make heavy use of semi-formal methods and program derivation for improving reliability and enabling a total line of code count less than 1200, as of version 0.7; window manager properties are checked through use of QuickCheck. This emphasis makes xmonad unusual in a number of ways; besides being the first window manager written in Haskell, it is also the first to use the zipper data structure for automatically managing focus, and its core has been proven to be safe with respect to pattern matches, contributing further to reliability. The developers write:
xmonad is a tiling window manager for the X Window system, implemented, configured and dynamically extensible in Haskell. This demonstration presents the case that software dominated by side effects can be developed with the precision and efficiency we expect from Haskell by utilising purely functional data structures, an expressive type system, extended static checking and property-based testing. In addition, we describe the use of Haskell as an application configuration and extension language.
The code is separated into side-effect free code, and a thin wrapper for the side-effects. According to Alejandro Serrano Mena, there are two ways to implement domain-specific languages for actions in Haskell applications and libraries: "developing a combinator library" or "rolling your own monad", with xmonad being a successful example of the latter.
xmonad was regarded as one of the most well known Haskell projects in a 2013 functional programming book.
Reception
Linux Magazine included xmonad in a list of "My Top Resources of 2009". In 2012, How-To Geek described xmonad as having good, but complex, ability to be configured, and it was included in a 2013 list of eight desktop environments for Linux. Lifehacker wrote that the basic operations of xmonad's user interface can be taught using a small set of instructions. A high level of customisation and speed were noted by Network World, and in MakeUseOf xmonad was reviewed positively compared to Openbox.In 2016 Ars Technica said xmonad and Awesome had more advanced tiling ability than Cinnamon. In 2017 it was described as powerful, with application as a window manager for big data, while in an article on opensource.com on the other hand, dwm was chosen over xmonad. A TechRadar review of the "Best Linux desktop of 2018" said "If there's one desktop environment that stands out from all the others we have here, it's this one."
Due to the small number of source lines of code of the Xmonad application, the use of the functional programming">Functional programming">functional programming language Haskell, and recorded use of a rigorous software testing procedure, it is sometimes used as a baseline application in other research projects. This has included re-implementing xmonad using the Rocq proof assistant, a determination xmonad is an imperative program, and studies of package management relating to a Linux distribution NixOS that is based on the package manager Nix.
Works cited
- *
- *