xmonad
{{Short description|Dynamic window manager for X Window System}}
{{Lowercase title}}
{{Infobox software
| name = xmonad
| logo = Xmonad-2022-new-logo.svg
| screenshot = Xmonad screenshot.png
| screenshot_alt = XMonad in tiling mode with two URXVT terminals and pcmanFM open
| caption = xmonad in tiling mode
| author = Spencer Janssen, Don Stewart, Jason Creighton
| released = {{Start date and age|2007|03|06}}{{cite web |url=https://github.com/xmonad/xmonad/commit/b2c14305a25ef954f26edfdc29c63a4875f58165 |title=Initial import: xmonad/xmonad@b2c1430 |website=GitHub}}
| latest release version = {{wikidata|property|preferred|references|edit|Q72914|P348|P548=Q2804309}}
| latest release date = {{wikidata|qualifier|preferred|single|Q72914|P348|P548=Q2804309|P577}}
| latest preview version = {{wikidata|property|preferred|references|edit|Q72914|P348|P548=Q51930650}}
| latest preview date = {{wikidata|qualifier|preferred|single|Q72914|P348|P548=Q51930650|P577}}
| programming language = Haskell
| operating system = POSIX compatible
| platform = Cross-platform; requires an X Window System and GHC
| language = English
| genre = Window manager
| license = BSD 3-clause
}}
File:Xmonad-screen-triplehead-dons.png support: tiling on three screens simultaneously.]]
File:Xmonad-tall-status-dons.png]]
xmonad is a dynamic window manager (tiling) 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{{Cite mailing list |url=https://mail.haskell.org/pipermail/xmonad/2007-April/000093.html |title=Announce: xmonad 0.1 |date=2007-04-22 |access-date=2021-08-30 |mailing-list=Haskell-cafe |last=Janssen |first=Spencer |archive-url=https://web.archive.org/web/20210830165259/https://mail.haskell.org/pipermail/xmonad/2007-April/000093.html |archive-date=2021-08-30 |url-status=live}} in April 2007 as 500 lines of Haskell{{cite web
|url = http://www.osnews.com/story/17744/Xmonad-a-Tiling-Window-Manager-Written-in-Haskell
|title = Xmonad: a Tiling Window Manager Written in Haskell
|publisher = OSNews
|date = 2007-05-22
|access-date = 2007-09-23
|archive-url = https://web.archive.org/web/20080411134807/http://www.osnews.com/story/17744/Xmonad-a-Tiling-Window-Manager-Written-in-Haskell/
|archive-date = 2008-04-11
|url-status = live
}} (which have since grown to 2000 lines). 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 the mouse. xmonad is packaged and distributed on a wide range of Unix-like operating systems, such as a large number of Linux distributions, and Berkeley Software Distribution (BSD) systems.
While originally a clone of dwm (derivative in areas such as default keybindings), xmonad now supports features not available to dwm users{{cite web
|url = http://www.osnews.com/story.php/18009/Keyboard-Driven-Environments-Open-a-New-Window/
|title = Keyboard-Driven Environments Open a New Window
|publisher = OSNews
|date = 2007-05-31
|access-date = 2007-05-31
|archive-url = https://web.archive.org/web/20070604030724/http://www.osnews.com/story.php/18009/Keyboard-Driven-Environments-Open-a-New-Window
|archive-date = 2007-06-04
|url-status = live
|url = http://osnews.com/story.php/18794/xmonad-0.4-Released
|title = xmonad 0.4 Released
|publisher = OSNews
|date = 2007-10-19
|access-date = 2007-12-23
|archive-url = https://web.archive.org/web/20071222205622/http://www.osnews.com/story.php/18794/xmonad-0.4-Released
|archive-date = 2007-12-22
|url-status = live
}} 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.Through a combination of swiftly re-compiling and then execing the new xmonad binary; see {{cite web
|url = http://sequence.complete.org/hwn/20070427
|title = Haskell Weekly News: April 27, 2007
|publisher = Haskell Weekly News
|date = 2007-04-27
|access-date = 2007-05-23
|archive-url = https://web.archive.org/web/20070529082510/http://sequence.complete.org/hwn/20070427
|archive-date = 2007-05-29
|url-status = dead
}} xmonad features have begun to influence other tiling window managers: dwm has borrowed "urgency hooks" from xmonad,See the [http://thread.gmane.org/gmane.comp.window-managers.dwm/4325/focus=4330 developer discussion] {{Webarchive |url=https://web.archive.org/web/20180918012419/http://thread.gmane.org/gmane.comp.window-managers.dwm/4325/focus=4330 |date=2018-09-18}} on the dwm mailing list has also included Xinerama support (for multihead displays) with release 4.8, and patches exist to reimplement xmonad's Fibonacci layout.[http://dwm.suckless.org/patches/fibonacci Suckless.org: Fibonacci layouts patch] {{Webarchive |url=https://web.archive.org/web/20130413071256/http://dwm.suckless.org/patches/fibonacci |date=2013-04-13}} to dwm
Haskell project
{{main|Haskell}}
In 2023 the man page stated:
By utilising the expressivity of a modern functional language with a rich static type system, xmonad provides a complete, featureful window manager [...], with an emphasis on correctness and robustness. Internal properties of the window manager are checked using a combination of static guarantees provided by the type system, and type-based automated testing. A benefit of this is that the code is simple to understand, and easy to modify.{{cite web|url = http://www.xmonad.org/manpage.html
|title = Manpage of xmonad
|publisher = xmonad.org
|date = 2021-10-27
|access-date = 2023-09-01
|archive-url = https://web.archive.org/web/20230813203216/https://xmonad.org/manpage.html
|archive-date = 2023-08-13
|url-status = live
}}
Since xmonad's inception, when its small code size of 500 lines of code was advertised, it has grown to ca. 2000 lines in 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 communityxmonad users generate significant traffic in the [http://gogloom.com/FreeNode/xmonad/ #xmonad] {{Webarchive |url=https://web.archive.org/web/20071229233810/http://gogloom.com/FreeNode/xmonad/ |date=2007-12-29}} Internet Relay Chat (IRC) channel and the xmonad mailing list; also, there are many commits to the extension library from non-core devs (see the [http://xmonad.org/statistics.html xmonad statistic page] {{Webarchive |url=https://web.archive.org/web/20071223092001/http://xmonad.org/statistics.html |date=2007-12-23}}) and are available as a library.{{cite web
|url = http://xmonad.org/contrib.html
|title = xmonad: Contributed code
|publisher = xmonad.org
|date = 2007-05-22
|access-date = 2007-05-23
|archive-url = https://web.archive.org/web/20070916213057/http://xmonad.org/contrib.html
|archive-date = 2007-09-16
|url-status = live
}}
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 (such as the behavior of window focus) 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,{{cite web |url=http://neilmitchell.blogspot.com/2007/05/does-xmonad-crash.html |title=Neil Mitchell's Haskell Blog: Does XMonad crash? |first=Neil |last=Mitchell |date=9 May 2007 |access-date=2007-05-17 |archive-url=https://web.archive.org/web/20070514162938/http://neilmitchell.blogspot.com/2007/05/does-xmonad-crash.html |archive-date=2007-05-14 |url-status=live}} 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.Stewart & Janssen, 2007
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 of implementing 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.{{cite book |url=https://books.google.com/books?id=IZsQAwAAQBAJ |title=Beginning Haskell: A Project-Based Approach |first=Alejandro Serrano |last=Mena |date=5 March 2014 |publisher=Apress |via=Google Books |page=385 |isbn=9781430262510 |access-date=2018-09-24 |archive-url=https://web.archive.org/web/20180924224747/https://books.google.co.uk/books?id=IZsQAwAAQBAJ |archive-date=2018-09-24 |url-status=live}}
xmonad was regarded as one of the most well known Haskell projects in a 2013 functional programming book.{{cite book |url=https://books.google.com/books?id=GZZbAAAAQBAJ |title=Das Curry-Buch – Funktional programmieren lernen mit JavaScript |first1=Jens |last1=Ohlig |first2=Hannes |last2=Mehnert |first3=Stefanie |last3=Schirmer |date=24 September 2018 |page=177 |publisher=O'Reilly Germany |via=Google Books |isbn=978-3868993691}}
Reception
Linux Magazine included xmonad in a list of "My Top Resources of 2009".{{cite news |last=Zawodny |first=Jeremy |date=2009-12-06 |title=My Top Resources of 2009 |work=Linux Magazine |url=http://www.linux-mag.com/id/7639/ |url-status=usurped |archive-url=https://web.archive.org/web/20180923123856/http://www.linux-mag.com/id/7639/ |archive-date=2018-09-23 |access-date=2018-09-23}} In 2012, How-To Geek described xmonad as having good, but complex, ability to be configured,{{cite web |url=https://www.howtogeek.com/114728/how-to-use-xmonad-a-tiling-window-manager-for-linux/ |title=How to Use Xmonad, a Tiling Window Manager for Linux |first=Chris |last=Hoffman |date=2012-05-24 |publisher=How-To Geek |access-date=2018-09-17 |archive-url=https://web.archive.org/web/20180918012122/https://www.howtogeek.com/114728/how-to-use-xmonad-a-tiling-window-manager-for-linux/ |archive-date=2018-09-18 |url-status=live}} and it was included in a 2013 list of eight desktop environments for Linux.{{cite web |url=https://www.howtogeek.com/163154/linux-users-have-a-choice-8-linux-desktop-environments/ |title=Linux Users Have a Choice: 8 Linux Desktop Environments |date=2013-05-18 |first=Chris |last=Hoffman |publisher=How-To Geek |access-date=2018-09-24 |archive-url=https://web.archive.org/web/20170713231200/https://www.howtogeek.com/163154/linux-users-have-a-choice-8-linux-desktop-environments/ |archive-date=2017-07-13 |url-status=live}} 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.{{cite web |url=https://www.makeuseof.com/tag/need-a-fresh-desktop-environment-for-linux-try-openbox-or-xmonad/ |title=Need A Fresh Desktop Environment for Linux? Try Openbox Or xmonad|website=makeuseof.com |first=Danny |last=Stieben |date=2018-09-18 |access-date=2018-09-24 |archive-url=https://web.archive.org/web/20171123122104/http://www.makeuseof.com/tag/need-a-fresh-desktop-environment-for-linux-try-openbox-or-xmonad/ |archive-date=2017-11-23 |url-status=live}}
In 2016 Ars Technica said xmonad and Awesome had more advanced tiling ability than Cinnamon.{{cite web |url=https://arstechnica.com/information-technology/2016/08/mint-18-review-just-works-linux-doesnt-get-any-better-than-this/2/ |title=Mint 18 review: "Just works" Linux doesn't get any better than this |date=2016-08-04 |work=Ars Technica |access-date=2018-09-17 |archive-url=https://web.archive.org/web/20180917215343/https://arstechnica.com/information-technology/2016/08/mint-18-review-just-works-linux-doesnt-get-any-better-than-this/2/ |archive-date=2018-09-17 |url-status=live}} In 2017 it was described as powerful, with application as a windows manager for big data, while in an article on opensource.com on the other hand, dwm was chosen over xmonad.{{cite web |url=https://opensource.com/article/17/7/top-4-reasons-i-use-dwm-linux-window-manager |date=2017-07-18 |title=Top 4 reasons I use dwm for my Linux window manager|website=Opensource.com |publisher=Red Hat |access-date=2018-09-17 |archive-url=https://web.archive.org/web/20180918054405/https://opensource.com/article/17/7/top-4-reasons-i-use-dwm-linux-window-manager |archive-date=2018-09-18 |url-status=live}} 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."{{cite web |url=https://www.techradar.com/uk/news/best-linux-desktop |title=Best Linux desktop of 2018|website=TechRadar |date=2018-01-15 |publisher=Future plc |access-date=2018-09-17 |archive-url=https://web.archive.org/web/20180918012109/https://www.techradar.com/uk/news/best-linux-desktop |archive-date=2018-09-18 |url-status=live}}
Due to the small number of lines of code of the Xmonad application, the use of the purely functional programming language Haskell, and recorded use of a rigorous testing procedure it is sometimes used as a baseline application in other research projects. This has included re-implementation of xmonad using the Coq proof assistant, a determination xmonad is an imperative program, and studies of package management relating to the NixOS linux distribution.
See also
{{Portal|Free and open-source software}}
References
{{Reflist|refs=
{{cite book |url=http://shop.oreilly.com/product/9780596515171.do |title=Masterminds of Programming: Conversations with the Creators of Major Programming Languages |first1=Shane |last1=Warden |first2=Federico |last2=Biancuzzi |page=181 |publisher=O'Reilly Media |date=2009 |access-date=2018-09-18 |url-access=limited |isbn=978-0596515171 |archive-url=https://web.archive.org/web/20180919024803/http://shop.oreilly.com/product/9780596515171.do |archive-date=2018-09-19 |url-status=live}}
{{cite book |url=https://www.amazon.co.uk/Practical-Concurrent-Haskell-Data-Applications-ebook/dp/B075MZ6CJK/ref=sr_1_1?s=books&ie=UTF8&qid=1537205386&sr=1-1&keywords=9781484227817 |title=Practical Concurrent Haskell: With Big Data Applications |first1=Stefania Loredana |last1=Nita |first2=Marius |last2=Mihailescu |date=14 September 2017 |publisher=Apress |via=Amazon |pages=40–41 |isbn=978-1484227800 |url-access=limited}}
{{cite news |title=10 amazing Linux desktop environments you've probably never seen|id=xmonad |work=Network World |last=Lunduke |first=Bryan |date=15 May 2013 |url=https://www.networkworld.com/article/2356810/linux/100941-10-amazing-Linux-desktop-environments-youve-probably-never-seen.html#slide2 |url-status=dead |archive-url=https://web.archive.org/web/20180526095323/https://www.networkworld.com/article/2356810/linux/100941-10-amazing-Linux-desktop-environments-youve-probably-never-seen.html#slide2 |archive-date=26 May 2018 |df=dmy-all}}
{{cite web |url=https://lifehacker.com/5974087/i-raised-my-kids-on-the-command-lineand-they-love-it |title=I Raised My Kids On the Command Line...and They Love It |first=John |last=Goerzen |date=2013-01-08 |work=Lifehacker |publisher=Univision Communications |access-date=2018-09-17 |archive-url=https://web.archive.org/web/20180918054303/https://lifehacker.com/5974087/i-raised-my-kids-on-the-command-lineand-they-love-it |archive-date=2018-09-18 |url-status=live}}
{{cite conference |title=xmonad in Coq (Experience Report) Programming a Window Manager with a Proof Assistant |first=Wouter |last=Swierstra |date=13 September 2012 |conference=ICFP 2012 The 17th ACM SIGPLAN International Conference on Functional Programming |conference-url=http://icfpconference.org/icfp2012/ |editor-last=Voigtländer |editor-first=J. |book-title=Haskell '12 Proceedings of the 2012 Haskell Symposium |publisher=Association for Computing Machinery |location=Copenhagen, Denmark |pages=131–136 |isbn=978-1-4503-1574-6}}
{{cite journal |title=NixOS: A Purely Functional Linux Distribution |first1=Eelco |last1=Dolstra |first2=Andres |last2=LÖH |first3=Nicolas |last3=Pierron |journal=Journal of Functional Programming |pages=577–615 |volume=20 |issue=5–6 |date=November 2010 |doi=10.1017/S0956796810000195|issn=0956-7968 |url=http://resolver.tudelft.nl/uuid:547a1af2-10e5-4a00-a87b-5f47dde83b1f|doi-access=free }}
}}
=Works cited=
{{Refbegin}}
- {{cite book |last1=Stewart |first1=Don |last2=Janssen |first2=Spencer |title=Proceedings of the ACM SIGPLAN workshop on Haskell workshop |chapter=Xmonad |date=September 2007 |pages=119 |chapter-url=http://www.cse.unsw.edu.au/~dons/papers/haskell51d-stewart.pdf |access-date=2007-10-22 |doi=10.1145/1291201.1291218 |isbn=978-1-59593-674-5 |s2cid=263875343 }}
- [http://portal.acm.org/citation.cfm?id=1291201.1291218 Association for Computing Machinery archive]
- {{Cite web |url=https://www.ludd.ltu.se/~pj/hw2007/xmonad.mov |title=Design and Implementation of Xmonad – A Tiling Window Manager – Video (.mov) presentation |access-date=September 18, 2018 |archive-date=April 30, 2016 |archive-url=https://web.archive.org/web/20160430174020/https://www.ludd.ltu.se/~pj/hw2007/xmonad.mov |url-status=bot: unknown }}
{{Refend}}
Further reading
- {{cite book |last=Lunduke |first=Bryan |date=2018-02-05 |url=https://books.google.com/books?id=Eq9XDwAAQBAJ |title=Half a Decade of Linux-y Shenanigans |page=5 |isbn=9781387571246 |publisher=Bryan Lunduke}} According to Bryan Lunduke xmonad is an unknown desktop environment written in an unknown programming language, adding "Are xmonad and Haskell failures? Are they dead? No. Because they are unique. They are customizable. They are alive and kicking (and awesome)."
- {{cite web |url=https://books.google.com/books?id=VONjBAAAQBAJ |title=Full Circle Magazine #79: The Independent Magazine for the Ubuntu Linux Community |first=Ronnie |last=Tucker |date=29 November 2013 |work=Full Circle |publisher=Full Circle Team |via=Google Books}} – the use of xmonad and other lightweight window managers
External links
{{Commons category}}
- {{Official website}}
- [https://www.slideshare.net/oscon2007/os-peytonjones "Taste of Haskell"] – O'Reilly Open Source Convention (OSCON) presentation by Simon Peyton Jones on Haskell, using xmonad as an example
- [https://www.youtube.com/watch?v=jLj1QV11o9g First half of talk on YouTube] (video)
- [https://www.youtube.com/watch?v=IqXTUbdLig0 Second half of talk on YouTube] (video)
{{Desktop environments and window managers for X11 and Wayland}}
{{Haskell programming}}
Category:Free software programmed in Haskell
Category:Free X window managers
Category:Tiling window managers