wm.scm 95 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558
  1. ;;; GNU Guix --- Functional package management for GNU
  2. ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
  3. ;;; Copyright © 2015 Siniša Biđin <sinisa@bidin.eu>
  4. ;;; Copyright © 2015, 2016 Eric Bavier <bavier@member.fsf.org>
  5. ;;; Copyright © 2015 xd1le <elisp.vim@gmail.com>
  6. ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
  7. ;;; Copyright © 2016 Danny Milosavljevic <dannym@scratchpost.org>
  8. ;;; Copyright © 2016, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
  9. ;;; Copyright © 2016 Al McElrath <hello@yrns.org>
  10. ;;; Copyright © 2016 Carlo Zancanaro <carlo@zancanaro.id.au>
  11. ;;; Copyright © 2016, 2017, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
  12. ;;; Copyright © 2016, 2017, 2018, 2020 Nikita <nikita@n0.is>
  13. ;;; Copyright © 2016 doncatnip <gnopap@gmail.com>
  14. ;;; Copyright © 2016 Ivan Vilata i Balaguer <ivan@selidor.net>
  15. ;;; Copyright © 2017 Mekeor Melire <mekeor.melire@gmail.com>
  16. ;;; Copyright © 2017, 2019, 2020 Marius Bakke <marius@gnu.org>
  17. ;;; Copyright © 2017, 2020, 2021 Oleg Pykhalov <go.wigust@gmail.com>
  18. ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
  19. ;;; Copyright © 2018 Pierre-Antoine Rouby <contact@parouby.fr>
  20. ;;; Copyright © 2018, 2019 Meiyo Peng <meiyo@riseup.net>
  21. ;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com>
  22. ;;; Copyright © 2019 Timothy Sample <samplet@ngyro.com>
  23. ;;; Copyright © 2019 Gábor Boskovits <boskovits@gmail.com>
  24. ;;; Copyright © 2019 Kyle Andrews <kyle.c.andrews@gmail.com>
  25. ;;; Copyright © 2019 Ingo Ruhnke <grumbel@gmail.com>
  26. ;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
  27. ;;; Copyright © 2019 John Soo <jsoo1@asu.edu>
  28. ;;; Copyright © 2018, 2019 Pierre Langlois <pierre.langlois@gmx.com>
  29. ;;; Copyright © 2016, 2017 Andy Patterson <ajpatter@uwaterloo.ca>
  30. ;;; Copyright © 2019 Evan Straw <evan.straw99@gmail.com>
  31. ;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
  32. ;;; Copyright © 2019 Noodles! <nnoodle@chiru.no>
  33. ;;; Copyright © 2019, 2020 Alexandru-Sergiu Marton <brown121407@member.fsf.org>
  34. ;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
  35. ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
  36. ;;; Copyright © 2020 Boris A. Dekshteyn <harlequin78@gmail.com>
  37. ;;; Copyright © 2020 Marcin Karpezo <sirmacik@wioo.waw.pl>
  38. ;;; Copyright © 2020 EuAndreh <eu@euandre.org>
  39. ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
  40. ;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
  41. ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
  42. ;;; Copyright © 2020 Niklas Eklund <niklas.eklund@posteo.net>
  43. ;;; Copyright © 2020 Robert Smith <robertsmith@posteo.net>
  44. ;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
  45. ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
  46. ;;; Copyright © 2021 qblade <qblade@protonmail.com>
  47. ;;; Copyright © 2021 lasnesne <lasnesne@lagunposprasihopre.org>
  48. ;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
  49. ;;;
  50. ;;; This file is part of GNU Guix.
  51. ;;;
  52. ;;; GNU Guix is free software; you can redistribute it and/or modify it
  53. ;;; under the terms of the GNU General Public License as published by
  54. ;;; the Free Software Foundation; either version 3 of the License, or (at
  55. ;;; your option) any later version.
  56. ;;;
  57. ;;; GNU Guix is distributed in the hope that it will be useful, but
  58. ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
  59. ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  60. ;;; GNU General Public License for more details.
  61. ;;;
  62. ;;; You should have received a copy of the GNU General Public License
  63. ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
  64. (define-module (gnu packages wm)
  65. #:use-module ((guix licenses) #:prefix license:)
  66. #:use-module (guix packages)
  67. #:use-module (guix download)
  68. #:use-module (guix git-download)
  69. #:use-module (guix build-system asdf)
  70. #:use-module (guix build-system cmake)
  71. #:use-module (guix build-system gnu)
  72. #:use-module (guix build-system haskell)
  73. #:use-module (guix build-system meson)
  74. #:use-module (guix build-system perl)
  75. #:use-module (guix build-system python)
  76. #:use-module (guix build-system trivial)
  77. #:use-module (guix utils)
  78. #:use-module (gnu packages)
  79. #:use-module (gnu packages bash)
  80. #:use-module (gnu packages autotools)
  81. #:use-module (gnu packages base)
  82. #:use-module (gnu packages bison)
  83. #:use-module (gnu packages build-tools) ;for meson-0.55
  84. #:use-module (gnu packages calendar)
  85. #:use-module (gnu packages datastructures)
  86. #:use-module (gnu packages docbook)
  87. #:use-module (gnu packages documentation)
  88. #:use-module (gnu packages fontutils)
  89. #:use-module (gnu packages freedesktop)
  90. #:use-module (gnu packages fribidi)
  91. #:use-module (gnu packages gawk)
  92. #:use-module (gnu packages gcc)
  93. #:use-module (gnu packages gl)
  94. #:use-module (gnu packages glib)
  95. #:use-module (gnu packages gperf)
  96. #:use-module (gnu packages gtk)
  97. #:use-module (gnu packages haskell-check)
  98. #:use-module (gnu packages haskell-web)
  99. #:use-module (gnu packages haskell-xyz)
  100. #:use-module (gnu packages image)
  101. #:use-module (gnu packages imagemagick)
  102. #:use-module (gnu packages libevent)
  103. #:use-module (gnu packages linux)
  104. #:use-module (gnu packages lisp-xyz)
  105. #:use-module (gnu packages logging)
  106. #:use-module (gnu packages lua)
  107. #:use-module (gnu packages m4)
  108. #:use-module (gnu packages man)
  109. #:use-module (gnu packages maths)
  110. #:use-module (gnu packages mpd)
  111. #:use-module (gnu packages pcre)
  112. #:use-module (gnu packages perl)
  113. #:use-module (gnu packages pkg-config)
  114. #:use-module (gnu packages pretty-print)
  115. #:use-module (gnu packages pulseaudio)
  116. #:use-module (gnu packages python)
  117. #:use-module (gnu packages readline)
  118. #:use-module (gnu packages serialization)
  119. #:use-module (gnu packages sphinx)
  120. #:use-module (gnu packages suckless)
  121. #:use-module (gnu packages texinfo)
  122. #:use-module (gnu packages textutils)
  123. #:use-module (gnu packages video)
  124. #:use-module (gnu packages web)
  125. #:use-module (gnu packages xdisorg)
  126. #:use-module (gnu packages xml)
  127. #:use-module (gnu packages xorg))
  128. (define-public bspwm
  129. (package
  130. (name "bspwm")
  131. (version "0.9.10")
  132. (source
  133. (origin
  134. (method git-fetch)
  135. (uri (git-reference
  136. (url "https://github.com/baskerville/bspwm")
  137. (commit version)))
  138. (file-name (git-file-name name version))
  139. (sha256
  140. (base32 "0qlv7b4c2mmjfd65y100d11x8iqyg5f6lfiws3cgmpjidhdygnxc"))))
  141. (build-system gnu-build-system)
  142. (inputs
  143. `(("libxcb" ,libxcb)
  144. ("libxinerama" ,libxinerama)
  145. ("sxhkd" ,sxhkd)
  146. ("xcb-util" ,xcb-util)
  147. ("xcb-util-keysyms" ,xcb-util-keysyms)
  148. ("xcb-util-wm" ,xcb-util-wm)))
  149. (arguments
  150. '(#:phases
  151. (modify-phases %standard-phases
  152. (delete 'configure)) ; no configure script
  153. #:tests? #f ; no check target
  154. #:make-flags
  155. (list "CC=gcc"
  156. (string-append "PREFIX=" %output))))
  157. (home-page "https://github.com/baskerville/bspwm")
  158. (synopsis "Tiling window manager based on binary space partitioning")
  159. (description "bspwm is a tiling window manager that represents windows as
  160. the leaves of a full binary tree.")
  161. (license license:bsd-2)))
  162. (define-public herbstluftwm
  163. (package
  164. (name "herbstluftwm")
  165. (version "0.9.3")
  166. (source
  167. (origin
  168. (method url-fetch)
  169. (uri (string-append "https://herbstluftwm.org/tarballs/herbstluftwm-"
  170. version ".tar.gz"))
  171. (sha256
  172. (base32 "01f1bv9axjhw1l2gwhdwahljssj0h8q7a1bqwbpnwvln0ayv39qb"))
  173. (file-name (string-append "herbstluftwm-" version ".tar.gz"))))
  174. (build-system cmake-build-system)
  175. (inputs
  176. `(("dzen" ,dzen)
  177. ("dmenu" ,dmenu)
  178. ("glib" ,glib)
  179. ("glibmm" ,glibmm)
  180. ("xterm" ,xterm)
  181. ("xsetroot" ,xsetroot)
  182. ("libx11" ,libx11)
  183. ("libxext" ,libxext)
  184. ("libxinerama" ,libxinerama)
  185. ("libxrandr" ,libxrandr)
  186. ("libxft" ,libxft)))
  187. (native-inputs
  188. `(("asciidoc" ,asciidoc)
  189. ("pkg-config" ,pkg-config)
  190. ("python" ,python)))
  191. (arguments
  192. '(#:tests? #f
  193. #:configure-flags
  194. (let ((out (assoc-ref %outputs "out")))
  195. (list "-DCC=gcc"
  196. (string-append "-DCMAKE_INSTALL_SYSCONF_PREFIX=" out "/etc")
  197. (string-append "-DBASHCOMPLETIONDIR=" out "/etc/bash_completion.d")))
  198. #:phases
  199. (modify-phases %standard-phases
  200. (add-after 'install 'install-xsession
  201. (lambda* (#:key outputs #:allow-other-keys)
  202. (let* ((out (assoc-ref outputs "out"))
  203. (xsessions (string-append out "/share/xsessions")))
  204. (mkdir-p xsessions)
  205. (call-with-output-file
  206. (string-append xsessions "/herbstluftwm.desktop")
  207. (lambda (port)
  208. (format port "~
  209. [Desktop Entry]~@
  210. Name=herbstluftwm~@
  211. Comment=Manual tiling window manager~@
  212. Exec=~a/bin/herbstluftwm~@
  213. Type=XSession~%" out)))
  214. #t))))))
  215. (synopsis "Tiling window manager for X11")
  216. (description "herbstluftwm is a manual tiling window manager for X11 using
  217. Xlib and GLib. Its main features are:
  218. @itemize
  219. @item
  220. The layout is based on splitting frames into subframes which can be split
  221. again or can be filled with windows (similar to i3 or musca).
  222. @item
  223. Tags (or workspaces or virtual desktops or …) can be added/removed at runtime.
  224. Each tag contains an own layout.
  225. @item
  226. Exactly one tag is viewed on each monitor. The tags are monitor independent
  227. (similar to Xmonad).
  228. @item
  229. It is configured at runtime via IPC calls from @command{herbstclient}. So the
  230. configuration file is just a script which is run on startup (similar to wmii
  231. or musca).
  232. @end itemize")
  233. (home-page "https://herbstluftwm.org")
  234. (license license:bsd-2)))
  235. (define-public i3status
  236. (package
  237. (name "i3status")
  238. (version "2.13")
  239. (source (origin
  240. (method url-fetch)
  241. (uri (string-append "https://i3wm.org/i3status/i3status-"
  242. version ".tar.bz2"))
  243. (sha256
  244. (base32
  245. "0rhlzb96mw64z2jnhwz9nibc7pxg549626lz5642xxk5hpzwk2ff"))))
  246. (build-system gnu-build-system)
  247. (arguments
  248. `(;; XXX: Do an "out of source" build to work around
  249. ;; <https://github.com/i3/i3status/issues/339>.
  250. #:out-of-source? #t
  251. #:tests? #f)) ; no test suite
  252. (inputs
  253. `(("openlibm" ,openlibm)
  254. ("libconfuse" ,libconfuse)
  255. ("libyajl" ,libyajl)
  256. ("alsa-lib" ,alsa-lib)
  257. ("pulseaudio" ,pulseaudio)
  258. ("libnl" ,libnl)
  259. ("libcap" ,libcap)
  260. ("asciidoc" ,asciidoc)))
  261. (native-inputs
  262. `(("pkg-config" ,pkg-config)
  263. ("docbook-xsl" ,docbook-xsl)
  264. ("libxml2" ,libxml2) ;for XML_CATALOG_FILES
  265. ("xmlto" ,xmlto)))
  266. (home-page "https://i3wm.org/i3status/")
  267. (synopsis "Status bar for i3bar, dzen2, xmobar or similar programs")
  268. (description "i3status is a small program for generating a status bar for
  269. i3bar, dzen2, xmobar or similar programs. It is designed to be very efficient
  270. by issuing a very small number of system calls, as one generally wants to
  271. update such a status line every second. This ensures that even under high
  272. load, your status bar is updated correctly. Also, it saves a bit of energy by
  273. not hogging your CPU as much as spawning the corresponding amount of shell
  274. commands would.")
  275. (license license:bsd-3)))
  276. (define-public i3-wm
  277. (package
  278. (name "i3-wm")
  279. (version "4.18.3")
  280. (source (origin
  281. (method url-fetch)
  282. (uri (string-append "https://i3wm.org/downloads/i3-"
  283. version ".tar.bz2"))
  284. (sha256
  285. (base32
  286. "03dijnwv2n8ak9jq59fhq0rc80m5wjc9d54fslqaivnnz81pkbjk"))))
  287. (build-system gnu-build-system)
  288. (arguments
  289. `(#:configure-flags
  290. ;; The build system tries to build in a separate directory, but that
  291. ;; seems to be unnecessary.
  292. (list "--disable-builddir")
  293. ;; The test suite requires the unpackaged Xephyr X server.
  294. #:tests? #f
  295. #:phases
  296. (modify-phases %standard-phases
  297. (add-after 'install 'patch-session-file
  298. (lambda* (#:key outputs #:allow-other-keys)
  299. (let* ((out (assoc-ref outputs "out"))
  300. (i3 (string-append out "/bin/i3"))
  301. (i3-with-shmlog (string-append out "/bin/i3-with-shmlog")))
  302. (substitute* (string-append out "/share/xsessions/i3.desktop")
  303. (("Exec=i3") (string-append "Exec=" i3)))
  304. (substitute* (string-append out "/share/xsessions/i3-with-shmlog.desktop")
  305. (("Exec=i3-with-shmlog") (string-append "Exec=" i3-with-shmlog)))
  306. #t))))))
  307. (inputs
  308. `(("libxcb" ,libxcb)
  309. ("xcb-util" ,xcb-util)
  310. ("xcb-util-cursor" ,xcb-util-cursor)
  311. ("xcb-util-keysyms" ,xcb-util-keysyms)
  312. ("xcb-util-wm" ,xcb-util-wm)
  313. ("xcb-util-xrm" ,xcb-util-xrm)
  314. ("libxkbcommon" ,libxkbcommon)
  315. ("libev" ,libev)
  316. ("libyajl" ,libyajl)
  317. ("xmlto" ,xmlto)
  318. ("perl-pod-simple" ,perl-pod-simple)
  319. ("libx11" ,libx11)
  320. ("pcre" ,pcre)
  321. ("startup-notification" ,startup-notification)
  322. ("pango" ,pango)
  323. ("cairo" ,cairo)))
  324. (native-inputs
  325. `(("which" ,which)
  326. ("perl" ,perl)
  327. ("pkg-config" ,pkg-config)
  328. ("asciidoc" ,asciidoc)
  329. ;; For building the documentation.
  330. ("libxml2" ,libxml2)
  331. ("docbook-xsl" ,docbook-xsl)))
  332. (home-page "https://i3wm.org/")
  333. (synopsis "Tiling window manager")
  334. (description "i3 is a tiling X11 window manager that dynamically manages
  335. tiled, stacked, and tabbed window layouts.
  336. i3 primarily targets advanced users. Windows are managed manually and organised
  337. inside containers, which can be split vertically or horizontally, and optionally
  338. resized.
  339. i3 uses a plain-text configuration file, and can be extended and controlled from
  340. many programming languages.")
  341. (license license:bsd-3)))
  342. (define-public i3-gaps
  343. (package (inherit i3-wm)
  344. (name "i3-gaps")
  345. (version "4.18.3")
  346. (source (origin
  347. (method url-fetch)
  348. (uri (string-append
  349. "https://github.com/Airblader/i3/releases/download/"
  350. version "/i3-" version ".tar.bz2"))
  351. (sha256
  352. (base32
  353. "1hcakwyz78lgp8mhqv7pw86jlb3m415pfql1q19rkijnhm3fn3ci"))))
  354. (home-page "https://github.com/Airblader/i3")
  355. (synopsis "Tiling window manager with gaps")
  356. (description "i3-gaps is a fork of i3wm, a tiling window manager
  357. for X11. It is kept up to date with upstream, adding a few additional
  358. features such as gaps between windows.
  359. i3 is a tiling X11 window manager that dynamically manages tiled, stacked,
  360. and tabbed window layouts.
  361. i3 primarily targets advanced users. Windows are managed manually and
  362. organised inside containers, which can be split vertically or horizontally,
  363. and optionally resized.
  364. i3 uses a plain-text configuration file, and can be extended and controlled
  365. from many programming languages.")
  366. (license license:bsd-3)))
  367. (define-public i3lock
  368. (package
  369. (name "i3lock")
  370. (version "2.13")
  371. (source (origin
  372. (method url-fetch)
  373. (uri (string-append "https://i3wm.org/i3lock/i3lock-"
  374. version ".tar.bz2"))
  375. (sha256
  376. (base32
  377. "02szjsaz7rqrdkd0r2nwgwa85c4hwfrcskxw7ryk695kmjcfhzv3"))))
  378. (build-system gnu-build-system)
  379. (native-inputs
  380. `(("pkg-config" ,pkg-config)))
  381. (inputs
  382. `(("cairo" ,cairo)
  383. ("libev" ,libev)
  384. ("linux-pam" ,linux-pam)
  385. ("libxcb" ,libxcb)
  386. ("libxkbcommon" ,libxkbcommon)
  387. ("xcb-util" ,xcb-util)
  388. ("xcb-util-image" ,xcb-util-image)
  389. ("xcb-util-xrm" ,xcb-util-xrm)))
  390. (home-page "https://i3wm.org/i3lock/")
  391. (synopsis "Lightweight screen locker")
  392. (description
  393. "i3lock is a simple X11 screen locker developed alongside the i3 project.
  394. Despite the name it should work with any X11 window manager.")
  395. (license license:bsd-3)))
  396. (define-public i3lock-blur
  397. (package
  398. (name "i3lock-blur")
  399. (version "2.10")
  400. (source (origin
  401. (method git-fetch)
  402. (uri
  403. (git-reference
  404. (url "https://github.com/karulont/i3lock-blur")
  405. (commit version)))
  406. (file-name (git-file-name name version))
  407. (sha256
  408. (base32
  409. "1bd5nrlga5g1sz1f64gnc3dqy8yfrr4q1ss59krymbpxa1hhf55c"))))
  410. (build-system gnu-build-system)
  411. (native-inputs
  412. `(("pkg-config" ,pkg-config)
  413. ("automake" ,automake)
  414. ("autoconf" ,autoconf)))
  415. (inputs
  416. `(("cairo" ,cairo)
  417. ("mesa" ,mesa)
  418. ("libev" ,libev)
  419. ("linux-pam" ,linux-pam)
  420. ("libxcb" ,libxcb)
  421. ("libxkbcommon" ,libxkbcommon)
  422. ("xcb-util" ,xcb-util)
  423. ("xcb-util-image" ,xcb-util-image)
  424. ("xcb-util-xrm" ,xcb-util-xrm)))
  425. (home-page "https://github.com/karulont/i3lock-blur")
  426. (synopsis "Lightweight screen locker with transparent blurring background")
  427. (description
  428. "Simple X11 screen locker with transparent blurring background developed
  429. alongside the i3 project. Despite the name it should work with any X11 window
  430. manager.")
  431. (license license:expat)))
  432. (define-public i3blocks
  433. (package
  434. (name "i3blocks")
  435. (version "1.5")
  436. (source (origin
  437. (method git-fetch)
  438. (uri (git-reference
  439. (url "https://github.com/vivien/i3blocks")
  440. (commit version)))
  441. (sha256
  442. (base32
  443. "0v8mwnm8qzpv6xnqvrk43s4b9iyld4naqzbaxk4ldq1qkhai0wsv"))
  444. (file-name (git-file-name name version))))
  445. (build-system gnu-build-system)
  446. (native-inputs
  447. `(("autoconf" ,autoconf)
  448. ("automake" ,automake)
  449. ("pkg-config" ,pkg-config)))
  450. (home-page "https://github.com/vivien/i3blocks")
  451. (synopsis "Minimalist scheduler for status bar scripts")
  452. (description "i3blocks executes your command lines and generates a
  453. status line from their output. The generated line is meant to be displayed by
  454. the i3 window manager through its i3bar component, as an alternative to
  455. i3status.")
  456. (license license:gpl3+)))
  457. (define-public perl-anyevent-i3
  458. (package
  459. (name "perl-anyevent-i3")
  460. (version "0.17")
  461. (source (origin
  462. (method url-fetch)
  463. (uri (string-append "mirror://cpan/authors/id/M/MS/MSTPLBG/"
  464. "AnyEvent-I3-" version ".tar.gz"))
  465. (sha256
  466. (base32
  467. "0qvd9bq16jyy7v3ma82qcnvz9j503bw0mh7h55gkjf7ir62ck0jk"))))
  468. (build-system perl-build-system)
  469. (propagated-inputs
  470. `(("perl-anyevent" ,perl-anyevent)
  471. ("perl-json-xs" ,perl-json-xs)))
  472. (home-page "https://metacpan.org/release/AnyEvent-I3")
  473. (synopsis
  474. "Communicate with the i3 window manager through perl")
  475. (description
  476. "This module connects to the i3 window manager using the UNIX socket
  477. based IPC interface it provides (if enabled in the configuration file).
  478. You can then subscribe to events or send messages and receive their replies.")
  479. ;; Can be used with either license.
  480. (license (list license:gpl3+ license:perl-license))))
  481. (define-public python-i3-py
  482. (package
  483. (name "python-i3-py")
  484. (version "0.6.5")
  485. (source
  486. (origin
  487. ;; The latest release is not tagged in Git nor has an entry in PyPi,
  488. ;; but there is still a clear commit for it, and it's been the last one
  489. ;; for years.
  490. (method git-fetch)
  491. (uri (git-reference
  492. (url "https://github.com/ziberna/i3-py")
  493. (commit "27f88a616e9ecc340e7d041d3d00782f8a1964c1")))
  494. (sha256
  495. (base32
  496. "1nm719dc2xqlll7vj4c4m7mpjb27lpn3bg3c66gajvnrz2x1nmxs"))
  497. (file-name (string-append name "-" version "-checkout"))))
  498. (build-system python-build-system)
  499. (arguments
  500. `(#:tests? #f ; no tests yet
  501. #:phases (modify-phases %standard-phases
  502. (add-after 'install 'install-doc
  503. ;; Copy readme file to documentation directory.
  504. (lambda* (#:key outputs #:allow-other-keys)
  505. (let ((doc (string-append (assoc-ref outputs "out")
  506. "/share/doc/" ,name)))
  507. (install-file "README.md" doc)
  508. ;; Avoid unspecified return value.
  509. #t))))))
  510. (propagated-inputs
  511. `(("i3-wm" ,i3-wm)))
  512. (home-page "https://github.com/ziberna/i3-py")
  513. (synopsis "Python interface to the i3 window manager")
  514. (description "This package allows you to interact from a Python program
  515. with the i3 window manager via its IPC socket. It can send commands and other
  516. kinds of messages to i3, select the affected containers, filter results and
  517. subscribe to events.")
  518. (license license:gpl3+)))
  519. (define-public python2-i3-py
  520. (package-with-python2 python-i3-py))
  521. (define-public quickswitch-i3
  522. (let ((commit "ed692b1e8f43b95bd907ced26238ce8ccb2ed28f")
  523. (revision "1")) ; Guix package revision
  524. (package
  525. (name "quickswitch-i3")
  526. (version (string-append "2.2-" revision "."
  527. (string-take commit 7)))
  528. (source
  529. (origin
  530. ;; The latest commit is a few years old and just a couple commits
  531. ;; after the last tagged release, so we use that latest commit
  532. ;; instead of the release.
  533. (method git-fetch)
  534. (uri (git-reference
  535. (url "https://github.com/proxypoke/quickswitch-for-i3")
  536. (commit commit)))
  537. (sha256
  538. (base32
  539. "0447077sama80jcdg5p64zjsvafmz5rbdrirhm1adcdjhkh6iqc5"))
  540. (patches (search-patches "quickswitch-fix-dmenu-check.patch"))
  541. (file-name (string-append name "-" version "-checkout"))))
  542. (build-system python-build-system)
  543. (arguments
  544. `(#:tests? #f ; no tests yet
  545. #:phases (modify-phases %standard-phases
  546. (add-after 'install 'install-doc
  547. ;; Copy readme file to documentation directory.
  548. (lambda* (#:key outputs #:allow-other-keys)
  549. (let ((doc (string-append (assoc-ref outputs "out")
  550. "/share/doc/" ,name)))
  551. (install-file "README.rst" doc)
  552. ;; Avoid unspecified return value.
  553. #t))))))
  554. (inputs
  555. `(("python-i3-py" ,python-i3-py)
  556. ("dmenu" ,dmenu)))
  557. (home-page "https://github.com/proxypoke/quickswitch-for-i3")
  558. (synopsis "Quickly change to and locate windows in the i3 window manager")
  559. (description
  560. "This utility for the i3 window manager allows you to quickly switch to
  561. and locate windows on all your workspaces, using an interactive dmenu
  562. prompt.")
  563. (license license:wtfpl2))))
  564. (define-public i3lock-color
  565. (package
  566. (name "i3lock-color")
  567. (version "2.12.c")
  568. (source
  569. (origin
  570. (method git-fetch)
  571. (uri (git-reference
  572. (url "https://github.com/PandorasFox/i3lock-color")
  573. (commit version)))
  574. (file-name (git-file-name name version))
  575. (sha256
  576. (base32 "08fhnchf187b73h52xgzb86g6byzxz085zs9galsvl687g5zxk34"))))
  577. (build-system gnu-build-system)
  578. (arguments
  579. `(#:tests? #f)) ; no tests included
  580. (inputs
  581. `(("cairo" ,cairo)
  582. ("libev" ,libev)
  583. ("libjpeg" ,libjpeg-turbo)
  584. ("libxcb" ,libxcb)
  585. ("libxkbcommon" ,libxkbcommon)
  586. ("linux-pam" ,linux-pam)
  587. ("xcb-util" ,xcb-util)
  588. ("xcb-util-image" ,xcb-util-image)
  589. ("xcb-util-xrm" ,xcb-util-xrm)))
  590. (native-inputs
  591. `(("autoconf" ,autoconf)
  592. ("automake" ,automake)
  593. ("pkg-config" ,pkg-config)))
  594. (home-page "https://github.com/PandorasFox/i3lock-color")
  595. (synopsis "Screen locker with color configuration support")
  596. (description
  597. "i3lock-color is a simpler X11 screen locker derived from i3lock.
  598. Features include:
  599. @enumerate
  600. @item forking process, the locked screen is preserved when you suspend to RAM;
  601. @item specify background color or image to be displayed in the lock screen;
  602. @item many additional color options.
  603. @end enumerate")
  604. (license license:bsd-3)))
  605. (define-public i3lock-fancy
  606. (package
  607. (name "i3lock-fancy")
  608. (version "0.2")
  609. (source
  610. (origin
  611. (method git-fetch)
  612. (uri (git-reference
  613. (url "https://github.com/meskarune/i3lock-fancy")
  614. (commit version)))
  615. (file-name (git-file-name name version))
  616. (sha256
  617. (base32 "11g2kkim33ra38d1m897sq1ifajw17iyw9mr7sg1q8i2ibl4lfsi"))))
  618. (build-system gnu-build-system)
  619. (arguments
  620. `(#:tests? #f ; no tests included
  621. #:phases
  622. (modify-phases %standard-phases
  623. (replace 'configure
  624. (lambda* (#:key inputs outputs #:allow-other-keys)
  625. (let* ((out (assoc-ref outputs "out"))
  626. (icons (string-append out "/share/i3lock-fancy/icons/"))
  627. (wmctrl (search-input-file inputs "/bin/wmctrl"))
  628. (mconvert (search-input-file inputs "/bin/convert"))
  629. (mimport (search-input-file inputs "/bin/import"))
  630. (awk (search-input-file inputs "/bin/gawk")))
  631. (substitute* "lock"
  632. (("\\$\\(command -V wmctrl\\)") wmctrl)
  633. (("convert") mconvert)
  634. (("shot=\\(import") (string-append "shot=\(" mimport))
  635. (("awk -F") (string-append awk " -F"))
  636. ((" awk") awk)
  637. (("\\$scriptpath/icons/") icons))
  638. #t)))
  639. (delete 'build)
  640. (replace 'install
  641. (lambda* (#:key inputs outputs #:allow-other-keys)
  642. (let* ((out (assoc-ref outputs "out"))
  643. (bin (string-append out "/bin"))
  644. (icons (string-append out "/share/i3lock-fancy/icons/")))
  645. (install-file "lock" bin)
  646. (rename-file (string-append bin "/lock")
  647. (string-append bin "/i3lock-fancy"))
  648. (copy-recursively "icons" icons)
  649. #t))))))
  650. (inputs
  651. `(("imagemagick" ,imagemagick)
  652. ("wmctrl" ,wmctrl)
  653. ("i3lock" ,i3lock)
  654. ("gawk" ,gawk)))
  655. (home-page "https://github.com/meskarune/i3lock-fancy")
  656. (synopsis "Screen locker with screenshot function")
  657. (description
  658. "@code{i3lock-fancy} is a Bash script that takes a screenshot of
  659. the desktop, blurs the background and adds a lock icon and text.
  660. It requires @code{i3lock-color} or @code{i3lock} and can optionally
  661. be passed any screenshot util like @code{scrot}.
  662. This screen locker can be used with any window manager or
  663. desktop environment.")
  664. (license license:expat)))
  665. (define-public xmonad
  666. (package
  667. (name "xmonad")
  668. (version "0.15")
  669. (synopsis "Tiling window manager")
  670. (source (origin
  671. (method url-fetch)
  672. (uri (string-append "mirror://hackage/package/xmonad/"
  673. "xmonad-" version ".tar.gz"))
  674. (sha256
  675. (base32
  676. "0a7rh21k9y6g8fwkggxdxjns2grvvsd5hi2ls4klmqz5xvk4hyaa"))
  677. (patches (search-patches "xmonad-dynamic-linking.patch"))))
  678. (build-system haskell-build-system)
  679. (inputs
  680. `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
  681. ("ghc-quickcheck" ,ghc-quickcheck)
  682. ("ghc-semigroups" ,ghc-semigroups)
  683. ("ghc-setlocale" ,ghc-setlocale)
  684. ("ghc-utf8-string" ,ghc-utf8-string)
  685. ("ghc-x11" ,ghc-x11)))
  686. (arguments
  687. `(#:phases
  688. (modify-phases %standard-phases
  689. (add-after
  690. 'install 'install-xsession
  691. (lambda _
  692. (let* ((xsessions (string-append %output "/share/xsessions")))
  693. (mkdir-p xsessions)
  694. (call-with-output-file
  695. (string-append xsessions "/xmonad.desktop")
  696. (lambda (port)
  697. (format port "~
  698. [Desktop Entry]~@
  699. Name=~a~@
  700. Comment=~a~@
  701. Exec=~a/bin/xmonad~@
  702. Type=Application~%" ,name ,synopsis %output)))))))))
  703. (home-page "https://xmonad.org")
  704. (description
  705. "Xmonad is a tiling window manager for X. Windows are arranged
  706. automatically to tile the screen without gaps or overlap, maximising screen
  707. use. All features of the window manager are accessible from the keyboard: a
  708. mouse is strictly optional. Xmonad is written and extensible in Haskell.
  709. Custom layout algorithms, and other extensions, may be written by the user in
  710. config files. Layouts are applied dynamically, and different layouts may be
  711. used on each workspace. Xinerama is fully supported, allowing windows to be
  712. tiled on several screens.")
  713. (license license:bsd-3)))
  714. (define-public xmobar
  715. (package
  716. (name "xmobar")
  717. (version "0.34")
  718. (source (origin
  719. (method url-fetch)
  720. (uri (string-append "mirror://hackage/package/xmobar/"
  721. "xmobar-" version ".tar.gz"))
  722. (sha256
  723. (base32
  724. "0x09xbz7y9ay0046j1xpr9jjk5jqivqi06vm3q6mhcrgc4y922rx"))))
  725. (build-system haskell-build-system)
  726. (native-inputs
  727. `(("ghc-hspec" ,ghc-hspec)
  728. ("hspec-discover" ,hspec-discover)))
  729. (inputs
  730. `(("ghc-alsa-core" ,ghc-alsa-core)
  731. ("ghc-alsa-mixer" ,ghc-alsa-mixer)
  732. ("ghc-dbus" ,ghc-dbus)
  733. ("ghc-hinotify" ,ghc-hinotify)
  734. ("ghc-http" ,ghc-http)
  735. ("ghc-http-conduit" ,ghc-http-conduit)
  736. ("ghc-http-types" ,ghc-http-types)
  737. ("ghc-iwlib" ,ghc-iwlib)
  738. ("ghc-libmpd" ,ghc-libmpd)
  739. ("ghc-old-locale" ,ghc-old-locale)
  740. ("ghc-parsec-numbers" ,ghc-parsec-numbers)
  741. ("ghc-regex-compat" ,ghc-regex-compat)
  742. ("ghc-temporary" ,ghc-temporary)
  743. ("ghc-timezone-olson" ,ghc-timezone-olson)
  744. ("ghc-x11" ,ghc-x11)
  745. ("ghc-x11-xft" ,ghc-x11-xft)
  746. ("libxpm" ,libxpm)))
  747. (arguments
  748. `(#:configure-flags (list "--flags=all_extensions")
  749. #:phases
  750. (modify-phases %standard-phases
  751. (add-before 'build 'patch-test-shebang
  752. (lambda* (#:key inputs #:allow-other-keys)
  753. (substitute* "test/Xmobar/Plugins/Monitors/AlsaSpec.hs"
  754. (("/bin/bash") (which "bash")))
  755. #t)))))
  756. (home-page "https://xmobar.org")
  757. (synopsis "Minimalistic text based status bar")
  758. (description
  759. "@code{xmobar} is a lightweight, text-based, status bar written in
  760. Haskell. It was originally designed to be used together with Xmonad, but it
  761. is also usable with any other window manager. While xmobar is written in
  762. Haskell, no knowledge of the language is required to install and use it.")
  763. (license license:bsd-3)))
  764. (define-public yeganesh
  765. (package
  766. (name "yeganesh")
  767. (version "2.4")
  768. (source
  769. (origin
  770. (method url-fetch)
  771. (uri (string-append "http://dmwit.com/yeganesh/yeganesh-" version ".tar.gz"))
  772. (sha256
  773. (base32 "04djfyjab3c5y9z9x8zd0xcx0jyy35zq7cl9ddr4ppf6k5ky6iky"))))
  774. (build-system haskell-build-system)
  775. (inputs
  776. `(("ghc-strict" ,ghc-strict)
  777. ("ghc-xdg-basedir" ,ghc-xdg-basedir)))
  778. (home-page "http://dmwit.com/yeganesh/")
  779. (synopsis "Small wrapper around dmenu")
  780. (description "@code{yeganesh} is a small wrapper around demnu. Like
  781. dmenu, it accepts input on stdin and writes the chosen result on stdout.
  782. Unlike dmenu, it mangles the input before it presents its choices. In
  783. particular, it displays commonly-chosen options before uncommon ones.")
  784. (license license:bsd-3)))
  785. (define-public ghc-xmonad-contrib
  786. (package
  787. (name "ghc-xmonad-contrib")
  788. (version "0.16")
  789. (source
  790. (origin
  791. (method url-fetch)
  792. (uri (string-append "mirror://hackage/package/xmonad-contrib/"
  793. "xmonad-contrib-" version ".tar.gz"))
  794. (sha256
  795. (base32 "1pddgkvnbww28wykncc7j0yb0lv15bk7xnnhdcbrwkxzw66w6wmd"))))
  796. (build-system haskell-build-system)
  797. (propagated-inputs
  798. `(("ghc-old-time" ,ghc-old-time)
  799. ("ghc-random" ,ghc-random)
  800. ("ghc-utf8-string" ,ghc-utf8-string)
  801. ("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
  802. ("ghc-semigroups" ,ghc-semigroups)
  803. ("ghc-x11" ,ghc-x11)
  804. ("ghc-x11-xft" ,ghc-x11-xft)
  805. ("xmonad" ,xmonad)))
  806. (home-page "https://xmonad.org")
  807. (synopsis "Third party extensions for xmonad")
  808. (description
  809. "Third party tiling algorithms, configurations, and scripts to Xmonad, a
  810. tiling window manager for X.")
  811. (license license:bsd-3)))
  812. (define-public evilwm
  813. (package
  814. (name "evilwm")
  815. (version "1.1.1")
  816. (source
  817. (origin
  818. (method url-fetch)
  819. (uri (string-append "http://www.6809.org.uk/evilwm/evilwm-"
  820. version ".tar.gz"))
  821. (sha256
  822. (base32
  823. "0ak0yajzk3v4dg5wmaghv6acf7v02a4iw8qxmq5yw5ard8lrqn3r"))
  824. (patches (search-patches "evilwm-lost-focus-bug.patch"))))
  825. (build-system gnu-build-system)
  826. (inputs
  827. `(("libx11" ,libx11)
  828. ("libxext" ,libxext)
  829. ("libxrandr" ,libxrandr)))
  830. (arguments
  831. `(#:modules ((srfi srfi-26)
  832. (guix build utils)
  833. (guix build gnu-build-system))
  834. #:make-flags (let ((inputs (map (cut assoc-ref %build-inputs <>)
  835. '("libx11" "libxext" "libxrandr")))
  836. (join (lambda (proc strs)
  837. (string-join (map proc strs) " ")))
  838. (dash-I (cut string-append "-I" <> "/include"))
  839. (dash-L (cut string-append "-L" <> "/lib")))
  840. `("desktopfilesdir=$(prefix)/share/xsessions"
  841. ,(string-append "prefix=" (assoc-ref %outputs "out"))
  842. ,(string-append "CPPFLAGS=" (join dash-I inputs))
  843. ,(string-append "LDFLAGS=" (join dash-L inputs))))
  844. #:tests? #f ;no tests
  845. #:phases (modify-phases %standard-phases
  846. (delete 'configure)))) ;no configure script
  847. (home-page "http://www.6809.org.uk/evilwm/")
  848. (synopsis "Minimalist window manager for the X Window System")
  849. (description
  850. "evilwm is a minimalist window manager based on aewm, extended to feature
  851. many keyboard controls with repositioning and maximize toggles, solid window
  852. drags, snap-to-border support, and virtual desktops.")
  853. (license (license:x11-style "file:///README"))))
  854. (define-public fluxbox
  855. (package
  856. (name "fluxbox")
  857. (version "1.3.7")
  858. (synopsis "Small and fast window manager")
  859. (source (origin
  860. (method url-fetch)
  861. (uri (string-append "mirror://sourceforge/fluxbox/fluxbox/"
  862. version "/fluxbox-" version ".tar.xz"))
  863. (sha256
  864. (base32
  865. "1h1f70y40qd225dqx937vzb4k2cz219agm1zvnjxakn5jkz7b37w"))))
  866. (build-system gnu-build-system)
  867. (arguments
  868. `(#:make-flags '("CPPFLAGS=-U__TIME__") ;ugly, but for reproducibility
  869. #:phases
  870. (modify-phases %standard-phases
  871. (add-after 'install 'install-vim-files
  872. (lambda* (#:key outputs #:allow-other-keys)
  873. (let* ((out (assoc-ref outputs "out"))
  874. (syntax (string-append out "/share/vim/vimfiles/syntax")))
  875. (copy-recursively "3rd/vim/vim/syntax" syntax)
  876. #t)))
  877. (add-after 'install 'install-xsession
  878. (lambda* (#:key outputs #:allow-other-keys)
  879. (let* ((out (assoc-ref outputs "out"))
  880. (xsessions (string-append out "/share/xsessions")))
  881. (mkdir-p xsessions)
  882. (call-with-output-file
  883. (string-append xsessions "/fluxbox.desktop")
  884. (lambda (port)
  885. (format port "~
  886. [Desktop Entry]~@
  887. Name=~a~@
  888. Comment=~a~@
  889. Exec=~a/bin/startfluxbox~@
  890. Type=Application~%" ,name ,synopsis out)))
  891. #t))))))
  892. (native-inputs
  893. `(("pkg-config" ,pkg-config)))
  894. (inputs
  895. `(("freetype" ,freetype)
  896. ("fribidi" ,fribidi)
  897. ("imlib2" ,imlib2)
  898. ("libx11" ,libx11)
  899. ("libxext" ,libxext)
  900. ("libxft" ,libxft)
  901. ("libxinerama" ,libxinerama)
  902. ("libxpm" ,libxpm)
  903. ("libxrandr" ,libxrandr)
  904. ("libxrender" ,libxrender)))
  905. (description "Fluxbox is a window manager. It is light on resources
  906. and easy to handle yet full of features to make an easy and fast desktop
  907. experience.")
  908. (home-page "http://fluxbox.org/")
  909. (license license:expat)))
  910. (define-public fnott
  911. (package
  912. (name "fnott")
  913. (version "1.1.0")
  914. (source (origin
  915. (method git-fetch)
  916. (uri (git-reference
  917. (url "https://codeberg.org/dnkl/fnott")
  918. (commit version)))
  919. (file-name (git-file-name name version))
  920. (sha256
  921. (base32
  922. "1xaz13iry3fdjhqk9xzg29kbv7hqj8dzzqxr5mhrj8f2m013jdc3"))))
  923. (build-system meson-build-system)
  924. (arguments `(#:build-type "release"))
  925. (native-inputs
  926. `(("pkg-config" ,pkg-config)
  927. ("wayland-protocols" ,wayland-protocols)
  928. ("tllist" ,tllist)
  929. ("gcc" ,gcc-10) ;TODO: Remove when the default compiler is > GCC 7.
  930. ("scdoc" ,scdoc)))
  931. (inputs
  932. `(("wlroots" ,wlroots)
  933. ("wayland" ,wayland)
  934. ("fcft" ,fcft)
  935. ("dbus" ,dbus)
  936. ("libpng" ,libpng)))
  937. (home-page "https://codeberg.org/dnkl/fnott")
  938. (synopsis "Keyboard driven and lightweight Wayland notification daemon")
  939. (description "Fnott is a keyboard driven and lightweight notification daemon
  940. for wlroots-based Wayland compositors.")
  941. (license license:expat)))
  942. (define-public awesome
  943. (package
  944. (name "awesome")
  945. (version "4.3")
  946. (source
  947. (origin
  948. (method url-fetch)
  949. (uri (string-append
  950. "https://github.com/awesomeWM/awesome-releases/raw/master/"
  951. "awesome-" version ".tar.xz"))
  952. (sha256
  953. (base32 "0lqpw401mkkmp9wgbvrmm45bqq2j9357l4irwdqv6l1305pls9kq"))
  954. (modules '((guix build utils)
  955. (srfi srfi-19)))
  956. (snippet
  957. '(begin
  958. ;; Remove non-reproducible timestamp and use the date of
  959. ;; the source file instead.
  960. (substitute* "common/version.c"
  961. (("__DATE__ \" \" __TIME__")
  962. (date->string
  963. (time-utc->date
  964. (make-time time-utc 0 (stat:mtime (stat "awesome.c"))))
  965. "\"~c\"")))
  966. #t))
  967. (patches
  968. (search-patches "awesome-reproducible-png.patch"))))
  969. (build-system cmake-build-system)
  970. (native-inputs
  971. `(("asciidoc" ,asciidoc)
  972. ("docbook-xsl" ,docbook-xsl)
  973. ("doxygen" ,doxygen)
  974. ("gperf" ,gperf)
  975. ("imagemagick" ,imagemagick)
  976. ("libxml2" ,libxml2) ;for XML_CATALOG_FILES
  977. ("lua-ldoc" ,lua-ldoc)
  978. ("pkg-config" ,pkg-config)
  979. ("xmlto" ,xmlto)))
  980. (inputs
  981. `(("cairo" ,cairo)
  982. ("dbus" ,dbus)
  983. ("gdk-pixbuf" ,gdk-pixbuf)
  984. ("glib" ,glib)
  985. ("gobject-introspection" ,gobject-introspection)
  986. ("imlib2" ,imlib2)
  987. ("libev" ,libev)
  988. ("libxcb" ,libxcb)
  989. ("libxcursor" ,libxcursor)
  990. ("libxdg-basedir" ,libxdg-basedir)
  991. ("libxkbcommon" ,libxkbcommon)
  992. ("lua" ,lua)
  993. ("lua-lgi" ,lua-lgi)
  994. ("pango" ,pango)
  995. ("startup-notification" ,startup-notification)
  996. ("xcb-util" ,xcb-util)
  997. ("xcb-util-cursor" ,xcb-util-cursor)
  998. ("xcb-util-image" ,xcb-util-image)
  999. ("xcb-util-keysyms" ,xcb-util-keysyms)
  1000. ("xcb-util-renderutil" ,xcb-util-renderutil)
  1001. ("xcb-util-xrm" ,xcb-util-xrm)
  1002. ("xcb-util-wm" ,xcb-util-wm)))
  1003. (arguments
  1004. `(#:modules ((guix build cmake-build-system)
  1005. (guix build utils)
  1006. (ice-9 match))
  1007. ;; Let compression happen in our 'compress-documentation' phase
  1008. ;; so that '--no-name' is used, which removes timestamps from
  1009. ;; gzip output.
  1010. #:configure-flags
  1011. '("-DCOMPRESS_MANPAGES=off")
  1012. ;; Building awesome in its source directory is no longer
  1013. ;; supported.
  1014. #:out-of-source? #t
  1015. #:phases
  1016. (modify-phases %standard-phases
  1017. (add-before 'configure 'set-paths
  1018. (lambda* (#:key inputs #:allow-other-keys)
  1019. (substitute* "lib/awful/completion.lua"
  1020. (("/usr/bin/env")
  1021. ""))
  1022. ;; The build process needs to load Cairo dynamically.
  1023. (let* ((cairo (string-append (assoc-ref inputs "cairo") "/lib"))
  1024. (lua-version ,(version-major+minor (package-version lua)))
  1025. (lua-dependencies
  1026. (filter (match-lambda
  1027. ((label . _) (string-prefix? "lua-" label)))
  1028. inputs))
  1029. (lua-path
  1030. (string-join
  1031. (map (match-lambda
  1032. ((_ . dir)
  1033. (string-append
  1034. dir "/share/lua/" lua-version "/?.lua;"
  1035. dir "/share/lua/" lua-version "/?/?.lua")))
  1036. lua-dependencies)
  1037. ";"))
  1038. (lua-cpath
  1039. (string-join
  1040. (map (match-lambda
  1041. ((_ . dir)
  1042. (string-append
  1043. dir "/lib/lua/" lua-version "/?.so;"
  1044. dir "/lib/lua/" lua-version "/?/?.so")))
  1045. lua-dependencies)
  1046. ";")))
  1047. (setenv "LD_LIBRARY_PATH" cairo)
  1048. (setenv "LUA_PATH" (string-append "?.lua;" lua-path))
  1049. (setenv "LUA_CPATH" lua-cpath)
  1050. #t)))
  1051. (replace 'check
  1052. (lambda _
  1053. ;; There aren't any tests, so just make sure the binary
  1054. ;; gets built and can be run successfully.
  1055. (invoke "../build/awesome" "-v")))
  1056. (add-after 'install 'patch-session-file
  1057. (lambda* (#:key outputs #:allow-other-keys)
  1058. (let* ((out (assoc-ref outputs "out"))
  1059. (awesome (string-append out "/bin/awesome")))
  1060. (substitute* (string-append out "/share/xsessions/awesome.desktop")
  1061. (("Exec=awesome") (string-append "Exec=" awesome)))
  1062. #t)))
  1063. (add-after 'install 'wrap
  1064. (lambda* (#:key inputs outputs #:allow-other-keys)
  1065. (let* ((awesome (assoc-ref outputs "out"))
  1066. (cairo (string-append (assoc-ref inputs "cairo") "/lib"))
  1067. (lua-version ,(version-major+minor (package-version lua)))
  1068. (lua-lgi (assoc-ref inputs "lua-lgi")))
  1069. (wrap-program (string-append awesome "/bin/awesome")
  1070. `("LUA_PATH" ";" suffix
  1071. (,(format #f "~a/share/lua/~a/?.lua" lua-lgi lua-version)))
  1072. `("LUA_CPATH" ";" suffix
  1073. (,(format #f "~a/lib/lua/~a/?.so" lua-lgi lua-version)))
  1074. `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))
  1075. `("LD_LIBRARY_PATH" suffix (,cairo)))
  1076. #t))))))
  1077. (home-page "https://awesomewm.org/")
  1078. (synopsis "Highly configurable window manager")
  1079. (description
  1080. "Awesome has been designed as a framework window manager. It is fast, small,
  1081. dynamic and extensible using the Lua programming language.")
  1082. (license license:gpl2+)))
  1083. (define-public menumaker
  1084. (package
  1085. (name "menumaker")
  1086. (version "0.99.12")
  1087. (source
  1088. (origin
  1089. (method url-fetch)
  1090. (uri (string-append "mirror://sourceforge/menumaker/"
  1091. "menumaker-" version ".tar.gz"))
  1092. (sha256
  1093. (base32 "034v5204bsgkzzk6zfa5ia63q95gln47f7hwf96yvad5hrhmd8z3"))))
  1094. (build-system gnu-build-system)
  1095. (inputs
  1096. `(("python" ,python)))
  1097. (synopsis "Heuristics-driven menu generator")
  1098. (description
  1099. "MenuMaker is a menu generation utility for a number of X window
  1100. managers and desktop environments. It is capable of finding lots of
  1101. installed programs and generating a root menu consistent across all
  1102. supported window managers, so one will get (almost) the same menu in
  1103. all of them. Currently supported window managers include:
  1104. @enumerate
  1105. @item BlackBox
  1106. @item Deskmenu
  1107. @item FluxBox
  1108. @item IceWM
  1109. @item OpenBox
  1110. @item PekWM
  1111. @item WindowMaker
  1112. @item XFCE
  1113. @end enumerate\n")
  1114. (home-page "http://menumaker.sourceforge.net/")
  1115. (license license:bsd-2)))
  1116. (define-public keybinder
  1117. (package
  1118. (name "keybinder")
  1119. (version "0.3.1")
  1120. (source
  1121. (origin
  1122. (method url-fetch)
  1123. (uri (string-append "https://github.com/kupferlauncher/keybinder"
  1124. "/releases/download/v" version "/keybinder-"
  1125. version ".tar.gz"))
  1126. (file-name (string-append name "-" version ".tar.gz"))
  1127. (sha256
  1128. (base32
  1129. "0h52hj3ay8mfhwvmfxbxlfyq74hifdk8wxgxp7fr4iy6189hg7w7"))))
  1130. (build-system gnu-build-system)
  1131. (inputs
  1132. `(("python-2" ,python-2)
  1133. ("gtk+-2" ,gtk+-2)))
  1134. (native-inputs
  1135. `(("python2-pygtk" ,python2-pygtk)
  1136. ("gtk-doc" ,gtk-doc)
  1137. ("pkg-config" ,pkg-config)))
  1138. (synopsis "Library for registering global keyboard shortcuts")
  1139. (description
  1140. "Keybinder is a library for registering global keyboard shortcuts.
  1141. Keybinder works with GTK-based applications using the X Window System.")
  1142. (home-page "https://github.com/kupferlauncher/keybinder")
  1143. (license license:gpl2+)))
  1144. (define-public keybinder-3.0
  1145. (package
  1146. (name "keybinder-3.0")
  1147. (version "0.3.2")
  1148. (source
  1149. (origin
  1150. (method url-fetch)
  1151. (uri (string-append "https://github.com/kupferlauncher/keybinder"
  1152. "/releases/download/" name "-v" version "/" name "-"
  1153. version ".tar.gz"))
  1154. (file-name (string-append name "-" version ".tar.gz"))
  1155. (sha256
  1156. (base32
  1157. "0830ihwnalw59pp1xzrp37dn58n8vwb8zasnm4a1h81v3x7dxqz6"))))
  1158. (build-system gnu-build-system)
  1159. (inputs
  1160. `(("gtk+" ,gtk+)
  1161. ("gobject-introspection" ,gobject-introspection)))
  1162. (native-inputs
  1163. `(("gtk-doc" ,gtk-doc)
  1164. ("pkg-config" ,pkg-config)))
  1165. (synopsis "Library for registering global keyboard shortcuts, Gtk3 version")
  1166. (description
  1167. "Keybinder is a library for registering global keyboard shortcuts.
  1168. Keybinder works with GTK-based applications using the X Window System.")
  1169. (home-page "https://github.com/kupferlauncher/keybinder")
  1170. (license license:x11)))
  1171. (define-public spectrwm
  1172. (package
  1173. (name "spectrwm")
  1174. (version "3.2.0")
  1175. (source
  1176. (origin
  1177. (method git-fetch)
  1178. (uri (git-reference
  1179. (url "https://github.com/conformal/spectrwm")
  1180. (commit
  1181. (string-append "SPECTRWM_"
  1182. (string-join (string-split version #\.) "_")))))
  1183. (file-name (git-file-name name version))
  1184. (sha256
  1185. (base32 "1dfqy5f0s1nv6rqkz9lj006vypmp4rwxd5vczfk3ndzqgnh19kw6"))))
  1186. (build-system gnu-build-system)
  1187. (arguments
  1188. `(#:make-flags (let ((pkg-config (lambda (flag)
  1189. (string-append
  1190. "$(shell pkg-config " flag " "
  1191. "xft fontconfig x11 libpng)"))))
  1192. (list
  1193. "CC=gcc"
  1194. (string-append "PREFIX=" %output)
  1195. (string-append "INCS=-I. " (pkg-config "--cflags"))
  1196. (string-append "LIBS=" (pkg-config "--libs") " -lm")))
  1197. #:tests? #f ;no test suite
  1198. #:phases
  1199. (modify-phases %standard-phases
  1200. (add-before 'build 'change-dir
  1201. (lambda _
  1202. (chdir "linux") #t))
  1203. (add-after 'change-dir 'patch-makefile
  1204. (lambda _
  1205. (substitute* "Makefile"
  1206. (("-g") ""))))
  1207. (delete 'configure)))) ;no 'configure' exists
  1208. (inputs
  1209. `(("freetype" ,freetype)
  1210. ("fontconfig" ,fontconfig)
  1211. ("libx11" ,libx11)
  1212. ("libxcursor" ,libxcursor)
  1213. ("libxrandr" ,libxrandr)
  1214. ("libxtst" ,libxtst)
  1215. ("libxft" ,libxft)
  1216. ("xcb-util" ,xcb-util)
  1217. ("xcb-util-wm" ,xcb-util-wm)
  1218. ("xcb-util-keysyms" ,xcb-util-keysyms)))
  1219. (native-inputs
  1220. `(("libxt" ,libxt)
  1221. ("pkg-config" ,pkg-config)))
  1222. (synopsis "Minimalistic automatic tiling window manager")
  1223. (description
  1224. "Spectrwm is a small dynamic tiling and reparenting window manager for X11.
  1225. It is inspired by Xmonad and dwm. Its major features include:
  1226. @itemize
  1227. @item Navigation anywhere on all screens with either the keyboard or mouse
  1228. @item Customizable status bar
  1229. @item Restartable without losing state
  1230. @item Quick launch menu
  1231. @item Many screen layouts possible with a few simple key strokes
  1232. @item Move/resize floating windows
  1233. @item Extended Window Manager Hints (@dfn{EWMH}) support
  1234. @item Configurable tiling
  1235. @item Adjustable tile gap allows for a true one pixel border
  1236. @item Customizable colors and border width
  1237. @end itemize\n")
  1238. (home-page "https://github.com/conformal/spectrwm")
  1239. (license license:isc)))
  1240. (define-public cwm
  1241. (package
  1242. (name "cwm")
  1243. (version "6.7")
  1244. (source
  1245. (origin
  1246. (method url-fetch)
  1247. (uri (string-append "https://leahneukirchen.org/releases/cwm-"
  1248. version ".tar.gz"))
  1249. (sha256
  1250. (base32 "022zld29qawd8gl700g4m24qa89il3aks397zkhh66wvzssdblzx"))))
  1251. (build-system gnu-build-system)
  1252. (arguments
  1253. `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
  1254. (string-append "PREFIX=" %output))
  1255. #:tests? #f
  1256. #:phases
  1257. (modify-phases %standard-phases
  1258. (delete 'configure)
  1259. (add-after 'build 'install-xsession
  1260. (lambda* (#:key outputs #:allow-other-keys)
  1261. ;; Add a .desktop file to xsessions.
  1262. (let* ((output (assoc-ref outputs "out"))
  1263. (xsessions (string-append output "/share/xsessions")))
  1264. (mkdir-p xsessions)
  1265. (with-output-to-file
  1266. (string-append xsessions "/cwm.desktop")
  1267. (lambda _
  1268. (format #t
  1269. "[Desktop Entry]~@
  1270. Name=cwm~@
  1271. Comment=OpenBSD Calm Window Manager fork~@
  1272. Exec=~a/bin/cwm~@
  1273. TryExec=~@*~a/bin/cwm~@
  1274. Icon=~@
  1275. Type=Application~%"
  1276. output)))
  1277. #t))))))
  1278. (inputs
  1279. `(("libxft" ,libxft)
  1280. ("libxrandr" ,libxrandr)
  1281. ("libxinerama" ,libxinerama)))
  1282. (native-inputs
  1283. `(("pkg-config" ,pkg-config)
  1284. ("bison" ,bison)))
  1285. (home-page "https://github.com/leahneukirchen/cwm")
  1286. (synopsis "OpenBSD fork of the calmwm window manager")
  1287. (description "Cwm is a stacking window manager for X11. It is an OpenBSD
  1288. project derived from the original Calm Window Manager.")
  1289. (license license:isc)))
  1290. (define-public dwl
  1291. (package
  1292. (name "dwl")
  1293. (version "0.2")
  1294. (source (origin
  1295. (method git-fetch)
  1296. (uri (git-reference
  1297. (url "https://github.com/djpohly/dwl")
  1298. (commit (string-append "v" version))))
  1299. (file-name (git-file-name name version))
  1300. (sha256
  1301. (base32
  1302. "0r5hsxpckkrq1y7bjfq58rlc5xy45z499rg628q3nh289978ail1"))))
  1303. (build-system gnu-build-system)
  1304. (arguments
  1305. `(#:tests? #f ; no tests
  1306. #:make-flags
  1307. (list
  1308. (string-append "CC=" ,(cc-for-target))
  1309. (string-append "PREFIX=" (assoc-ref %outputs "out")))
  1310. #:phases
  1311. (modify-phases %standard-phases
  1312. (delete 'configure)))) ; no configure
  1313. (native-inputs
  1314. `(("pkg-config" ,pkg-config)))
  1315. (inputs
  1316. `(("wlroots" ,wlroots)))
  1317. (home-page "https://github.com/djpohly/dwl")
  1318. (synopsis "Dynamic window manager for Wayland")
  1319. (description
  1320. "@command{dwl} is a compact, hackable compositor for Wayland based on
  1321. wlroots. It is intended to fill the same space in the Wayland world that dwm
  1322. does in X11, primarily in terms of philosophy, and secondarily in terms of
  1323. functionality. Like dwm, dwl is easy to understand and hack on, due to a
  1324. limited size and a few external dependencies. It is configurable via
  1325. @file{config.h}.")
  1326. ;; LICENSE LICENSE.dwm LICENSE.tinywl
  1327. (license (list license:gpl3+ license:expat license:cc0))))
  1328. (define-public nitrogen
  1329. (package
  1330. (name "nitrogen")
  1331. (version "1.6.1")
  1332. (source (origin
  1333. (method url-fetch)
  1334. (uri (string-append "http://github.com/l3ib/nitrogen/"
  1335. "releases/download/" version "/"
  1336. name "-" version ".tar.gz"))
  1337. (sha256
  1338. (base32
  1339. "0zc3fl1mbhq0iyndy4ysmy8vv5c7xwf54rbgamzfhfvsgdq160pl"))))
  1340. (build-system gnu-build-system)
  1341. (inputs
  1342. `(("gtk+" ,gtk+-2)
  1343. ("gtkmm" ,gtkmm-2)
  1344. ("glib" ,glib)
  1345. ("glibmm" ,glibmm)))
  1346. (native-inputs
  1347. `(("pkg-config" ,pkg-config)))
  1348. (home-page "http://projects.l3ib.org/nitrogen/")
  1349. (synopsis "Background browser and setter for X windows")
  1350. (description
  1351. "This package is a background browser and setter for X windows. It's
  1352. features are:
  1353. @itemize
  1354. @item Multihead and Xinerama aware
  1355. @item Recall mode to used via startup script
  1356. @item Uses freedesktop.org standard for thumbnails
  1357. @item Can set GNOME background
  1358. @item Command lie set modes for script use
  1359. @item Inotify monitoring of browse directory
  1360. @item Lazy loading of thumbnails - conserves memory
  1361. @item \"Automatic\" set mode - determines best mode to set an image based on
  1362. its size
  1363. @item Display preview images in a tiled icon layout
  1364. @end itemize")
  1365. (license license:gpl2+)))
  1366. (define-public polybar
  1367. (package
  1368. (name "polybar")
  1369. (version "3.5.5")
  1370. (source
  1371. (origin
  1372. (method url-fetch)
  1373. (uri (string-append "https://github.com/polybar/polybar/releases/"
  1374. "download/" version "/polybar-" version ".tar.gz"))
  1375. (sha256
  1376. (base32 "1c8br9972x1qw7l2shj9aqzv0gsx58fdh3r0f1z5i1bqdwxmsqky"))))
  1377. (build-system cmake-build-system)
  1378. (arguments
  1379. ;; Test is disabled because it requires downloading googletest from the
  1380. ;; Internet.
  1381. '(#:tests? #f))
  1382. (inputs
  1383. `(("alsa-lib" ,alsa-lib)
  1384. ("cairo" ,cairo)
  1385. ("i3-wm" ,i3-wm)
  1386. ("jsoncpp" ,jsoncpp)
  1387. ("libmpdclient" ,libmpdclient)
  1388. ("libnl" ,libnl)
  1389. ("libxcb" ,libxcb)
  1390. ("pulseaudio" ,pulseaudio)
  1391. ("xcb-proto" ,xcb-proto)
  1392. ("xcb-util" ,xcb-util)
  1393. ("xcb-util-cursor" ,xcb-util-cursor)
  1394. ("xcb-util-image" ,xcb-util-image)
  1395. ("xcb-util-wm" ,xcb-util-wm)
  1396. ("xcb-util-xrm" ,xcb-util-xrm)))
  1397. (native-inputs
  1398. `(("pkg-config" ,pkg-config)
  1399. ("python-sphinx" ,python-sphinx) ; for the manual
  1400. ;; XXX: "python" input must be located after "python-2", or the package
  1401. ;; fails to build with "missing required python module: xcbgen".
  1402. ("python-2" ,python-2) ; lib/xpp depends on python 2
  1403. ("python" ,python))) ; xcb-proto depends on python 3
  1404. (home-page "https://polybar.github.io/")
  1405. (synopsis "Fast and easy-to-use status bar")
  1406. (description "Polybar aims to help users build beautiful and highly
  1407. customizable status bars for their desktop environment. It has built-in
  1408. functionality to display information about the most commonly used services.")
  1409. (license license:expat)))
  1410. (define-public wlroots
  1411. (package
  1412. (name "wlroots")
  1413. (version "0.13.0")
  1414. (source
  1415. (origin
  1416. (method git-fetch)
  1417. (uri (git-reference
  1418. (url "https://github.com/swaywm/wlroots")
  1419. (commit version)))
  1420. (file-name (git-file-name name version))
  1421. (sha256
  1422. (base32 "01plhbnsp5yg18arz0v8fr0pr9l4w4pdzwkg9px486qdvb3s1vgy"))))
  1423. (build-system meson-build-system)
  1424. (arguments
  1425. `(#:configure-flags '("-Dlogind-provider=elogind")
  1426. #:phases
  1427. (modify-phases %standard-phases
  1428. (add-before 'configure 'hardcode-paths
  1429. (lambda* (#:key inputs #:allow-other-keys)
  1430. (substitute* "xwayland/server.c"
  1431. (("Xwayland") (string-append (assoc-ref inputs
  1432. "xorg-server-xwayland")
  1433. "/bin/Xwayland")))
  1434. #t)))))
  1435. (propagated-inputs
  1436. `(;; As required by wlroots.pc.
  1437. ("elogind" ,elogind)
  1438. ("eudev" ,eudev)
  1439. ("libinput" ,libinput)
  1440. ("libxkbcommon" ,libxkbcommon)
  1441. ("mesa" ,mesa)
  1442. ("pixman" ,pixman)
  1443. ("wayland" ,wayland)
  1444. ("wayland-protocols" ,wayland-protocols)
  1445. ("xcb-util-errors" ,xcb-util-errors)
  1446. ("xcb-util-wm" ,xcb-util-wm)
  1447. ("xorg-server-xwayland" ,xorg-server-xwayland)))
  1448. (native-inputs
  1449. `(("pkg-config" ,pkg-config)))
  1450. (home-page "https://github.com/swaywm/wlroots")
  1451. (synopsis "Pluggable, composable, unopinionated modules for building a
  1452. Wayland compositor")
  1453. (description "wlroots is a set of pluggable, composable, unopinionated
  1454. modules for building a Wayland compositor.")
  1455. (license license:expat))) ; MIT license
  1456. (define-public sway
  1457. (package
  1458. (name "sway")
  1459. (version "1.6")
  1460. (source
  1461. (origin
  1462. (method git-fetch)
  1463. (uri (git-reference
  1464. (url "https://github.com/swaywm/sway")
  1465. (commit version)))
  1466. (file-name (git-file-name name version))
  1467. (sha256
  1468. (base32 "0vnplva11yafhbijrk68wy7pw0psn9jm0caaymswq1s951xsn1c8"))))
  1469. (build-system meson-build-system)
  1470. (arguments
  1471. `(#:phases
  1472. (modify-phases %standard-phases
  1473. (add-before 'configure 'hardcode-paths
  1474. (lambda* (#:key inputs #:allow-other-keys)
  1475. ;; Hardcode path to swaybg.
  1476. (substitute* "sway/config.c"
  1477. (("strdup..swaybg..")
  1478. (string-append "strdup(\"" (assoc-ref inputs "swaybg")
  1479. "/bin/swaybg\")")))
  1480. ;; Hardcode path to scdoc.
  1481. (substitute* "meson.build"
  1482. (("scdoc.get_pkgconfig_variable..scdoc..")
  1483. (string-append "'" (assoc-ref inputs "scdoc")
  1484. "/bin/scdoc'")))
  1485. #t)))))
  1486. (inputs `(("cairo" ,cairo)
  1487. ("elogind" ,elogind)
  1488. ("gdk-pixbuf" ,gdk-pixbuf)
  1489. ("json-c" ,json-c)
  1490. ("libevdev" ,libevdev)
  1491. ("libinput" ,libinput)
  1492. ("libxkbcommon" ,libxkbcommon)
  1493. ("pango" ,pango)
  1494. ("swaybg" ,swaybg)
  1495. ("wayland" ,wayland)
  1496. ("wlroots" ,wlroots)))
  1497. (native-inputs
  1498. `(("linux-pam" ,linux-pam)
  1499. ("mesa" ,mesa)
  1500. ("pkg-config" ,pkg-config)
  1501. ("scdoc" ,scdoc)
  1502. ("wayland-protocols" ,wayland-protocols)))
  1503. (home-page "https://github.com/swaywm/sway")
  1504. (synopsis "Wayland compositor compatible with i3")
  1505. (description "Sway is a i3-compatible Wayland compositor.")
  1506. (license license:expat)))
  1507. (define-public swayidle
  1508. (package
  1509. (name "swayidle")
  1510. (version "1.6")
  1511. (source
  1512. (origin
  1513. (method git-fetch)
  1514. (uri (git-reference
  1515. (url "https://github.com/swaywm/swayidle")
  1516. (commit version)))
  1517. (file-name (git-file-name name version))
  1518. (sha256
  1519. (base32 "1nd3v8r9549lykdwh4krldfl59lzaspmmai5k1icy7dvi6kkr18r"))))
  1520. (build-system meson-build-system)
  1521. (arguments
  1522. `(#:configure-flags '("-Dlogind-provider=elogind")))
  1523. (inputs `(("elogind" ,elogind)
  1524. ("wayland" ,wayland)))
  1525. (native-inputs `(("pkg-config" ,pkg-config)
  1526. ("scdoc" ,scdoc)
  1527. ("wayland-protocols" ,wayland-protocols)))
  1528. (home-page "https://github.com/swaywm/swayidle")
  1529. (synopsis "Idle management daemon for Wayland compositors")
  1530. (description "Swayidle is a idle management daemon for Wayland compositors.")
  1531. (license license:expat))) ; MIT license
  1532. (define-public swaylock
  1533. (package
  1534. (name "swaylock")
  1535. (version "1.5")
  1536. (source
  1537. (origin
  1538. (method git-fetch)
  1539. (uri (git-reference
  1540. (url "https://github.com/swaywm/swaylock")
  1541. (commit version)))
  1542. (file-name (git-file-name name version))
  1543. (sha256
  1544. (base32 "0r95p4w11dwm5ra614vddz83r8j7z6gd120z2vcchy7m9b0f15kf"))))
  1545. (build-system meson-build-system)
  1546. (inputs `(("cairo" ,cairo)
  1547. ("gdk-pixbuf" ,gdk-pixbuf)
  1548. ("libxkbcommon" ,libxkbcommon)
  1549. ;("linux-pam" ,linux-pam) ; FIXME: Doesn't work.
  1550. ("wayland" ,wayland)))
  1551. (native-inputs `(("pango" ,pango)
  1552. ("pkg-config" ,pkg-config)
  1553. ("scdoc" ,scdoc)
  1554. ("wayland-protocols" ,wayland-protocols)))
  1555. (home-page "https://github.com/swaywm/sway")
  1556. (synopsis "Screen locking utility for Wayland compositors")
  1557. (description "Swaylock is a screen locking utility for Wayland compositors.")
  1558. (license license:expat))) ; MIT license
  1559. (define-public swaybg
  1560. (package
  1561. (name "swaybg")
  1562. (version "1.0")
  1563. (source
  1564. (origin
  1565. (method git-fetch)
  1566. (uri (git-reference
  1567. (url "https://github.com/swaywm/swaybg")
  1568. (commit version)))
  1569. (file-name (git-file-name name version))
  1570. (sha256
  1571. (base32 "1lmqz5bmig90gq2m7lwf02d2g7z4hzf8fhqz78c8vk92c6p4xwbc"))))
  1572. (build-system meson-build-system)
  1573. (inputs `(("cairo" ,cairo)
  1574. ("gdk-pixbuf" ,gdk-pixbuf)
  1575. ("wayland" ,wayland)))
  1576. (native-inputs `(("pkg-config" ,pkg-config)
  1577. ("scdoc" ,scdoc)
  1578. ("wayland-protocols" ,wayland-protocols)))
  1579. (home-page "https://github.com/swaywm/sway")
  1580. (synopsis "Screen wallpaper utility for Wayland compositors")
  1581. (description "Swaybg is a wallpaper utility for Wayland compositors.")
  1582. (license license:expat))) ; MIT license
  1583. (define-public waybar
  1584. (package
  1585. (name "waybar")
  1586. (version "0.9.7")
  1587. (source
  1588. (origin
  1589. (method git-fetch)
  1590. (uri (git-reference
  1591. (url "https://github.com/Alexays/Waybar")
  1592. (commit version)))
  1593. (file-name (git-file-name name version))
  1594. (sha256
  1595. (base32 "17cn4d3dx92v40jd9vl41smp8hh3gf5chd1j2f7l1lrpfpnllg5x"))))
  1596. (build-system meson-build-system)
  1597. (inputs `(("date" ,date)
  1598. ("fmt" ,fmt)
  1599. ("gtk-layer-shell" ,gtk-layer-shell)
  1600. ("gtkmm" ,gtkmm)
  1601. ("jsoncpp" ,jsoncpp)
  1602. ("libdbusmenu" ,libdbusmenu)
  1603. ("libinput" ,libinput)
  1604. ("libmpdclent" ,libmpdclient)
  1605. ("libnl" ,libnl)
  1606. ("pulseaudio" ,pulseaudio)
  1607. ("spdlog" ,spdlog)
  1608. ("wayland" ,wayland)))
  1609. (native-inputs
  1610. `(("glib:bin" ,glib "bin")
  1611. ("pkg-config" ,pkg-config)
  1612. ("scdoc" ,scdoc)
  1613. ("wayland-protocols" ,wayland-protocols)))
  1614. (home-page "https://github.com/Alexays/Waybar")
  1615. (synopsis "Wayland bar for Sway and Wlroots based compositors")
  1616. (description "Waybar is a highly customisable Wayland bar for Sway and
  1617. Wlroots based compositors.")
  1618. (license license:expat))) ; MIT license
  1619. (define-public wlr-randr
  1620. (package
  1621. (name "wlr-randr")
  1622. (version "0.1.0")
  1623. (source
  1624. (origin
  1625. (method git-fetch)
  1626. (uri (git-reference
  1627. (url "https://github.com/emersion/wlr-randr")
  1628. (commit (string-append "v" version))))
  1629. (file-name (git-file-name name version))
  1630. (sha256
  1631. (base32 "10c8zzp78s5bw34vvjhilipa28bsdx3jbyhnxgp8f8kawh3cvgsc"))))
  1632. (build-system meson-build-system)
  1633. (inputs `(("wayland" ,wayland)))
  1634. (native-inputs `(("pkg-config" ,pkg-config)))
  1635. (home-page "https://github.com/emersion/wlr-randr")
  1636. (synopsis "Utility to manage Wayland compositor outputs")
  1637. (description "wlr-randr is a utility to manage outputs of a Wayland compositor.")
  1638. (license license:expat))) ; MIT license
  1639. (define-public mako
  1640. (package
  1641. (name "mako")
  1642. (version "1.4.1")
  1643. (source
  1644. (origin
  1645. (method git-fetch)
  1646. (uri (git-reference
  1647. (url "https://github.com/emersion/mako")
  1648. (commit (string-append "v" version))))
  1649. (file-name (git-file-name name version))
  1650. (sha256
  1651. (base32 "0hwvibpnrximb628w9dsfjpi30b5jy7nfkm4d94z5vhp78p43vxh"))))
  1652. (build-system meson-build-system)
  1653. (inputs `(("cairo" ,cairo)
  1654. ("elogind" ,elogind)
  1655. ("gdk-pixbuf" ,gdk-pixbuf)
  1656. ("pango" ,pango)
  1657. ("wayland" ,wayland)))
  1658. (native-inputs `(("pkg-config" ,pkg-config)
  1659. ("scdoc" ,scdoc)
  1660. ("wayland-protocols" ,wayland-protocols)))
  1661. (home-page "https://wayland.emersion.fr/mako")
  1662. (synopsis "Lightweight Wayland notification daemon")
  1663. (description "Mako is a lightweight notification daemon for Wayland
  1664. compositors that support the layer-shell protocol.")
  1665. (license license:expat))) ; MIT license
  1666. (define-public kanshi
  1667. (package
  1668. (name "kanshi")
  1669. (version "1.1.0")
  1670. (source
  1671. (origin
  1672. (method git-fetch)
  1673. (uri (git-reference
  1674. (url "https://github.com/emersion/kanshi")
  1675. (commit (string-append "v" version))))
  1676. (file-name (git-file-name name version))
  1677. (sha256
  1678. (base32 "0nbpgm8qnn7ljsg9vgs35kl8l4rrk542vdcbx8wrn9r909ld3x92"))))
  1679. (build-system meson-build-system)
  1680. (inputs `(("wayland" ,wayland)))
  1681. (native-inputs `(("pkg-config" ,pkg-config)
  1682. ("scdoc" ,scdoc)))
  1683. (home-page "https://wayland.emersion.fr/kanshi")
  1684. (synopsis "Hotswappable output profiles for Wayland")
  1685. (description "Kanshi allows you to define output profiles that are
  1686. automatically enabled and disabled on hotplug. Kanshi can be used with
  1687. Wayland compositors supporting the wlr-output-management protocol.")
  1688. (license license:expat))) ; MIT license
  1689. (define-public stumpwm
  1690. (package
  1691. (name "stumpwm")
  1692. (version "20.11")
  1693. (source
  1694. (origin
  1695. (method git-fetch)
  1696. (uri (git-reference
  1697. (url "https://github.com/stumpwm/stumpwm")
  1698. (commit version)))
  1699. (file-name (git-file-name "stumpwm" version))
  1700. (sha256
  1701. (base32 "1ghs6ihvmb3bz4q4ys1d3h6rdi96xyiw7l2ip7jh54c25049aymf"))))
  1702. (build-system asdf-build-system/sbcl)
  1703. (native-inputs `(("fiasco" ,sbcl-fiasco)
  1704. ("texinfo" ,texinfo)
  1705. ;; To build the manual.
  1706. ("autoconf" ,autoconf)
  1707. ("automake" ,automake)))
  1708. (inputs `(("cl-ppcre" ,sbcl-cl-ppcre)
  1709. ("clx" ,sbcl-clx)
  1710. ("alexandria" ,sbcl-alexandria)))
  1711. (outputs '("out" "lib"))
  1712. (arguments
  1713. '(#:asd-systems '("stumpwm")
  1714. #:phases
  1715. (modify-phases %standard-phases
  1716. (add-after 'create-asdf-configuration 'build-program
  1717. (lambda* (#:key outputs #:allow-other-keys)
  1718. (build-program
  1719. (string-append (assoc-ref outputs "out") "/bin/stumpwm")
  1720. outputs
  1721. #:entry-program '((stumpwm:stumpwm) 0))))
  1722. (add-after 'build-program 'create-desktop-file
  1723. (lambda* (#:key outputs #:allow-other-keys)
  1724. (let* ((out (assoc-ref outputs "out"))
  1725. (xsessions (string-append out "/share/xsessions")))
  1726. (mkdir-p xsessions)
  1727. (call-with-output-file
  1728. (string-append xsessions "/stumpwm.desktop")
  1729. (lambda (file)
  1730. (format file
  1731. "[Desktop Entry]~@
  1732. Name=stumpwm~@
  1733. Comment=The Stump Window Manager~@
  1734. Exec=~a/bin/stumpwm~@
  1735. TryExec=~@*~a/bin/stumpwm~@
  1736. Icon=~@
  1737. Type=Application~%"
  1738. out)))
  1739. #t)))
  1740. (add-after 'install 'install-manual
  1741. (lambda* (#:key (make-flags '()) outputs #:allow-other-keys)
  1742. (let* ((out (assoc-ref outputs "out"))
  1743. (info (string-append out "/share/info")))
  1744. (invoke "./autogen.sh")
  1745. (invoke "sh" "./configure" "SHELL=sh")
  1746. (apply invoke "make" "stumpwm.info" make-flags)
  1747. (install-file "stumpwm.info" info)
  1748. #t))))))
  1749. (synopsis "Window manager written in Common Lisp")
  1750. (description "Stumpwm is a window manager written entirely in Common Lisp.
  1751. It attempts to be highly customizable while relying entirely on the keyboard
  1752. for input. These design decisions reflect the growing popularity of
  1753. productive, customizable lisp based systems.")
  1754. (home-page "https://github.com/stumpwm/stumpwm")
  1755. (license license:gpl2+)
  1756. (properties `((cl-source-variant . ,(delay cl-stumpwm))))))
  1757. (define-public sbcl-stumpwm
  1758. (deprecated-package "sbcl-stumpwm" stumpwm))
  1759. (define-public cl-stumpwm
  1760. (package
  1761. (inherit (sbcl-package->cl-source-package stumpwm))
  1762. (name "cl-stumpwm")))
  1763. (define-public stumpwm+slynk
  1764. (package
  1765. (inherit stumpwm)
  1766. (name "stumpwm-with-slynk")
  1767. (outputs '("out"))
  1768. (inputs
  1769. `(("stumpwm" ,stumpwm "lib")
  1770. ("slynk" ,sbcl-slynk)))
  1771. (arguments
  1772. (substitute-keyword-arguments (package-arguments stumpwm)
  1773. ((#:phases phases)
  1774. `(modify-phases ,phases
  1775. (replace 'build-program
  1776. (lambda* (#:key inputs outputs #:allow-other-keys)
  1777. (let* ((out (assoc-ref outputs "out"))
  1778. (program (string-append out "/bin/stumpwm")))
  1779. (setenv "HOME" "/tmp")
  1780. (build-program program outputs
  1781. #:entry-program '((stumpwm:stumpwm) 0)
  1782. #:dependencies '("stumpwm" "slynk")
  1783. #:dependency-prefixes
  1784. (map (lambda (input) (assoc-ref inputs input))
  1785. '("stumpwm" "slynk")))
  1786. #t)))
  1787. (delete 'copy-source)
  1788. (delete 'build)
  1789. (delete 'check)
  1790. (delete 'cleanup)))))))
  1791. (define stumpwm-contrib
  1792. (let ((commit "a7dc1c663d04e6c73a4772c8a6ad56a34381096a")
  1793. (revision "3"))
  1794. (package
  1795. (name "stumpwm-contrib")
  1796. (version (git-version "0.0.1" revision commit)) ;no upstream release
  1797. (source
  1798. (origin
  1799. (method git-fetch)
  1800. (uri (git-reference
  1801. (url "https://github.com/stumpwm/stumpwm-contrib")
  1802. (commit commit)))
  1803. (file-name (git-file-name name version))
  1804. (sha256
  1805. (base32 "09akdaaya7lga5lzbq1aj1filsyjwvflghkidpmr0nk0jz5xx1g7"))))
  1806. (build-system asdf-build-system/sbcl)
  1807. (inputs
  1808. `(("stumpwm" ,stumpwm "lib")))
  1809. (home-page "https://github.com/stumpwm/stumpwm-contrib")
  1810. (synopsis "StumpWM interactive shell")
  1811. (description "This package provides a StumpWM interactive shell.")
  1812. (license (list license:gpl2+ license:gpl3+ license:bsd-2)))))
  1813. (define-public stumpish
  1814. (package
  1815. (inherit stumpwm-contrib)
  1816. (name "stumpish")
  1817. (inputs
  1818. `(("bash" ,bash)
  1819. ("rlwrap" ,rlwrap)
  1820. ("xprop" ,xprop)))
  1821. (build-system trivial-build-system)
  1822. (arguments
  1823. '(#:modules ((guix build utils))
  1824. #:builder
  1825. (begin
  1826. (use-modules (guix build utils))
  1827. (copy-recursively (assoc-ref %build-inputs "source") ".")
  1828. (chdir "util/stumpish")
  1829. (substitute* "stumpish"
  1830. (("rlwrap") (string-append (assoc-ref %build-inputs "rlwrap")
  1831. "/bin/rlwrap"))
  1832. (("xprop") (string-append (assoc-ref %build-inputs "xprop")
  1833. "/bin/xprop"))
  1834. (("/bin/sh") (string-append (assoc-ref %build-inputs "bash")
  1835. "/bin/bash")))
  1836. (install-file "stumpish" (string-append %output "/bin")))))
  1837. (home-page "https://github.com/stumpwm/stumpwm-contrib")
  1838. (synopsis "StumpWM interactive shell")
  1839. (description "This package provides a StumpWM interactive shell.")
  1840. (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
  1841. (define-public sbcl-stumpwm+slynk
  1842. (deprecated-package "sbcl-stumpwm-with-slynk" stumpwm+slynk))
  1843. (define-public sbcl-stumpwm-ttf-fonts
  1844. (package
  1845. (inherit stumpwm-contrib)
  1846. (name "sbcl-stumpwm-ttf-fonts")
  1847. (inputs
  1848. `(("stumpwm" ,stumpwm "lib")
  1849. ("clx-truetype" ,sbcl-clx-truetype)))
  1850. (arguments
  1851. '(#:asd-systems '("ttf-fonts")
  1852. #:tests? #f
  1853. #:phases
  1854. (modify-phases %standard-phases
  1855. (add-after 'unpack 'chdir
  1856. (lambda _ (chdir "util/ttf-fonts") #t)))))
  1857. (home-page "https://github.com/stumpwm/stumpwm-contrib")
  1858. (synopsis "Implementation of TTF font rendering for Lisp")
  1859. (description "This package provides a Lisp implementation of TTF font
  1860. rendering.")
  1861. (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
  1862. (define-public sbcl-stumpwm-pass
  1863. (package
  1864. (inherit stumpwm-contrib)
  1865. (name "sbcl-stumpwm-pass")
  1866. (arguments
  1867. '(#:asd-systems '("pass")
  1868. #:tests? #f
  1869. #:phases
  1870. (modify-phases %standard-phases
  1871. (add-after 'unpack 'chdir
  1872. (lambda _ (chdir "util/pass") #t)))))
  1873. (home-page "https://github.com/stumpwm/stumpwm-contrib")
  1874. (synopsis "Integrate @code{pass} with StumpWM")
  1875. (description "This package provides an interface which integrates
  1876. password-store into StumpWM.")
  1877. (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
  1878. (define-public sbcl-stumpwm-globalwindows
  1879. (package
  1880. (inherit stumpwm-contrib)
  1881. (name "sbcl-stumpwm-globalwindows")
  1882. (arguments
  1883. '(#:asd-systems '("globalwindows")
  1884. #:tests? #f
  1885. #:phases
  1886. (modify-phases %standard-phases
  1887. (add-after 'unpack 'chdir
  1888. (lambda _ (chdir "util/globalwindows") #t)))))
  1889. (home-page "https://github.com/stumpwm/stumpwm-contrib")
  1890. (synopsis "Manipulate all windows in the current X session")
  1891. (description "This package provides a StumpWM module to manipulate all
  1892. windows in the current X session.")
  1893. (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
  1894. (define-public sbcl-stumpwm-swm-gaps
  1895. (package
  1896. (inherit stumpwm-contrib)
  1897. (name "sbcl-stumpwm-swm-gaps")
  1898. (arguments
  1899. '(#:asd-systems '("swm-gaps")
  1900. #:tests? #f
  1901. #:phases
  1902. (modify-phases %standard-phases
  1903. (add-after 'unpack 'chdir
  1904. (lambda _ (chdir "util/swm-gaps") #t)))))
  1905. (home-page "https://github.com/stumpwm/stumpwm-contrib")
  1906. (synopsis "Gaps between windows for StumpWM")
  1907. (description "This package provides a StumpWM module which adds gaps
  1908. between windows.")
  1909. (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
  1910. (define-public sbcl-stumpwm-net
  1911. (package
  1912. (inherit stumpwm-contrib)
  1913. (name "sbcl-stumpwm-net")
  1914. (arguments
  1915. '(#:asd-systems '("net")
  1916. #:tests? #f
  1917. #:phases
  1918. (modify-phases %standard-phases
  1919. (add-after 'unpack 'chdir (lambda _ (chdir "modeline/net") #t)))))
  1920. (home-page
  1921. "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/net")
  1922. (synopsis "Modeline support for network connectivity")
  1923. (description "Modeline support for network connectivity.")
  1924. (supported-systems
  1925. (filter (lambda (a) (string-contains a "linux")) %supported-systems))
  1926. (license license:gpl3+)))
  1927. (define-public sbcl-stumpwm-wifi
  1928. (package
  1929. (inherit stumpwm-contrib)
  1930. (name "sbcl-stumpwm-wifi")
  1931. (arguments
  1932. '(#:asd-systems '("wifi")
  1933. #:tests? #f
  1934. #:phases
  1935. (modify-phases %standard-phases
  1936. (add-after 'unpack 'chdir (lambda _ (chdir "modeline/wifi") #t)))))
  1937. (home-page
  1938. "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/wifi")
  1939. (synopsis "Modeline support for wifi connectivity")
  1940. (description "Modeline support for wifi connectivity.")
  1941. (supported-systems
  1942. (filter (lambda (a) (string-contains a "linux")) %supported-systems))
  1943. (license license:gpl3+)))
  1944. (define-public sbcl-stumpwm-stumptray
  1945. (package
  1946. (inherit stumpwm-contrib)
  1947. (name "sbcl-stumpwm-stumptray")
  1948. (arguments
  1949. '(#:asd-systems '("stumptray")
  1950. #:tests? #f
  1951. #:phases
  1952. (modify-phases %standard-phases
  1953. (add-after 'unpack 'chdir (lambda _ (chdir "modeline/stumptray") #t)))))
  1954. (inputs
  1955. `(("stumpwm" ,stumpwm "lib")
  1956. ("xembed" ,sbcl-clx-xembed)
  1957. ("alexandria" ,sbcl-alexandria)))
  1958. (home-page
  1959. "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/stumptray")
  1960. (synopsis "Modeline support for stumptray connectivity")
  1961. (description "Modeline support for stumptray connectivity.")
  1962. (supported-systems
  1963. (filter (lambda (a) (string-contains a "linux")) %supported-systems))
  1964. (license license:gpl3+)))
  1965. (define-public sbcl-stumpwm-kbd-layouts
  1966. (package
  1967. (inherit stumpwm-contrib)
  1968. (name "sbcl-stumpwm-kbd-layouts")
  1969. (arguments
  1970. '(#:asd-systems '("kbd-layouts")
  1971. #:tests? #f
  1972. #:phases
  1973. (modify-phases %standard-phases
  1974. (add-after 'unpack 'chdir (lambda _ (chdir "util/kbd-layouts") #t)))))
  1975. (home-page
  1976. "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/kbd-layouts")
  1977. (synopsis "Keyboard layout switcher for StumpWM")
  1978. (description "Keyboard layout switcher for StumpWM")
  1979. (license license:gpl3+)))
  1980. (define-public sbcl-stumpwm-numpad-layouts
  1981. (package
  1982. (inherit stumpwm-contrib)
  1983. (name "sbcl-stumpwm-numpad-layouts")
  1984. (arguments
  1985. '(#:asd-systems '("numpad-layouts")
  1986. #:tests? #f
  1987. #:phases
  1988. (modify-phases %standard-phases
  1989. (add-after 'unpack 'chdir
  1990. (lambda _
  1991. (chdir "util/numpad-layouts"))))))
  1992. (home-page
  1993. "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/numpad-layouts")
  1994. (synopsis "Keyboard numpad layouts for StumpWM")
  1995. (description "This is a module for handling different keyboards numpad
  1996. layouts in StumpWM.")
  1997. (license license:gpl3+)))
  1998. (define-public sbcl-stumpwm-cpu
  1999. (package
  2000. (inherit stumpwm-contrib)
  2001. (name "sbcl-stumpwm-cpu")
  2002. (arguments
  2003. '(#:asd-systems '("cpu")
  2004. #:tests? #f
  2005. #:phases
  2006. (modify-phases %standard-phases
  2007. (add-after 'unpack 'chdir
  2008. (lambda _
  2009. (chdir "modeline/cpu"))))))
  2010. (home-page
  2011. "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/cpu")
  2012. (synopsis "Modeline support for CPU info")
  2013. (description "Modeline support for CPU info.")
  2014. (license license:gpl3+)))
  2015. (define-public sbcl-stumpwm-disk
  2016. (package
  2017. (inherit stumpwm-contrib)
  2018. (name "sbcl-stumpwm-disk")
  2019. (arguments
  2020. '(#:asd-systems '("disk")
  2021. #:tests? #f
  2022. #:phases
  2023. (modify-phases %standard-phases
  2024. (add-after 'unpack 'chdir
  2025. (lambda _ (chdir "modeline/disk") #t)))))
  2026. (inputs
  2027. `(("stumpwm" ,stumpwm "lib")
  2028. ("cl-diskspace" ,sbcl-cl-diskspace)
  2029. ("cl-mount-info" ,sbcl-cl-mount-info)))
  2030. (home-page "https://github.com/stumpwm/stumpwm-contrib")
  2031. (synopsis "StumpWM modeline support to show disk usage")
  2032. (description "StumpWM modeline support to show disk usage")
  2033. (license (list license:gpl2+ license:gpl3+))))
  2034. (define-public sbcl-stumpwm-mem
  2035. (package
  2036. (inherit stumpwm-contrib)
  2037. (name "sbcl-stumpwm-mem")
  2038. (arguments
  2039. '(#:asd-systems '("mem")
  2040. #:tests? #f
  2041. #:phases
  2042. (modify-phases %standard-phases
  2043. (add-after 'unpack 'chdir
  2044. (lambda _
  2045. (chdir "modeline/mem"))))))
  2046. (home-page
  2047. "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/mem")
  2048. (synopsis "Modeline support for memory info")
  2049. (description "Modeline support for memory info.")
  2050. (license license:gpl3+)))
  2051. (define-public sbcl-stumpwm-winner-mode
  2052. (package
  2053. (inherit stumpwm-contrib)
  2054. (name "sbcl-stumpwm-winner-mode")
  2055. (arguments
  2056. '(#:asd-systems '("winner-mode")
  2057. #:tests? #f
  2058. #:phases
  2059. (modify-phases %standard-phases
  2060. (add-after 'unpack 'chdir
  2061. (lambda _
  2062. (chdir "util/winner-mode"))))))
  2063. (home-page
  2064. "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/winner-mode")
  2065. (synopsis "Emacs' winner-mode for StumpWM")
  2066. (description "This module provides a winner-mode for StumpWM similar to the
  2067. one in Emacs.")
  2068. (license license:gpl3+)))
  2069. (define-public sbcl-stumpwm-screenshot
  2070. (package
  2071. (inherit stumpwm-contrib)
  2072. (name "sbcl-stumpwm-screenshot")
  2073. (inputs
  2074. `(("stumpwm" ,stumpwm "lib")
  2075. ("zpng" ,sbcl-zpng)))
  2076. (arguments
  2077. '(#:asd-systems '("screenshot")
  2078. #:tests? #f
  2079. #:phases
  2080. (modify-phases %standard-phases
  2081. (add-after 'unpack 'chdir
  2082. (lambda _
  2083. (chdir "util/screenshot")))
  2084. (add-after 'chdir 'fix-build
  2085. (lambda _
  2086. (substitute* "screenshot.asd"
  2087. (("#:zpng")
  2088. "#:stumpwm #:zpng")))))))
  2089. (home-page
  2090. "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/screenshot")
  2091. (synopsis "Screenshots for StumpWM")
  2092. (description "This StumpWM module can take screenshots and store them as
  2093. PNG files.")
  2094. (license license:gpl3+)))
  2095. (define-public lemonbar
  2096. (let ((commit "35183ab81d2128dbb7b6d8e119cc57846bcefdb4")
  2097. (revision "1"))
  2098. (package
  2099. (name "lemonbar")
  2100. (version (git-version "1.3" revision commit))
  2101. (source (origin
  2102. (method git-fetch)
  2103. (uri (git-reference
  2104. (url "https://github.com/LemonBoy/bar")
  2105. (commit commit)))
  2106. (file-name (git-file-name name version))
  2107. (sha256
  2108. (base32
  2109. "1wwqbph392iwz8skaqxb0xpklb1l6yganqz80g4x1fhrnz7idmlh"))))
  2110. (build-system gnu-build-system)
  2111. (arguments
  2112. `(#:tests? #f ; no test suite
  2113. #:make-flags
  2114. (list ,(string-append "CC=" (cc-for-target))
  2115. (string-append "PREFIX=" %output))
  2116. #:phases
  2117. (modify-phases %standard-phases
  2118. (delete 'configure))))
  2119. (inputs
  2120. `(("libxcb" ,libxcb)))
  2121. (native-inputs
  2122. `(("perl" ,perl)))
  2123. (home-page "https://github.com/LemonBoy/bar")
  2124. (synopsis "Featherweight status bar")
  2125. (description
  2126. "@code{lemonbar} (formerly known as @code{bar}) is a lightweight
  2127. bar entirely based on XCB. Provides full UTF-8 support, basic
  2128. formatting, RandR and Xinerama support and EWMH compliance without
  2129. wasting your precious memory.")
  2130. (license license:x11))))
  2131. (define-public lemonbar-xft
  2132. ;; Upstream v2.0 tag is several years behind HEAD
  2133. (let ((commit "481e12363e2a0fe0ddd2176a8e003392be90ed02"))
  2134. (package
  2135. (inherit lemonbar)
  2136. (name "lemonbar-xft")
  2137. (version (string-append "2.0." (string-take commit 7)))
  2138. (source (origin
  2139. (method git-fetch)
  2140. (uri (git-reference
  2141. (url "https://github.com/drscream/lemonbar-xft")
  2142. (commit commit)))
  2143. (file-name (git-file-name name version))
  2144. (sha256
  2145. (base32
  2146. "0588g37h18lv50h7w8vfbwhvc3iajh7sdr53848spaif99nh3mh4"))))
  2147. (inputs
  2148. `(("freetype" ,freetype)
  2149. ("libxft" ,libxft)
  2150. ("libx11" ,libx11)
  2151. ,@(package-inputs lemonbar)))
  2152. (arguments
  2153. (substitute-keyword-arguments (package-arguments lemonbar)
  2154. ((#:make-flags make-flags)
  2155. `(append
  2156. ,make-flags
  2157. (list (string-append
  2158. "CFLAGS="
  2159. (string-join
  2160. (list (string-append
  2161. "-I" (assoc-ref %build-inputs "freetype")
  2162. "/include/freetype2")
  2163. (string-append
  2164. "-D" "VERSION="
  2165. (format #f "'~s'" ,version))))))))))
  2166. (home-page "https://github.com/drscream/lemonbar-xft")
  2167. (synopsis
  2168. (string-append
  2169. (package-synopsis lemonbar)
  2170. " with fontconfig support"))
  2171. (description
  2172. (string-append
  2173. (package-description lemonbar)
  2174. "This is a fork of the @code{lemonbar} package that adds fontconfig
  2175. support, for easier unicode usage.")))))
  2176. (define-public xclickroot
  2177. (package
  2178. (name "xclickroot")
  2179. (version "1.3")
  2180. (source (origin
  2181. (method git-fetch)
  2182. (uri (git-reference
  2183. (url "https://github.com/phillbush/xclickroot")
  2184. (commit (string-append "v" version))))
  2185. (file-name (git-file-name name version))
  2186. (sha256
  2187. (base32
  2188. "0wnsfxvh4v02r2jjyh2n6jfkbj2dna2hlm6anl4b36lwji749k2k"))))
  2189. (build-system gnu-build-system)
  2190. (inputs
  2191. `(("libx11" ,libx11)))
  2192. (arguments
  2193. `(#:tests? #f ;no test suite
  2194. #:make-flags
  2195. (list ,(string-append "CC=" (cc-for-target))
  2196. (string-append "PREFIX=" %output))
  2197. #:phases
  2198. (modify-phases %standard-phases
  2199. (delete 'configure))))
  2200. (home-page "https://github.com/phillbush/xclickroot")
  2201. (synopsis "Run a command when a mouse button is pressed on the root window")
  2202. (description "@code{xclickroot} runs a command every time a given mouse
  2203. button is pressed on the root window.")
  2204. (license license:public-domain)))
  2205. (define-public xmenu
  2206. (package
  2207. (name "xmenu")
  2208. (version "4.5.5")
  2209. (source (origin
  2210. (method git-fetch)
  2211. (uri (git-reference
  2212. (url "https://github.com/phillbush/xmenu")
  2213. (commit (string-append "v" version))))
  2214. (file-name (git-file-name name version))
  2215. (sha256
  2216. (base32
  2217. "0qgxkrv9jnnnf3px7zh0paf8xsr4bcpf0f2nq9zy012m214223hs"))))
  2218. (build-system gnu-build-system)
  2219. (inputs
  2220. `(("libx11" ,libx11)
  2221. ("libxinerama" ,libxinerama)
  2222. ("libxft" ,libxft)
  2223. ("freetype" ,freetype)
  2224. ("imlib2" ,imlib2)))
  2225. (arguments
  2226. `(#:tests? #f ;no test suite
  2227. #:make-flags
  2228. (list (string-append "CC=" ,(cc-for-target))
  2229. (string-append "PREFIX=" %output)
  2230. (string-append "CFLAGS="
  2231. "-I" (assoc-ref %build-inputs "freetype")
  2232. "/include/freetype2"))
  2233. #:phases
  2234. (modify-phases %standard-phases
  2235. (delete 'configure))))
  2236. (home-page "https://github.com/phillbush/xmenu")
  2237. (synopsis "Menu utility for X")
  2238. (description "@code{xmenu} receives a menu specification in stdin, shows
  2239. a menu for the user to select one of the options, and outputs the option
  2240. selected to stdout. It can be controlled both via mouse and via keyboard.")
  2241. (license license:public-domain)))
  2242. (define-public idesk
  2243. (package
  2244. (name "idesk")
  2245. (version "0.7.5")
  2246. (source
  2247. (origin
  2248. (method url-fetch)
  2249. (uri (string-append
  2250. "mirror://sourceforge/idesk/idesk/idesk-" version
  2251. "/idesk-" version ".tar.bz2"))
  2252. (sha256
  2253. (base32
  2254. "1lxk2yvgysxwl514zc82lwr1dwc8cd62slgr5lzdhjbdrxfymdyl"))
  2255. (modules '((guix build utils)
  2256. (ice-9 format)))
  2257. (snippet
  2258. '(let* ((file "src/DesktopConfig.cpp")
  2259. (template (string-append file ".XXXXXX"))
  2260. (out (mkstemp! template))
  2261. (st (stat file))
  2262. (mode (stat:mode st)))
  2263. (call-with-ascii-input-file file
  2264. (lambda (p)
  2265. (format out "~{~a~%~}" '("#include <unistd.h>"
  2266. "#include <sys/stat.h>"
  2267. "#include <sys/types.h>"))
  2268. (dump-port p out)
  2269. (close out)
  2270. (chmod template mode)
  2271. (rename-file template file)
  2272. #t))))))
  2273. (build-system gnu-build-system)
  2274. (inputs
  2275. `(("libx11" ,libx11)
  2276. ("libxft" ,libxft)
  2277. ("libxpm" ,libxpm)
  2278. ("libpng" ,libpng)
  2279. ("freetype" ,freetype)
  2280. ("imlib2" ,imlib2)
  2281. ("sed" ,sed)))
  2282. (native-inputs
  2283. `(("pkg-config" ,pkg-config)))
  2284. (arguments
  2285. `(#:tests? #f)) ;no test suite
  2286. (home-page "https://sourceforge.net/projects/idesk/")
  2287. (synopsis "Add icons on X desktop and set background image for wallpaper")
  2288. (description "Idesk is program that draws desktop icons. Each icon will
  2289. execute a shell command on a configurable action. The icons can be moved on
  2290. the desktop by dragging them, and the icons will remember their positions on
  2291. start-up.")
  2292. (license license:bsd-3)))
  2293. (define-public xnotify
  2294. (package
  2295. (name "xnotify")
  2296. (version "0.8.1")
  2297. (source (origin
  2298. (method git-fetch)
  2299. (uri (git-reference
  2300. (url "https://github.com/phillbush/xnotify")
  2301. (commit (string-append "v" version))))
  2302. (file-name (git-file-name name version))
  2303. (sha256
  2304. (base32
  2305. "1jxms4md2mwfjgm2pgg3vakpp33800jbn9hnl0j4jyfc9f1ckbsv"))))
  2306. (build-system gnu-build-system)
  2307. (inputs
  2308. `(("libx11" ,libx11)
  2309. ("libxft" ,libxft)
  2310. ("libxinerama" ,libxinerama)
  2311. ("imlib2" ,imlib2)))
  2312. (arguments
  2313. `(#:make-flags
  2314. (list (string-append "CC=" ,(cc-for-target))
  2315. (string-append "PREFIX=" %output)
  2316. (string-append "CFLAGS="
  2317. "-I" (assoc-ref %build-inputs "freetype")
  2318. "/include/freetype2"))
  2319. #:tests? #f ;no test suite
  2320. #:phases
  2321. (modify-phases %standard-phases
  2322. (delete 'configure))))
  2323. (home-page "https://github.com/phillbush/xnotify")
  2324. (synopsis "Displays a notification on the screen")
  2325. (description "XNotify receives a notification specification in stdin and
  2326. shows a notification for the user on the screen.")
  2327. (license license:expat)))
  2328. (define-public cagebreak
  2329. (package
  2330. (name "cagebreak")
  2331. (version "1.6.0")
  2332. (source (origin
  2333. (method git-fetch)
  2334. (uri (git-reference
  2335. (url "https://github.com/project-repo/cagebreak")
  2336. (commit version)))
  2337. (file-name (git-file-name name version))
  2338. (sha256
  2339. (base32
  2340. "02gxmypfj75amdd8lwdkkk7imw7lwmghpyk8h9asljy9aq6ymdqp"))))
  2341. (build-system meson-build-system)
  2342. (arguments '(#:configure-flags '("-Dxwayland=true")))
  2343. (native-inputs
  2344. `(("pandoc" ,pandoc)
  2345. ("pkg-config" ,pkg-config)))
  2346. (inputs
  2347. `(("pango" ,pango)
  2348. ("wlroots" ,wlroots)))
  2349. (home-page "https://github.com/project-repo/cagebreak")
  2350. (synopsis "Tiling wayland compositor inspired by ratpoison")
  2351. (description
  2352. "@command{cagebreak} is a slim, keyboard-controlled, tiling compositor
  2353. for wayland conceptually based on the X11 window manager
  2354. @command{ratpoison}.")
  2355. (license license:expat)))
  2356. (define-public libucl
  2357. (package
  2358. (name "libucl")
  2359. (version "0.8.1")
  2360. (source
  2361. (origin
  2362. (method git-fetch)
  2363. (uri (git-reference
  2364. (url "https://github.com/vstakhov/libucl/")
  2365. (commit version)))
  2366. (file-name (git-file-name name version))
  2367. (sha256
  2368. (base32
  2369. "1h52ldxankyhbbm1qbqz1f2q0j03c1b4mig7343bs3mc6fpm18gf"))))
  2370. (native-inputs
  2371. `(("autoconf" ,autoconf)
  2372. ("automake" ,automake)
  2373. ("pkg-config" ,pkg-config)
  2374. ("libtool" ,libtool)))
  2375. (build-system gnu-build-system)
  2376. (arguments
  2377. `(#:tests? #f)) ;; no tests
  2378. (home-page "https://github.com/vstakhov/libucl")
  2379. (synopsis "Universal configuration language (UCL) parser")
  2380. (description "libucl implements a configuration language that is easy to
  2381. read and write, and compatible with JSON.")
  2382. (license license:bsd-2)))
  2383. (define-public hikari
  2384. (package
  2385. (name "hikari")
  2386. (version "2.2.3")
  2387. (source
  2388. (origin
  2389. (method url-fetch)
  2390. (uri (string-append "https://hikari.acmelabs.space/releases/"
  2391. "hikari-" version ".tar.gz"))
  2392. (sha256
  2393. (base32 "1d023cphzi15k434n60l1rp5awxmdijvsxfrm59fmsvd5rjxh9q7"))))
  2394. (build-system gnu-build-system)
  2395. (native-inputs
  2396. `(("bmake" ,bmake)
  2397. ("pkg-config" ,pkg-config)
  2398. ("wayland-protocols" ,wayland-protocols)))
  2399. (inputs
  2400. `(("cairo" ,cairo)
  2401. ("libinput" ,libinput)
  2402. ("libucl" ,libucl)
  2403. ("libxkbcommon" ,libxkbcommon)
  2404. ("pam" ,linux-pam)
  2405. ("pango" ,pango)
  2406. ("wayland" ,wayland)
  2407. ("wlroots" ,wlroots)))
  2408. (arguments
  2409. `(#:tests? #f ; no tests
  2410. #:make-flags
  2411. (list
  2412. (string-append "PREFIX=" (assoc-ref %outputs "out"))
  2413. (string-append "CC=" ,(cc-for-target))
  2414. "WITH_XWAYLAND=YES"
  2415. "WITH_SCREENCOPY=YES"
  2416. "WITH_LAYERSHELL=YES"
  2417. "WITH_VIRTUAL_INPUT=YES")
  2418. #:phases
  2419. (modify-phases %standard-phases
  2420. (delete 'configure)
  2421. (replace 'build
  2422. (lambda* (#:key inputs outputs make-flags #:allow-other-keys)
  2423. (apply invoke "bmake" make-flags)))
  2424. (replace 'install
  2425. (lambda* (#:key inputs outputs make-flags #:allow-other-keys)
  2426. (apply invoke "bmake" "install" make-flags))))))
  2427. (home-page "https://hikari.acmelabs.space/")
  2428. (synopsis "Stacking Wayland compositor with tiling capabilities")
  2429. (description
  2430. "Hikari is a stacking Wayland compositor with additional tiling
  2431. capabilities. It is heavily inspired by the Calm Window manager(cwm).")
  2432. (license license:bsd-2)))
  2433. (define-public wlogout
  2434. (package
  2435. (name "wlogout")
  2436. (version "1.1.1")
  2437. (source (origin
  2438. (method git-fetch)
  2439. (uri (git-reference
  2440. (url "https://github.com/ArtsyMacaw/wlogout")
  2441. (commit version)))
  2442. (file-name (git-file-name name version))
  2443. (sha256
  2444. (base32
  2445. "1swhzkqkzli59c89pvrakfvicd00x7ga860c3x2pbb4y3xziqfvi"))))
  2446. (build-system meson-build-system)
  2447. (native-inputs
  2448. `(("pkg-config" ,pkg-config)
  2449. ("scdoc" ,scdoc)))
  2450. (inputs
  2451. `(("gtk-layer-shell" ,gtk-layer-shell)
  2452. ("gtk+" ,gtk+)))
  2453. (arguments
  2454. '(#:tests? #f
  2455. #:phases
  2456. (modify-phases %standard-phases
  2457. (add-after 'unpack 'patch-source-paths
  2458. (lambda* (#:key outputs #:allow-other-keys)
  2459. (let ((out (assoc-ref outputs "out")))
  2460. (substitute* "main.c"
  2461. (("/usr/share") (string-append out "/share"))
  2462. (("/etc") (string-append out "/etc"))))
  2463. #t)))))
  2464. (home-page "https://github.com/ArtsyMacaw/wlogout")
  2465. (synopsis "Logout menu for Wayland")
  2466. (description "wlogout is a logout menu for Wayland environments.")
  2467. (license license:expat)))