gnu: Add sbcl-clx-xembed.
[jackhill/guix/guix.git] / gnu / packages / wm.scm
CommitLineData
bda2ded6
ED
1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
6e38c4be 3;;; Copyright © 2015 Siniša Biđin <sinisa@bidin.eu>
0ede252b 4;;; Copyright © 2015, 2016 Eric Bavier <bavier@member.fsf.org>
1268e52d 5;;; Copyright © 2015 xd1le <elisp.vim@gmail.com>
ca80b8ba 6;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
0ede252b 7;;; Copyright © 2016 Danny Milosavljevic <dannym@scratchpost.org>
37f7853e 8;;; Copyright © 2016, 2019 Efraim Flashner <efraim@flashner.co.il>
766a22fb 9;;; Copyright © 2016 Al McElrath <hello@yrns.org>
3d1240aa 10;;; Copyright © 2016 Carlo Zancanaro <carlo@zancanaro.id.au>
a0158c26 11;;; Copyright © 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
9593caff 12;;; Copyright © 2016, 2017, 2018, 2020 Nikita <nikita@n0.is>
22037a32 13;;; Copyright © 2016 doncatnip <gnopap@gmail.com>
37356e0b 14;;; Copyright © 2016 Ivan Vilata i Balaguer <ivan@selidor.net>
174b091f 15;;; Copyright © 2017 Mekeor Melire <mekeor.melire@gmail.com>
b6afc350 16;;; Copyright © 2017, 2019 Marius Bakke <mbakke@fastmail.com>
65051fdc 17;;; Copyright © 2017, 2020 Oleg Pykhalov <go.wigust@gmail.com>
553199c5 18;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
70024cfa 19;;; Copyright © 2018 Pierre-Antoine Rouby <contact@parouby.fr>
e23b6a68 20;;; Copyright © 2018, 2019 Meiyo Peng <meiyo@riseup.net>
eea969cf 21;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com>
4ec42524 22;;; Copyright © 2019 Timothy Sample <samplet@ngyro.com>
7a1d6a77 23;;; Copyright © 2019 Gábor Boskovits <boskovits@gmail.com>
1d25447e 24;;; Copyright © 2019 Kyle Andrews <kyle.c.andrews@gmail.com>
8c765a3b 25;;; Copyright © 2019 Ingo Ruhnke <grumbel@gmail.com>
d5329de9 26;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
b066ad89 27;;; Copyright © 2019 John Soo <jsoo1@asu.edu>
88f06fd0
PN
28;;; Copyright © 2018, 2019 Pierre Langlois <pierre.langlois@gmx.com>
29;;; Copyright © 2016, 2017 Andy Patterson <ajpatter@uwaterloo.ca>
59198ba1 30;;; Copyright © 2019 Evan Straw <evan.straw99@gmail.com>
4b3ff362 31;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
d4145638 32;;; Copyright © 2019 Noodles! <nnoodle@chiru.no>
d4842a7c 33;;; Copyright © 2019, 2020 Alexandru-Sergiu Marton <brown121407@member.fsf.org>
c0c1811f 34;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
47560aa2 35;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
138896e1 36;;; Copyright © 2020 Boris A. Dekshteyn <harlequin78@gmail.com>
fd65311c 37;;; Copyright © 2020 Marcin Karpezo <sirmacik@wioo.waw.pl>
bda2ded6
ED
38;;;
39;;; This file is part of GNU Guix.
40;;;
41;;; GNU Guix is free software; you can redistribute it and/or modify it
42;;; under the terms of the GNU General Public License as published by
43;;; the Free Software Foundation; either version 3 of the License, or (at
44;;; your option) any later version.
45;;;
46;;; GNU Guix is distributed in the hope that it will be useful, but
47;;; WITHOUT ANY WARRANTY; without even the implied warranty of
48;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
49;;; GNU General Public License for more details.
50;;;
51;;; You should have received a copy of the GNU General Public License
52;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
53
54(define-module (gnu packages wm)
0ede252b 55 #:use-module ((guix licenses) #:prefix license:)
bda2ded6 56 #:use-module (guix packages)
40cad6b9
EF
57 #:use-module (guix download)
58 #:use-module (guix git-download)
88f06fd0 59 #:use-module (guix build-system asdf)
3d1240aa 60 #:use-module (guix build-system cmake)
bda2ded6 61 #:use-module (guix build-system gnu)
6e38c4be 62 #:use-module (guix build-system haskell)
eea969cf 63 #:use-module (guix build-system meson)
3e7cb70a 64 #:use-module (guix build-system perl)
c165591d 65 #:use-module (guix build-system python)
9a12243c 66 #:use-module (guix build-system trivial)
88f06fd0 67 #:use-module (guix utils)
40cad6b9 68 #:use-module (gnu packages)
9a12243c 69 #:use-module (gnu packages bash)
4b563b34 70 #:use-module (gnu packages autotools)
bda2ded6 71 #:use-module (gnu packages base)
40cad6b9 72 #:use-module (gnu packages bison)
5e78a87b 73 #:use-module (gnu packages calendar)
bda2ded6 74 #:use-module (gnu packages docbook)
40cad6b9 75 #:use-module (gnu packages documentation)
0ede252b 76 #:use-module (gnu packages fontutils)
3d1240aa 77 #:use-module (gnu packages freedesktop)
40cad6b9
EF
78 #:use-module (gnu packages fribidi)
79 #:use-module (gnu packages gawk)
80 #:use-module (gnu packages gl)
3d1240aa
CZ
81 #:use-module (gnu packages glib)
82 #:use-module (gnu packages gperf)
40cad6b9
EF
83 #:use-module (gnu packages gtk)
84 #:use-module (gnu packages haskell-check)
85 #:use-module (gnu packages haskell-web)
86 #:use-module (gnu packages haskell-xyz)
87 #:use-module (gnu packages image)
3d1240aa 88 #:use-module (gnu packages imagemagick)
40cad6b9 89 #:use-module (gnu packages libevent)
4b563b34 90 #:use-module (gnu packages linux)
88f06fd0 91 #:use-module (gnu packages lisp-xyz)
40cad6b9
EF
92 #:use-module (gnu packages logging)
93 #:use-module (gnu packages lua)
94 #:use-module (gnu packages m4)
2ff844f0 95 #:use-module (gnu packages man)
40cad6b9
EF
96 #:use-module (gnu packages maths)
97 #:use-module (gnu packages mpd)
98 #:use-module (gnu packages pcre)
99 #:use-module (gnu packages perl)
100 #:use-module (gnu packages pkg-config)
7a1d6a77 101 #:use-module (gnu packages pretty-print)
40cad6b9
EF
102 #:use-module (gnu packages pulseaudio)
103 #:use-module (gnu packages python)
9a12243c 104 #:use-module (gnu packages readline)
7a1d6a77 105 #:use-module (gnu packages serialization)
47560aa2 106 #:use-module (gnu packages sphinx)
40cad6b9 107 #:use-module (gnu packages suckless)
88f06fd0 108 #:use-module (gnu packages texinfo)
40cad6b9 109 #:use-module (gnu packages textutils)
40cad6b9
EF
110 #:use-module (gnu packages video)
111 #:use-module (gnu packages web)
112 #:use-module (gnu packages xdisorg)
113 #:use-module (gnu packages xml)
114 #:use-module (gnu packages xorg))
bda2ded6 115
1268e52d 116(define-public bspwm
117 (package
118 (name "bspwm")
9610a422 119 (version "0.9.9")
1268e52d 120 (source
121 (origin
782b1224
TGR
122 (method git-fetch)
123 (uri (git-reference
124 (url "https://github.com/baskerville/bspwm.git")
125 (commit version)))
126 (file-name (git-file-name name version))
1268e52d 127 (sha256
9610a422 128 (base32 "1i7crmljk1vra1r6alxvj6lqqailjjcv0llyg7a0gm23rbv4a42g"))))
1268e52d 129 (build-system gnu-build-system)
130 (inputs
131 `(("libxcb" ,libxcb)
132 ("libxinerama" ,libxinerama)
133 ("sxhkd" ,sxhkd)
134 ("xcb-util" ,xcb-util)
135 ("xcb-util-keysyms" ,xcb-util-keysyms)
136 ("xcb-util-wm" ,xcb-util-wm)))
137 (arguments
aa0551c2
TGR
138 '(#:phases
139 (modify-phases %standard-phases
140 (delete 'configure)) ; no configure script
141 #:tests? #f ; no check target
142 #:make-flags
143 (list "CC=gcc"
144 (string-append "PREFIX=" %output))))
1268e52d 145 (home-page "https://github.com/baskerville/bspwm")
146 (synopsis "Tiling window manager based on binary space partitioning")
147 (description "bspwm is a tiling window manager that represents windows as
148the leaves of a full binary tree.")
0ede252b 149 (license license:bsd-2)))
1268e52d 150
1d25447e
KA
151(define-public herbstluftwm
152 (package
153 (name "herbstluftwm")
ccc92406 154 (version "0.8.2")
1d25447e
KA
155 (source
156 (origin
157 (method url-fetch)
158 (uri (string-append "https://herbstluftwm.org/tarballs/herbstluftwm-"
159 version ".tar.gz"))
160 (sha256
161 (base32
ccc92406 162 "0wbl1s1gwdc61ll6qmkwb56swjxv99by1dhi080bdqn0w8p75804"))
1d25447e 163 (file-name (string-append "herbstluftwm-" version ".tar.gz"))))
138896e1 164 (build-system cmake-build-system)
1d25447e
KA
165 (inputs
166 `(("dzen" ,dzen)
167 ("dmenu" ,dmenu)
168 ("glib" ,glib)
169 ("glibmm" ,glibmm)
170 ("xterm" ,xterm)
171 ("xsetroot" ,xsetroot)
172 ("libx11" ,libx11)
173 ("libxext" ,libxext)
138896e1
BD
174 ("libxinerama" ,libxinerama)
175 ("libxrandr" ,libxrandr)))
1d25447e 176 (native-inputs
138896e1
BD
177 `(("asciidoc" ,asciidoc)
178 ("pkg-config" ,pkg-config)))
1d25447e 179 (arguments
138896e1
BD
180 '(#:tests? #f
181 #:configure-flags
182 (let ((out (assoc-ref %outputs "out")))
183 (list "-DCC=gcc"
184 (string-append "-DCMAKE_INSTALL_SYSCONF_PREFIX=" out "/etc")
185 (string-append "-DBASHCOMPLETIONDIR=" out "/etc/bash_completion.d")))
186 #:phases
1d25447e 187 (modify-phases %standard-phases
1d25447e
KA
188 (add-after 'install 'install-xsession
189 (lambda* (#:key outputs #:allow-other-keys)
190 (let* ((out (assoc-ref outputs "out"))
191 (xsessions (string-append out "/share/xsessions")))
192 (mkdir-p xsessions)
193 (call-with-output-file
194 (string-append xsessions "/herbstluftwm.desktop")
195 (lambda (port)
196 (format port "~
197 [Desktop Entry]~@
198 Name=herbstluftwm~@
199 Comment=Manual tiling window manager~@
200 Exec=~a/bin/herbstluftwm~@
201 Type=XSession~%" out)))
138896e1 202 #t))))))
1d25447e
KA
203 (synopsis "Tiling window manager for X11")
204 (description "herbstluftwm is a manual tiling window manager for X11 using
205Xlib and GLib. Its main features are:
206
207@itemize
208@item
209The layout is based on splitting frames into subframes which can be split
210again or can be filled with windows (similar to i3 or musca).
211
212@item
213Tags (or workspaces or virtual desktops or …) can be added/removed at runtime.
214Each tag contains an own layout.
215
216@item
217Exactly one tag is viewed on each monitor. The tags are monitor independent
218(similar to Xmonad).
219
220@item
221It is configured at runtime via IPC calls from @command{herbstclient}. So the
222configuration file is just a script which is run on startup (similar to wmii
223or musca).
224
225@end itemize")
226 (home-page "https://herbstluftwm.org")
227 (license license:bsd-2)))
228
63b1bdbc
ED
229(define-public i3status
230 (package
231 (name "i3status")
cb96d239 232 (version "2.13")
63b1bdbc
ED
233 (source (origin
234 (method url-fetch)
fdad1f3c 235 (uri (string-append "https://i3wm.org/i3status/i3status-"
63b1bdbc
ED
236 version ".tar.bz2"))
237 (sha256
238 (base32
cb96d239 239 "0rhlzb96mw64z2jnhwz9nibc7pxg549626lz5642xxk5hpzwk2ff"))))
63b1bdbc
ED
240 (build-system gnu-build-system)
241 (arguments
cb96d239
MB
242 `(;; XXX: Do an "out of source" build to work around
243 ;; <https://github.com/i3/i3status/issues/339>.
244 #:out-of-source? #t
63b1bdbc
ED
245 #:tests? #f)) ; no test suite
246 (inputs
247 `(("openlibm" ,openlibm)
248 ("libconfuse" ,libconfuse)
249 ("libyajl" ,libyajl)
250 ("alsa-lib" ,alsa-lib)
766a22fb
AM
251 ("pulseaudio" ,pulseaudio)
252 ("libnl" ,libnl)
63b1bdbc
ED
253 ("libcap" ,libcap)
254 ("asciidoc" ,asciidoc)))
766a22fb 255 (native-inputs
cb96d239
MB
256 `(("pkg-config" ,pkg-config)
257 ("docbook-xsl" ,docbook-xsl)
258 ("libxml2" ,libxml2) ;for XML_CATALOG_FILES
259 ("xmlto" ,xmlto)))
fdad1f3c 260 (home-page "https://i3wm.org/i3status/")
63b1bdbc
ED
261 (synopsis "Status bar for i3bar, dzen2, xmobar or similar programs")
262 (description "i3status is a small program for generating a status bar for
263i3bar, dzen2, xmobar or similar programs. It is designed to be very efficient
264by issuing a very small number of system calls, as one generally wants to
265update such a status line every second. This ensures that even under high
266load, your status bar is updated correctly. Also, it saves a bit of energy by
267not hogging your CPU as much as spawning the corresponding amount of shell
268commands would.")
0ede252b 269 (license license:bsd-3)))
63b1bdbc 270
bda2ded6
ED
271(define-public i3-wm
272 (package
273 (name "i3-wm")
a5d67ba7 274 (version "4.18.1")
bda2ded6
ED
275 (source (origin
276 (method url-fetch)
8658d403 277 (uri (string-append "https://i3wm.org/downloads/i3-"
bda2ded6
ED
278 version ".tar.bz2"))
279 (sha256
280 (base32
a5d67ba7 281 "0z709cianlzw0x0qwq4361347354xd9ckj1v7vjvhb1zh3x91gws"))))
bda2ded6
ED
282 (build-system gnu-build-system)
283 (arguments
ebd2ae18 284 `(#:configure-flags
4bd391f5
LF
285 ;; The build system tries to build in a separate directory, but that
286 ;; seems to be unnecessary.
ebd2ae18
TGR
287 (list "--disable-builddir")
288
289 ;; The test suite requires the unpackaged Xephyr X server.
aa7cdc57
TS
290 #:tests? #f
291 #:phases
292 (modify-phases %standard-phases
293 (add-after 'install 'patch-session-file
294 (lambda* (#:key outputs #:allow-other-keys)
295 (let* ((out (assoc-ref outputs "out"))
296 (i3 (string-append out "/bin/i3"))
297 (i3-with-shmlog (string-append out "/bin/i3-with-shmlog")))
298 (substitute* (string-append out "/share/xsessions/i3.desktop")
299 (("Exec=i3") (string-append "Exec=" i3)))
300 (substitute* (string-append out "/share/xsessions/i3-with-shmlog.desktop")
301 (("Exec=i3-with-shmlog") (string-append "Exec=" i3-with-shmlog)))
302 #t))))))
bda2ded6
ED
303 (inputs
304 `(("libxcb" ,libxcb)
305 ("xcb-util" ,xcb-util)
306 ("xcb-util-cursor" ,xcb-util-cursor)
307 ("xcb-util-keysyms" ,xcb-util-keysyms)
308 ("xcb-util-wm" ,xcb-util-wm)
4bd391f5 309 ("xcb-util-xrm" ,xcb-util-xrm)
bda2ded6
ED
310 ("libxkbcommon" ,libxkbcommon)
311 ("libev" ,libev)
312 ("libyajl" ,libyajl)
313 ("asciidoc" ,asciidoc)
314 ("xmlto" ,xmlto)
315 ("perl-pod-simple" ,perl-pod-simple)
bda2ded6
ED
316 ("libx11" ,libx11)
317 ("pcre" ,pcre)
318 ("startup-notification" ,startup-notification)
319 ("pango" ,pango)
320 ("cairo" ,cairo)))
321 (native-inputs
322 `(("which" ,which)
323 ("perl" ,perl)
4bd391f5
LF
324 ("pkg-config" ,pkg-config)
325 ;; For building the documentation.
4b0e6367 326 ("libxml2" ,libxml2)
4bd391f5 327 ("docbook-xsl" ,docbook-xsl)))
8658d403 328 (home-page "https://i3wm.org/")
71a5da8e
TGR
329 (synopsis "Tiling window manager")
330 (description "i3 is a tiling X11 window manager that dynamically manages
331tiled, stacked, and tabbed window layouts.
332
333i3 primarily targets advanced users. Windows are managed manually and organised
334inside containers, which can be split vertically or horizontally, and optionally
335resized.
336
337i3 uses a plain-text configuration file, and can be extended and controlled from
338many programming languages.")
0ede252b 339 (license license:bsd-3)))
6e38c4be 340
88c94080
ASM
341(define-public i3-gaps
342 (package (inherit i3-wm)
343 (name "i3-gaps")
d4842a7c 344 (version "4.18")
88c94080
ASM
345 (source (origin
346 (method url-fetch)
347 (uri (string-append
348 "https://github.com/Airblader/i3/releases/download/"
349 version "/i3-" version ".tar.bz2"))
350 (sha256
351 (base32
d4842a7c 352 "0id4qm9a7kc5yawff85blmph4zbizhb6ka88aqm10wrpfsknri3j"))))
88c94080
ASM
353 (home-page "https://github.com/Airblader/i3")
354 (synopsis "Tiling window manager with gaps")
355 (description "i3-gaps is a fork of i3wm, a tiling window manager
356for X11. It is kept up to date with upstream, adding a few additional
357features such as gaps between windows.
358
359i3 is a tiling X11 window manager that dynamically manages tiled, stacked,
360and tabbed window layouts.
361
362i3 primarily targets advanced users. Windows are managed manually and
363organised inside containers, which can be split vertically or horizontally,
364and optionally resized.
365
366i3 uses a plain-text configuration file, and can be extended and controlled
367from many programming languages.")
368 (license license:bsd-3)))
369
b6afc350
MB
370(define-public i3lock
371 (package
372 (name "i3lock")
373 (version "2.11.1")
374 (source (origin
375 (method url-fetch)
376 (uri (string-append "https://i3wm.org/i3lock/i3lock-"
377 version ".tar.bz2"))
378 (sha256
379 (base32
380 "015dn534m7cxjvqdncpvaq9p8b2r4w5hp1yanbdy2abmhbcc7a7j"))))
381 (build-system gnu-build-system)
382 (native-inputs
383 `(("pkg-config" ,pkg-config)))
384 (inputs
385 `(("cairo" ,cairo)
386 ("libev" ,libev)
387 ("linux-pam" ,linux-pam)
388 ("libxcb" ,libxcb)
389 ("libxkbcommon" ,libxkbcommon)
390 ("xcb-util" ,xcb-util)
391 ("xcb-util-image" ,xcb-util-image)
392 ("xcb-util-xrm" ,xcb-util-xrm)))
393 (home-page "https://i3wm.org/i3lock/")
394 (synopsis "Lightweight screen locker")
395 (description
396 "i3lock is a simple X11 screen locker developed alongside the i3 project.
397Despite the name it should work with any X11 window manager.")
398 (license license:bsd-3)))
399
bc83b2e2 400(define-public i3blocks
97e036ca
TGR
401 (package
402 (name "i3blocks")
403 (version "1.5")
404 (source (origin
405 (method git-fetch)
406 (uri (git-reference
407 (url "https://github.com/vivien/i3blocks.git")
408 (commit version)))
409 (sha256
410 (base32
411 "0v8mwnm8qzpv6xnqvrk43s4b9iyld4naqzbaxk4ldq1qkhai0wsv"))
412 (file-name (git-file-name name version))))
413 (build-system gnu-build-system)
414 (native-inputs
415 `(("autoconf" ,autoconf)
416 ("automake" ,automake)
417 ("pkg-config" ,pkg-config)))
418 (home-page "https://github.com/vivien/i3blocks")
419 (synopsis "Minimalist scheduler for status bar scripts")
420 (description "i3blocks executes your command lines and generates a
bc83b2e2
MP
421status line from their output. The generated line is meant to be displayed by
422the i3 window manager through its i3bar component, as an alternative to
423i3status.")
97e036ca 424 (license license:gpl3+)))
bc83b2e2 425
3e7cb70a
MB
426(define-public perl-anyevent-i3
427 (package
428 (name "perl-anyevent-i3")
ec5c986e 429 (version "0.17")
3e7cb70a
MB
430 (source (origin
431 (method url-fetch)
432 (uri (string-append "mirror://cpan/authors/id/M/MS/MSTPLBG/"
433 "AnyEvent-I3-" version ".tar.gz"))
434 (sha256
435 (base32
ec5c986e 436 "0qvd9bq16jyy7v3ma82qcnvz9j503bw0mh7h55gkjf7ir62ck0jk"))))
3e7cb70a
MB
437 (build-system perl-build-system)
438 (propagated-inputs
439 `(("perl-anyevent" ,perl-anyevent)
440 ("perl-json-xs" ,perl-json-xs)))
9aba9b12 441 (home-page "https://metacpan.org/release/AnyEvent-I3")
3e7cb70a
MB
442 (synopsis
443 "Communicate with the i3 window manager through perl")
444 (description
445 "This module connects to the i3 window manager using the UNIX socket
446based IPC interface it provides (if enabled in the configuration file).
447You can then subscribe to events or send messages and receive their replies.")
448 ;; Can be used with either license.
2f3108ad 449 (license (list license:gpl3+ license:perl-license))))
3e7cb70a 450
c165591d
IVB
451(define-public python-i3-py
452 (package
453 (name "python-i3-py")
454 (version "0.6.5")
455 (source
456 (origin
457 ;; The latest release is not tagged in Git nor has an entry in PyPi,
458 ;; but there is still a clear commit for it, and it's been the last one
459 ;; for years.
460 (method git-fetch)
461 (uri (git-reference
462 (url "https://github.com/ziberna/i3-py.git")
463 (commit "27f88a616e9ecc340e7d041d3d00782f8a1964c1")))
464 (sha256
465 (base32
466 "1nm719dc2xqlll7vj4c4m7mpjb27lpn3bg3c66gajvnrz2x1nmxs"))
467 (file-name (string-append name "-" version "-checkout"))))
468 (build-system python-build-system)
469 (arguments
470 `(#:tests? #f ; no tests yet
471 #:phases (modify-phases %standard-phases
472 (add-after 'install 'install-doc
473 ;; Copy readme file to documentation directory.
474 (lambda* (#:key outputs #:allow-other-keys)
475 (let ((doc (string-append (assoc-ref outputs "out")
476 "/share/doc/" ,name)))
477 (install-file "README.md" doc)
478 ;; Avoid unspecified return value.
479 #t))))))
480 (propagated-inputs
481 `(("i3-wm" ,i3-wm)))
482 (home-page "https://github.com/ziberna/i3-py")
483 (synopsis "Python interface to the i3 window manager")
484 (description "This package allows you to interact from a Python program
485with the i3 window manager via its IPC socket. It can send commands and other
486kinds of messages to i3, select the affected containers, filter results and
487subscribe to events.")
488 (license license:gpl3+)))
489
490(define-public python2-i3-py
491 (package-with-python2 python-i3-py))
492
37356e0b
IVB
493(define-public quickswitch-i3
494 (let ((commit "ed692b1e8f43b95bd907ced26238ce8ccb2ed28f")
495 (revision "1")) ; Guix package revision
496 (package
497 (name "quickswitch-i3")
498 (version (string-append "2.2-" revision "."
499 (string-take commit 7)))
500 (source
501 (origin
502 ;; The latest commit is a few years old and just a couple commits
503 ;; after the last tagged release, so we use that latest commit
504 ;; instead of the release.
505 (method git-fetch)
506 (uri (git-reference
507 (url "https://github.com/proxypoke/quickswitch-for-i3.git")
508 (commit commit)))
509 (sha256
510 (base32
511 "0447077sama80jcdg5p64zjsvafmz5rbdrirhm1adcdjhkh6iqc5"))
512 (patches (search-patches "quickswitch-fix-dmenu-check.patch"))
513 (file-name (string-append name "-" version "-checkout"))))
514 (build-system python-build-system)
515 (arguments
516 `(#:tests? #f ; no tests yet
517 #:phases (modify-phases %standard-phases
518 (add-after 'install 'install-doc
519 ;; Copy readme file to documentation directory.
520 (lambda* (#:key outputs #:allow-other-keys)
521 (let ((doc (string-append (assoc-ref outputs "out")
522 "/share/doc/" ,name)))
523 (install-file "README.rst" doc)
524 ;; Avoid unspecified return value.
525 #t))))))
526 (inputs
527 `(("python-i3-py" ,python-i3-py)
528 ("dmenu" ,dmenu)))
529 (home-page "https://github.com/proxypoke/quickswitch-for-i3")
530 (synopsis "Quickly change to and locate windows in the i3 window manager")
531 (description
532 "This utility for the i3 window manager allows you to quickly switch to
533and locate windows on all your workspaces, using an interactive dmenu
534prompt.")
5d6bab9e 535 (license license:wtfpl2))))
37356e0b 536
4b563b34 537(define-public i3lock-color
538 (package
539 (name "i3lock-color")
7969751f 540 (version "2.12.c")
4b563b34 541 (source
542 (origin
f45cc966
TGR
543 (method git-fetch)
544 (uri (git-reference
545 (url "https://github.com/PandorasFox/i3lock-color.git")
546 (commit version)))
547 (file-name (git-file-name name version))
4b563b34 548 (sha256
7969751f 549 (base32 "08fhnchf187b73h52xgzb86g6byzxz085zs9galsvl687g5zxk34"))))
4b563b34 550 (build-system gnu-build-system)
551 (arguments
f45cc966 552 `(#:tests? #f)) ; no tests included
4b563b34 553 (inputs
fa2886b7
TGR
554 `(("cairo" ,cairo)
555 ("libev" ,libev)
3dc77d40 556 ("libjpeg" ,libjpeg-turbo)
4b563b34 557 ("libxcb" ,libxcb)
4b563b34 558 ("libxkbcommon" ,libxkbcommon)
fa2886b7
TGR
559 ("linux-pam" ,linux-pam)
560 ("xcb-util" ,xcb-util)
7969751f
TGR
561 ("xcb-util-image" ,xcb-util-image)
562 ("xcb-util-xrm" ,xcb-util-xrm)))
4b563b34 563 (native-inputs
fa2886b7
TGR
564 `(("autoconf" ,autoconf)
565 ("automake" ,automake)
566 ("pkg-config" ,pkg-config)))
4b563b34 567 (home-page "https://github.com/PandorasFox/i3lock-color")
568 (synopsis "Screen locker with color configuration support")
569 (description
570 "i3lock-color is a simpler X11 screen locker derived from i3lock.
571Features include:
572
573@enumerate
574@item forking process, the locked screen is preserved when you suspend to RAM;
575@item specify background color or image to be displayed in the lock screen;
576@item many additional color options.
577@end enumerate")
578 (license license:bsd-3)))
579
b0a2dc72 580(define-public i3lock-fancy
581 (package
582 (name "i3lock-fancy")
583 (version "0.2")
584 (source
585 (origin
a48db08a
TGR
586 (method git-fetch)
587 (uri (git-reference
588 (url "https://github.com/meskarune/i3lock-fancy.git")
589 (commit version)))
590 (file-name (git-file-name name version))
b0a2dc72 591 (sha256
a48db08a 592 (base32 "11g2kkim33ra38d1m897sq1ifajw17iyw9mr7sg1q8i2ibl4lfsi"))))
b0a2dc72 593 (build-system gnu-build-system)
594 (arguments
a48db08a 595 `(#:tests? #f ; no tests included
b0a2dc72 596 #:phases
597 (modify-phases %standard-phases
598 (replace 'configure
599 (lambda* (#:key inputs outputs #:allow-other-keys)
600 (let* ((out (assoc-ref outputs "out"))
601 (icons (string-append out "/share/i3lock-fancy/icons/"))
602 (wmctrl (string-append (assoc-ref inputs "wmctrl")
603 "/bin/wmctrl"))
604 (mconvert (string-append (assoc-ref inputs "imagemagick")
605 "/bin/convert"))
606 (mimport (string-append (assoc-ref inputs "imagemagick")
607 "/bin/import"))
608 (awk (string-append (assoc-ref inputs "gawk")
609 "/bin/gawk")))
610
611 (substitute* "lock"
612 (("$(which wmctrl)") wmctrl)
613 (("convert") mconvert)
614 (("shot=\\(import") (string-append "shot=\(" mimport))
615 (("awk -F") (string-append awk " -F"))
616 ((" awk") awk)
617 (("\\$scriptpath/icons/") icons))
618 #t)))
619 (delete 'build)
620 (replace 'install
621 (lambda* (#:key inputs outputs #:allow-other-keys)
622 (let* ((out (assoc-ref outputs "out"))
623 (bin (string-append out "/bin"))
624 (icons (string-append out "/share/i3lock-fancy/icons/")))
625
626 (install-file "lock" bin)
627 (rename-file (string-append bin "/lock")
628 (string-append bin "/i3lock-fancy"))
629 (copy-recursively "icons" icons)
630 #t))))))
631 (native-inputs
632 `(("imagemagick" ,imagemagick)
633 ("wmctrl" ,wmctrl)
634 ("gawk" ,gawk)))
635 (home-page "https://github.com/meskarune/i3lock-fancy")
636 (synopsis "Screen locker with screenshot function")
637 (description
638 "@code{i3lock-fancy} is a Bash script that takes a screenshot of
639the desktop, blurs the background and adds a lock icon and text.
640It requires @code{i3lock-color} or @code{i3lock} and can optionally
641be passed any screenshot util like @code{scrot}.
642This screen locker can be used with any window manager or
643desktop environment.")
644 (license license:expat)))
645
6e38c4be
SB
646(define-public xmonad
647 (package
648 (name "xmonad")
de98b915 649 (version "0.15")
6e38c4be
SB
650 (synopsis "Tiling window manager")
651 (source (origin
652 (method url-fetch)
966a543b 653 (uri (string-append "mirror://hackage/package/xmonad/"
ec9299d0 654 "xmonad-" version ".tar.gz"))
6e38c4be
SB
655 (sha256
656 (base32
de98b915 657 "0a7rh21k9y6g8fwkggxdxjns2grvvsd5hi2ls4klmqz5xvk4hyaa"))))
6e38c4be
SB
658 (build-system haskell-build-system)
659 (inputs
174b091f 660 `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
174b091f 661 ("ghc-quickcheck" ,ghc-quickcheck)
dd821380 662 ("ghc-semigroups" ,ghc-semigroups)
174b091f
MM
663 ("ghc-setlocale" ,ghc-setlocale)
664 ("ghc-utf8-string" ,ghc-utf8-string)
665 ("ghc-x11" ,ghc-x11)))
6e38c4be
SB
666 (arguments
667 `(#:phases
668 (modify-phases %standard-phases
669 (add-after
670 'install 'install-xsession
671 (lambda _
672 (let* ((xsessions (string-append %output "/share/xsessions")))
673 (mkdir-p xsessions)
674 (call-with-output-file
675 (string-append xsessions "/xmonad.desktop")
676 (lambda (port)
677 (format port "~
678 [Desktop Entry]~@
679 Name=~a~@
680 Comment=~a~@
681 Exec=~a/bin/xmonad~@
682 Type=Application~%" ,name ,synopsis %output)))))))))
8c0be00a 683 (home-page "https://xmonad.org")
6e38c4be
SB
684 (description
685 "Xmonad is a tiling window manager for X. Windows are arranged
686automatically to tile the screen without gaps or overlap, maximising screen
687use. All features of the window manager are accessible from the keyboard: a
688mouse is strictly optional. Xmonad is written and extensible in Haskell.
689Custom layout algorithms, and other extensions, may be written by the user in
690config files. Layouts are applied dynamically, and different layouts may be
691used on each workspace. Xinerama is fully supported, allowing windows to be
692tiled on several screens.")
0ede252b 693 (license license:bsd-3)))
78edf44c 694
6e864d00
OP
695(define-public xmobar
696 (package
697 (name "xmobar")
b5d32fb9 698 (version "0.33")
6e864d00
OP
699 (source (origin
700 (method url-fetch)
701 (uri (string-append "mirror://hackage/package/xmobar/"
079db056 702 "xmobar-" version ".tar.gz"))
6e864d00
OP
703 (sha256
704 (base32
b5d32fb9 705 "1hr3qqykc5givcpcwrr9f2y920jmiinmxm5mcy6qgpgymgwqb618"))))
6e864d00 706 (build-system haskell-build-system)
800e4fd8
TGR
707 (native-inputs
708 `(("ghc-hspec" ,ghc-hspec)
709 ("hspec-discover" ,hspec-discover)))
6e864d00 710 (inputs
b066ad89
JS
711 `(("ghc-alsa-core" ,ghc-alsa-core)
712 ("ghc-alsa-mixer" ,ghc-alsa-mixer)
713 ("ghc-dbus" ,ghc-dbus)
714 ("ghc-hinotify" ,ghc-hinotify)
d2ea8064 715 ("ghc-http" ,ghc-http)
b066ad89
JS
716 ("ghc-http-conduit" ,ghc-http-conduit)
717 ("ghc-http-types" ,ghc-http-types)
d2ea8064 718 ("ghc-iwlib" ,ghc-iwlib)
b066ad89
JS
719 ("ghc-libmpd" ,ghc-libmpd)
720 ("ghc-old-locale" ,ghc-old-locale)
d877e0d8 721 ("ghc-parsec-numbers" ,ghc-parsec-numbers)
6e864d00 722 ("ghc-regex-compat" ,ghc-regex-compat)
b066ad89
JS
723 ("ghc-temporary" ,ghc-temporary)
724 ("ghc-timezone-olson" ,ghc-timezone-olson)
725 ("ghc-x11" ,ghc-x11)
6e864d00 726 ("ghc-x11-xft" ,ghc-x11-xft)
d2ea8064 727 ("libxpm" ,libxpm)))
6e864d00 728 (arguments
b066ad89
JS
729 `(#:configure-flags (list "--flags=all_extensions")
730 #:phases
731 (modify-phases %standard-phases
732 (add-before 'build 'patch-test-shebang
733 (lambda* (#:key inputs #:allow-other-keys)
734 (substitute* "test/Xmobar/Plugins/Monitors/AlsaSpec.hs"
735 (("/bin/bash") (which "bash")))
736 #t)))))
680e803d 737 (home-page "https://xmobar.org")
6e864d00
OP
738 (synopsis "Minimalistic text based status bar")
739 (description
740 "@code{xmobar} is a lightweight, text-based, status bar written in
741Haskell. It was originally designed to be used together with Xmonad, but it
742is also usable with any other window manager. While xmobar is written in
743Haskell, no knowledge of the language is required to install and use it.")
744 (license license:bsd-3)))
745
78edf44c
SB
746(define-public ghc-xmonad-contrib
747 (package
748 (name "ghc-xmonad-contrib")
3cbf3f74 749 (version "0.16")
78edf44c
SB
750 (source
751 (origin
752 (method url-fetch)
966a543b 753 (uri (string-append "mirror://hackage/package/xmonad-contrib/"
78edf44c
SB
754 "xmonad-contrib-" version ".tar.gz"))
755 (sha256
3cbf3f74 756 (base32 "1pddgkvnbww28wykncc7j0yb0lv15bk7xnnhdcbrwkxzw66w6wmd"))))
78edf44c
SB
757 (build-system haskell-build-system)
758 (propagated-inputs
f54f0475 759 `(("ghc-old-time" ,ghc-old-time)
78edf44c
SB
760 ("ghc-random" ,ghc-random)
761 ("ghc-utf8-string" ,ghc-utf8-string)
762 ("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
b42b5afd 763 ("ghc-semigroups" ,ghc-semigroups)
78edf44c
SB
764 ("ghc-x11" ,ghc-x11)
765 ("ghc-x11-xft" ,ghc-x11-xft)
766 ("xmonad" ,xmonad)))
8c0be00a 767 (home-page "https://xmonad.org")
78edf44c
SB
768 (synopsis "Third party extensions for xmonad")
769 (description
770 "Third party tiling algorithms, configurations, and scripts to Xmonad, a
771tiling window manager for X.")
0ede252b 772 (license license:bsd-3)))
45e10968
EB
773
774(define-public evilwm
775 (package
776 (name "evilwm")
777 (version "1.1.1")
778 (source
779 (origin
780 (method url-fetch)
781 (uri (string-append "http://www.6809.org.uk/evilwm/evilwm-"
782 version ".tar.gz"))
783 (sha256
784 (base32
c595cd47 785 "0ak0yajzk3v4dg5wmaghv6acf7v02a4iw8qxmq5yw5ard8lrqn3r"))
fc1adab1 786 (patches (search-patches "evilwm-lost-focus-bug.patch"))))
45e10968
EB
787 (build-system gnu-build-system)
788 (inputs
789 `(("libx11" ,libx11)
790 ("libxext" ,libxext)
791 ("libxrandr" ,libxrandr)))
792 (arguments
793 `(#:modules ((srfi srfi-26)
794 (guix build utils)
795 (guix build gnu-build-system))
796 #:make-flags (let ((inputs (map (cut assoc-ref %build-inputs <>)
797 '("libx11" "libxext" "libxrandr")))
798 (join (lambda (proc strs)
799 (string-join (map proc strs) " ")))
800 (dash-I (cut string-append "-I" <> "/include"))
801 (dash-L (cut string-append "-L" <> "/lib")))
802 `("desktopfilesdir=$(prefix)/share/xsessions"
803 ,(string-append "prefix=" (assoc-ref %outputs "out"))
804 ,(string-append "CPPFLAGS=" (join dash-I inputs))
805 ,(string-append "LDFLAGS=" (join dash-L inputs))))
806 #:tests? #f ;no tests
807 #:phases (modify-phases %standard-phases
808 (delete 'configure)))) ;no configure script
809 (home-page "http://www.6809.org.uk/evilwm/")
810 (synopsis "Minimalist window manager for the X Window System")
811 (description
812 "evilwm is a minimalist window manager based on aewm, extended to feature
813many keyboard controls with repositioning and maximize toggles, solid window
814drags, snap-to-border support, and virtual desktops.")
0ede252b
DM
815 (license (license:x11-style "file:///README"))))
816
817(define-public fluxbox
818 (package
819 (name "fluxbox")
820 (version "1.3.7")
821 (synopsis "Small and fast window manager")
822 (source (origin
823 (method url-fetch)
de67e922 824 (uri (string-append "mirror://sourceforge/fluxbox/fluxbox/"
0ede252b
DM
825 version "/fluxbox-" version ".tar.xz"))
826 (sha256
827 (base32
828 "1h1f70y40qd225dqx937vzb4k2cz219agm1zvnjxakn5jkz7b37w"))))
829 (build-system gnu-build-system)
830 (arguments
831 `(#:make-flags '("CPPFLAGS=-U__TIME__") ;ugly, but for reproducibility
832 #:phases
833 (modify-phases %standard-phases
37f7853e
EF
834 (add-after 'install 'install-vim-files
835 (lambda* (#:key outputs #:allow-other-keys)
836 (let* ((out (assoc-ref outputs "out"))
837 (syntax (string-append out "/share/vim/vimfiles/syntax")))
838 (copy-recursively "3rd/vim/vim/syntax" syntax)
839 #t)))
4ee3b309
EF
840 (add-after 'install 'install-xsession
841 (lambda* (#:key outputs #:allow-other-keys)
842 (let* ((out (assoc-ref outputs "out"))
843 (xsessions (string-append out "/share/xsessions")))
844 (mkdir-p xsessions)
845 (call-with-output-file
846 (string-append xsessions "/fluxbox.desktop")
847 (lambda (port)
848 (format port "~
849 [Desktop Entry]~@
850 Name=~a~@
851 Comment=~a~@
852 Exec=~a/bin/startfluxbox~@
853 Type=Application~%" ,name ,synopsis out)))
854 #t))))))
0ede252b
DM
855 (native-inputs
856 `(("pkg-config" ,pkg-config)))
857 (inputs
858 `(("freetype" ,freetype)
859 ("fribidi" ,fribidi)
860 ("imlib2" ,imlib2)
861 ("libx11" ,libx11)
862 ("libxext" ,libxext)
863 ("libxft" ,libxft)
864 ("libxinerama" ,libxinerama)
865 ("libxpm" ,libxpm)
866 ("libxrandr" ,libxrandr)
867 ("libxrender" ,libxrender)))
868 (description "Fluxbox is a window manager. It is light on resources
869and easy to handle yet full of features to make an easy and fast desktop
870experience.")
871 (home-page "http://fluxbox.org/")
872 (license license:expat)))
3d1240aa
CZ
873
874(define-public awesome
875 (package
876 (name "awesome")
c0c1811f 877 (version "4.3")
3d1240aa 878 (source
c0c1811f
NG
879 (origin
880 (method url-fetch)
881 (uri (string-append
882 "https://github.com/awesomeWM/awesome-releases/raw/master/"
883 "awesome-" version ".tar.xz"))
884 (sha256
885 (base32 "0lqpw401mkkmp9wgbvrmm45bqq2j9357l4irwdqv6l1305pls9kq"))
886 (modules '((guix build utils)
887 (srfi srfi-19)))
888 (snippet
889 '(begin
890 ;; Remove non-reproducible timestamp and use the date of
891 ;; the source file instead.
892 (substitute* "common/version.c"
893 (("__DATE__ \" \" __TIME__")
894 (date->string
895 (time-utc->date
896 (make-time time-utc 0 (stat:mtime (stat "awesome.c"))))
897 "\"~c\"")))
898 #t))
899 (patches
900 (search-patches "awesome-reproducible-png.patch"))))
3d1240aa 901 (build-system cmake-build-system)
c0c1811f
NG
902 (native-inputs
903 `(("asciidoc" ,asciidoc)
904 ("docbook-xsl" ,docbook-xsl)
905 ("doxygen" ,doxygen)
906 ("gperf" ,gperf)
907 ("imagemagick" ,imagemagick)
908 ("libxml2" ,libxml2) ;for XML_CATALOG_FILES
909 ("lua-ldoc" ,lua-ldoc)
910 ("pkg-config" ,pkg-config)
911 ("xmlto" ,xmlto)))
912 (inputs
913 `(("cairo" ,cairo)
914 ("dbus" ,dbus)
915 ("gdk-pixbuf" ,gdk-pixbuf)
916 ("glib" ,glib)
917 ("gobject-introspection" ,gobject-introspection)
918 ("imlib2" ,imlib2)
919 ("libev" ,libev)
920 ("libxcb" ,libxcb)
921 ("libxcursor" ,libxcursor)
922 ("libxdg-basedir" ,libxdg-basedir)
923 ("libxkbcommon" ,libxkbcommon)
924 ("lua" ,lua)
925 ("lua-lgi" ,lua-lgi)
926 ("pango" ,pango)
927 ("startup-notification" ,startup-notification)
928 ("xcb-util" ,xcb-util)
929 ("xcb-util-cursor" ,xcb-util-cursor)
930 ("xcb-util-image" ,xcb-util-image)
931 ("xcb-util-keysyms" ,xcb-util-keysyms)
932 ("xcb-util-renderutil" ,xcb-util-renderutil)
933 ("xcb-util-xrm" ,xcb-util-xrm)
934 ("xcb-util-wm" ,xcb-util-wm)))
3d1240aa 935 (arguments
c0c1811f
NG
936 `(#:modules ((guix build cmake-build-system)
937 (guix build utils)
938 (ice-9 match))
939 ;; Let compression happen in our 'compress-documentation' phase
940 ;; so that '--no-name' is used, which removes timestamps from
941 ;; gzip output.
942 #:configure-flags
943 '("-DCOMPRESS_MANPAGES=off")
944 ;; Building awesome in its source directory is no longer
945 ;; supported.
db0164b2 946 #:out-of-source? #t
22037a32 947 #:phases
948 (modify-phases %standard-phases
c0c1811f 949 (add-before 'configure 'set-paths
22037a32 950 (lambda* (#:key inputs #:allow-other-keys)
c0c1811f
NG
951 ;; The build process needs to load Cairo dynamically.
952 (let* ((cairo (string-append (assoc-ref inputs "cairo") "/lib"))
953 (lua-version ,(version-major+minor (package-version lua)))
954 (lua-dependencies
955 (filter (match-lambda
956 ((label . _) (string-prefix? "lua-" label)))
957 inputs))
958 (lua-path
959 (string-join
960 (map (match-lambda
961 ((_ . dir)
962 (string-append
963 dir "/share/lua/" lua-version "/?.lua;"
964 dir "/share/lua/" lua-version "/?/?.lua")))
965 lua-dependencies)
966 ";"))
967 (lua-cpath
968 (string-join
969 (map (match-lambda
970 ((_ . dir)
971 (string-append
972 dir "/lib/lua/" lua-version "/?.so;"
973 dir "/lib/lua/" lua-version "/?/?.so")))
974 lua-dependencies)
975 ";")))
976 (setenv "LD_LIBRARY_PATH" cairo)
977 (setenv "LUA_PATH" (string-append "?.lua;" lua-path))
978 (setenv "LUA_CPATH" lua-cpath)
22037a32 979 #t)))
980 (replace 'check
981 (lambda _
982 ;; There aren't any tests, so just make sure the binary
983 ;; gets built and can be run successfully.
b5e70d92 984 (invoke "../build/awesome" "-v")))
4ec42524
TS
985 (add-after 'install 'patch-session-file
986 (lambda* (#:key outputs #:allow-other-keys)
987 (let* ((out (assoc-ref outputs "out"))
988 (awesome (string-append out "/bin/awesome")))
989 (substitute* (string-append out "/share/xsessions/awesome.desktop")
990 (("Exec=awesome") (string-append "Exec=" awesome)))
991 #t)))
22037a32 992 (add-after 'install 'wrap
993 (lambda* (#:key inputs outputs #:allow-other-keys)
994 (let* ((awesome (assoc-ref outputs "out"))
c0c1811f
NG
995 (cairo (string-append (assoc-ref inputs "cairo") "/lib"))
996 (lua-version ,(version-major+minor (package-version lua)))
997 (lua-lgi (assoc-ref inputs "lua-lgi")))
22037a32 998 (wrap-program (string-append awesome "/bin/awesome")
c0c1811f
NG
999 `("LUA_PATH" suffix
1000 (,(format #f "~a/share/lua/~a/?.lua" lua-lgi lua-version)))
1001 `("LUA_CPATH" suffix
1002 (,(format #f "~a/lib/lua/~a/?.so" lua-lgi lua-version)))
22037a32 1003 `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))
c0c1811f
NG
1004 `("LD_LIBRARY_PATH" suffix (,cairo)))
1005 #t))))))
1006 (home-page "https://awesomewm.org/")
3d1240aa
CZ
1007 (synopsis "Highly configurable window manager")
1008 (description
c4dd0def 1009 "Awesome has been designed as a framework window manager. It is fast, small,
1010dynamic and extensible using the Lua programming language.")
c0c1811f 1011 (license license:gpl2+)))
395751c0 1012
1013(define-public menumaker
1014 (package
1015 (name "menumaker")
ea4c1e0b 1016 (version "0.99.11")
395751c0 1017 (source
1018 (origin
1019 (method url-fetch)
1020 (uri (string-append "mirror://sourceforge/menumaker/"
1021 "menumaker-" version ".tar.gz"))
1022 (sha256
ea4c1e0b 1023 (base32 "0dprndnhwm7b803zkp4pisiq06ic9iv8vr42in5is47jmvdim0wx"))))
395751c0 1024 (build-system gnu-build-system)
1025 (inputs
1026 `(("python" ,python)))
1027 (synopsis "Heuristics-driven menu generator")
1028 (description
1029 "MenuMaker is a menu generation utility for a number of X window
1030managers and desktop environments. It is capable of finding lots of
1031installed programs and generating a root menu consistent across all
1032supported window managers, so one will get (almost) the same menu in
1033all of them. Currently supported window managers include:
1034
1035@enumerate
1036@item BlackBox
1037@item Deskmenu
1038@item FluxBox
1039@item IceWM
1040@item OpenBox
1041@item PekWM
1042@item WindowMaker
1043@item XFCE
1044@end enumerate\n")
1045 (home-page "http://menumaker.sourceforge.net/")
1046 (license license:bsd-2)))
dbf544f9 1047
1048(define-public keybinder
1049 (package
1050 (name "keybinder")
1051 (version "0.3.1")
1052 (source
1053 (origin
1054 (method url-fetch)
6d688b6e
TGR
1055 (uri (string-append "https://github.com/kupferlauncher/keybinder"
1056 "/releases/download/v" version "/keybinder-"
dbf544f9 1057 version ".tar.gz"))
1058 (file-name (string-append name "-" version ".tar.gz"))
1059 (sha256
1060 (base32
1061 "0h52hj3ay8mfhwvmfxbxlfyq74hifdk8wxgxp7fr4iy6189hg7w7"))))
1062 (build-system gnu-build-system)
1063 (inputs
1064 `(("python-2" ,python-2)
1065 ("gtk+-2" ,gtk+-2)))
1066 (native-inputs
1067 `(("python2-pygtk" ,python2-pygtk)
1068 ("gtk-doc" ,gtk-doc)
1069 ("pkg-config" ,pkg-config)))
1070 (synopsis "Library for registering global keyboard shortcuts")
1071 (description
1072 "Keybinder is a library for registering global keyboard shortcuts.
1073Keybinder works with GTK-based applications using the X Window System.")
6d688b6e 1074 (home-page "https://github.com/kupferlauncher/keybinder")
dbf544f9 1075 (license license:gpl2+)))
78dfc9e2 1076
8c765a3b
IR
1077(define-public keybinder-3.0
1078 (package
1079 (name "keybinder-3.0")
1080 (version "0.3.2")
1081 (source
1082 (origin
1083 (method url-fetch)
1084 (uri (string-append "https://github.com/kupferlauncher/keybinder"
1085 "/releases/download/" name "-v" version "/" name "-"
1086 version ".tar.gz"))
1087 (file-name (string-append name "-" version ".tar.gz"))
1088 (sha256
1089 (base32
1090 "0830ihwnalw59pp1xzrp37dn58n8vwb8zasnm4a1h81v3x7dxqz6"))))
1091 (build-system gnu-build-system)
1092 (inputs
1093 `(("gtk+" ,gtk+)
1094 ("gobject-introspection" ,gobject-introspection)))
1095 (native-inputs
1096 `(("gtk-doc" ,gtk-doc)
1097 ("pkg-config" ,pkg-config)))
1098 (synopsis "Library for registering global keyboard shortcuts, Gtk3 version")
1099 (description
1100 "Keybinder is a library for registering global keyboard shortcuts.
1101Keybinder works with GTK-based applications using the X Window System.")
1102 (home-page "https://github.com/kupferlauncher/keybinder")
1103 (license license:x11)))
1104
78dfc9e2 1105(define-public spectrwm
1106 (package
1107 (name "spectrwm")
f6c8a97a 1108 (version "3.2.0")
78dfc9e2 1109 (source
1110 (origin
b82bd90c
TGR
1111 (method git-fetch)
1112 (uri (git-reference
1113 (url "https://github.com/conformal/spectrwm.git")
1114 (commit
1115 (string-append "SPECTRWM_"
1116 (string-join (string-split version #\.) "_")))))
1117 (file-name (git-file-name name version))
78dfc9e2 1118 (sha256
b82bd90c 1119 (base32 "1dfqy5f0s1nv6rqkz9lj006vypmp4rwxd5vczfk3ndzqgnh19kw6"))))
78dfc9e2 1120 (build-system gnu-build-system)
1121 (arguments
1122 `(#:make-flags (let ((pkg-config (lambda (flag)
1123 (string-append
1124 "$(shell pkg-config " flag " "
1125 "xft fontconfig x11 libpng)"))))
1126 (list
1127 "CC=gcc"
1128 (string-append "PREFIX=" %output)
1129 (string-append "INCS=-I. " (pkg-config "--cflags"))
1130 (string-append "LIBS=" (pkg-config "--libs") " -lm")))
f6c8a97a 1131 #:tests? #f ;no test suite
78dfc9e2 1132 #:phases
1133 (modify-phases %standard-phases
1134 (add-before 'build 'change-dir
1135 (lambda _
1136 (chdir "linux") #t))
1137 (add-after 'change-dir 'patch-makefile
1138 (lambda _
1139 (substitute* "Makefile"
1140 (("-g") ""))))
f6c8a97a 1141 (delete 'configure)))) ;no 'configure' exists
78dfc9e2 1142 (inputs
1143 `(("freetype" ,freetype)
1144 ("fontconfig" ,fontconfig)
1145 ("libx11" ,libx11)
1146 ("libxcursor" ,libxcursor)
1147 ("libxrandr" ,libxrandr)
1148 ("libxtst" ,libxtst)
1149 ("libxft" ,libxft)
1150 ("xcb-util" ,xcb-util)
1151 ("xcb-util-wm" ,xcb-util-wm)
1152 ("xcb-util-keysyms" ,xcb-util-keysyms)))
1153 (native-inputs
1154 `(("libxt" ,libxt)
1155 ("pkg-config" ,pkg-config)))
1156 (synopsis "Minimalistic automatic tiling window manager")
1157 (description
1158 "Spectrwm is a small dynamic tiling and reparenting window manager for X11.
1159It is inspired by Xmonad and dwm. Its major features include:
1160
1161@itemize
1162@item Navigation anywhere on all screens with either the keyboard or mouse
1163@item Customizable status bar
1164@item Restartable without losing state
1165@item Quick launch menu
1166@item Many screen layouts possible with a few simple key strokes
1167@item Move/resize floating windows
32008a75
TGR
1168@item Extended Window Manager Hints (@dfn{EWMH}) support
1169@item Configurable tiling
78dfc9e2 1170@item Adjustable tile gap allows for a true one pixel border
1171@item Customizable colors and border width
1172@end itemize\n")
1173 (home-page "https://github.com/conformal/spectrwm")
1174 (license license:isc)))
b4cb9308 1175
1176(define-public cwm
1177 (package
1178 (name "cwm")
9593caff 1179 (version "6.6")
b4cb9308 1180 (source
1181 (origin
1182 (method url-fetch)
9593caff 1183 (uri (string-append "https://leahneukirchen.org/releases/cwm-"
b4cb9308 1184 version ".tar.gz"))
1185 (sha256
1186 (base32
9593caff 1187 "0p350pbfn92m21jiq4i324sdskxhs71p435g0mgz7cmzprnhhg92"))))
b4cb9308 1188 (build-system gnu-build-system)
1189 (arguments
1190 `(#:make-flags (list "CC=gcc"
1191 (string-append "PREFIX=" %output))
1192 #:tests? #f
1193 #:phases
1194 (modify-phases %standard-phases
1195 (delete 'configure)
1196 (add-after 'build 'install-xsession
1197 (lambda* (#:key outputs #:allow-other-keys)
1198 ;; Add a .desktop file to xsessions.
1199 (let* ((output (assoc-ref outputs "out"))
1200 (xsessions (string-append output "/share/xsessions")))
1201 (mkdir-p xsessions)
1202 (with-output-to-file
1203 (string-append xsessions "/cwm.desktop")
1204 (lambda _
1205 (format #t
1206 "[Desktop Entry]~@
1207 Name=cwm~@
1208 Comment=OpenBSD Calm Window Manager fork~@
1209 Exec=~a/bin/cwm~@
1210 TryExec=~@*~a/bin/cwm~@
1211 Icon=~@
1212 Type=Application~%"
1213 output)))
1214 #t))))))
1215 (inputs
1216 `(("libxft" ,libxft)
1217 ("libxrandr" ,libxrandr)
1218 ("libxinerama" ,libxinerama)))
1219 (native-inputs
1220 `(("pkg-config" ,pkg-config)
1221 ("bison" ,bison)))
9593caff 1222 (home-page "https://github.com/leahneukirchen/cwm")
b4cb9308 1223 (synopsis "OpenBSD fork of the calmwm window manager")
1224 (description "Cwm is a stacking window manager for X11. It is an OpenBSD
1225project derived from the original Calm Window Manager.")
1226 (license license:isc)))
70024cfa
PAR
1227
1228(define-public nitrogen
1229 (package
1230 (name "nitrogen")
1231 (version "1.6.1")
1232 (source (origin
1233 (method url-fetch)
1234 (uri (string-append "http://github.com/l3ib/nitrogen/"
1235 "releases/download/" version "/"
1236 name "-" version ".tar.gz"))
1237 (sha256
1238 (base32
1239 "0zc3fl1mbhq0iyndy4ysmy8vv5c7xwf54rbgamzfhfvsgdq160pl"))))
1240 (build-system gnu-build-system)
1241 (inputs
1242 `(("gtk+" ,gtk+-2)
1243 ("gtkmm" ,gtkmm-2)
1244 ("glib" ,glib)
1245 ("glibmm" ,glibmm)))
1246 (native-inputs
de99ba7e 1247 `(("pkg-config" ,pkg-config)))
70024cfa
PAR
1248 (home-page "http://projects.l3ib.org/nitrogen/")
1249 (synopsis "Background browser and setter for X windows")
1250 (description
1251 "This package is a background browser and setter for X windows. It's
1252features are:
1253
1254@itemize
1255@item Multihead and Xinerama aware
1256@item Recall mode to used via startup script
1257@item Uses freedesktop.org standard for thumbnails
1258@item Can set GNOME background
1259@item Command lie set modes for script use
1260@item Inotify monitoring of browse directory
1261@item Lazy loading of thumbnails - conserves memory
1262@item \"Automatic\" set mode - determines best mode to set an image based on
1263its size
1264@item Display preview images in a tiled icon layout
1265@end itemize")
1266 (license license:gpl2+)))
d8dcbcc9
MP
1267
1268(define-public polybar
1269 (package
1270 (name "polybar")
99f80e5c 1271 (version "3.4.3")
d8dcbcc9
MP
1272 (source
1273 (origin
1274 (method url-fetch)
44b73520 1275 (uri (string-append "https://github.com/polybar/polybar/releases/"
4b9e4ac7 1276 "download/" version "/polybar-" version ".tar"))
d8dcbcc9 1277 (sha256
99f80e5c 1278 (base32 "0bw22qvbcdvyd0qv3ax48r34rnclbbb6dyb8h8zljq1r3lf15vfl"))))
d8dcbcc9
MP
1279 (build-system cmake-build-system)
1280 (arguments
1281 ;; Test is disabled because it requires downloading googletest from the
1282 ;; Internet.
1283 '(#:tests? #f))
1284 (inputs
1285 `(("alsa-lib" ,alsa-lib)
1286 ("cairo" ,cairo)
1287 ("i3-wm" ,i3-wm)
005c2ccf 1288 ("jsoncpp" ,jsoncpp)
d8dcbcc9
MP
1289 ("libmpdclient" ,libmpdclient)
1290 ("libnl" ,libnl)
1291 ("libxcb" ,libxcb)
1292 ("pulseaudio" ,pulseaudio)
1293 ("xcb-proto" ,xcb-proto)
1294 ("xcb-util" ,xcb-util)
1295 ("xcb-util-cursor" ,xcb-util-cursor)
1296 ("xcb-util-image" ,xcb-util-image)
1297 ("xcb-util-wm" ,xcb-util-wm)
1298 ("xcb-util-xrm" ,xcb-util-xrm)))
1299 (native-inputs
1300 `(("pkg-config" ,pkg-config)
47560aa2 1301 ("python-sphinx" ,python-sphinx) ; for the manual
e2684594
NG
1302 ;; XXX: "python" input must be located after "python-2", or the package
1303 ;; fails to build with "missing required python module: xcbgen".
d8dcbcc9
MP
1304 ("python-2" ,python-2) ; lib/xpp depends on python 2
1305 ("python" ,python))) ; xcb-proto depends on python 3
1306 (home-page "https://polybar.github.io/")
1307 (synopsis "Fast and easy-to-use status bar")
1308 (description "Polybar aims to help users build beautiful and highly
1309customizable status bars for their desktop environment. It has built-in
1310functionality to display information about the most commonly used services.")
1311 (license license:expat)))
eea969cf
RH
1312
1313(define-public wlroots
1314 (package
1315 (name "wlroots")
ae8b1d29 1316 (version "0.10.1")
eea969cf
RH
1317 (source
1318 (origin
1319 (method git-fetch)
1320 (uri (git-reference
1321 (url "https://github.com/swaywm/wlroots.git")
1322 (commit version)))
1323 (file-name (git-file-name name version))
1324 (sha256
ae8b1d29 1325 (base32 "0j2lh9vc92zhn44rjbia5aw3y1rpgfng1x1h17lcvj5m4i6vj0pc"))))
eea969cf
RH
1326 (build-system meson-build-system)
1327 (arguments
1328 `(#:configure-flags '("-Dlogind-provider=elogind")
1329 #:phases
1330 (modify-phases %standard-phases
1331 (add-before 'configure 'hardcode-paths
1332 (lambda* (#:key inputs #:allow-other-keys)
1333 (substitute* "xwayland/xwayland.c"
1334 (("Xwayland") (string-append (assoc-ref inputs
1335 "xorg-server-xwayland")
1336 "/bin/Xwayland")))
1337 #t)))))
1338 (inputs `(("elogind" ,elogind)
1339 ("eudev" ,eudev)
1340 ("libinput" ,libinput)
1341 ("libxkbcommon" ,libxkbcommon)
1342 ("mesa" ,mesa)
1343 ("pixman" ,pixman)
1344 ("wayland" ,wayland)
1345 ("xorg-server-xwayland" ,xorg-server-xwayland)))
1346 (native-inputs `(("ffmpeg" ,ffmpeg)
1347 ("libcap" ,libcap)
1348 ("libpng" ,libpng)
1349 ("pkg-config" ,pkg-config)
1350 ("wayland-protocols" ,wayland-protocols)))
1351 (home-page "https://github.com/swaywm/wlroots")
1352 (synopsis "Pluggable, composable, unopinionated modules for building a
1353Wayland compositor")
1354 (description "wlroots is a set of pluggable, composable, unopinionated
1355modules for building a Wayland compositor.")
1356 (license license:expat))) ; MIT license
2ff844f0
RH
1357
1358(define-public sway
1359 (package
1360 (name "sway")
b06d5f54 1361 (version "1.4")
2ff844f0
RH
1362 (source
1363 (origin
1364 (method git-fetch)
1365 (uri (git-reference
1366 (url "https://github.com/swaywm/sway.git")
1367 (commit version)))
1368 (file-name (git-file-name name version))
1369 (sha256
b06d5f54 1370 (base32 "11qf89y3q92g696a6f4d23qb44gqixg6qxq740vwv2jw59ms34ja"))))
2ff844f0
RH
1371 (build-system meson-build-system)
1372 (arguments
1373 `(#:phases
1374 (modify-phases %standard-phases
1375 (add-before 'configure 'hardcode-paths
1376 (lambda* (#:key inputs #:allow-other-keys)
e23b6a68
MP
1377 ;; Hardcode path to swaybg.
1378 (substitute* "sway/config.c"
1379 (("strdup..swaybg..")
1380 (string-append "strdup(\"" (assoc-ref inputs "swaybg")
1381 "/bin/swaybg\")")))
1382 ;; Hardcode path to scdoc.
2ff844f0
RH
1383 (substitute* "meson.build"
1384 (("scdoc.get_pkgconfig_variable..scdoc..")
1385 (string-append "'" (assoc-ref inputs "scdoc")
1386 "/bin/scdoc'")))
1387 #t)))))
1388 (inputs `(("cairo" ,cairo)
1389 ("elogind" ,elogind)
1390 ("gdk-pixbuf" ,gdk-pixbuf)
1391 ("json-c" ,json-c)
aa07299f 1392 ("libevdev" ,libevdev)
2ff844f0
RH
1393 ("libinput" ,libinput)
1394 ("libxkbcommon" ,libxkbcommon)
1395 ("pango" ,pango)
e23b6a68 1396 ("swaybg" ,swaybg)
2ff844f0
RH
1397 ("wayland" ,wayland)
1398 ("wlroots" ,wlroots)))
03f40ce6 1399 (native-inputs `(("libcap" ,libcap)
2ff844f0
RH
1400 ("linux-pam" ,linux-pam)
1401 ("mesa" ,mesa)
1402 ("pkg-config" ,pkg-config)
1403 ("scdoc" ,scdoc)
1404 ("wayland-protocols" ,wayland-protocols)))
1405 (home-page "https://github.com/swaywm/sway")
1406 (synopsis "Wayland compositor compatible with i3")
1407 (description "Sway is a i3-compatible Wayland compositor.")
1408 (license license:expat))) ; MIT license
06ae5efc
RH
1409
1410(define-public swayidle
1411 (package
1412 (name "swayidle")
e6bd575a 1413 (version "1.5")
06ae5efc
RH
1414 (source
1415 (origin
1416 (method git-fetch)
1417 (uri (git-reference
1418 (url "https://github.com/swaywm/swayidle.git")
1419 (commit version)))
1420 (file-name (git-file-name name version))
1421 (sha256
e6bd575a 1422 (base32 "05qi96j58xqxjiighay1d39rfanxcpn6vlynj23mb5dymxvlaq9n"))))
06ae5efc 1423 (build-system meson-build-system)
ddd401d2
MP
1424 (arguments
1425 `(#:configure-flags '("-Dlogind-provider=elogind")))
1426 (inputs `(("elogind" ,elogind)
1427 ("wayland" ,wayland)))
06ae5efc
RH
1428 (native-inputs `(("pkg-config" ,pkg-config)
1429 ("scdoc" ,scdoc)
1430 ("wayland-protocols" ,wayland-protocols)))
1431 (home-page "https://github.com/swaywm/sway")
1432 (synopsis "Idle management daemon for Wayland compositors")
1433 (description "Swayidle is a idle management daemon for Wayland compositors.")
1434 (license license:expat))) ; MIT license
b0805973
RH
1435
1436(define-public swaylock
1437 (package
1438 (name "swaylock")
11bca533 1439 (version "1.4")
b0805973
RH
1440 (source
1441 (origin
1442 (method git-fetch)
1443 (uri (git-reference
1444 (url "https://github.com/swaywm/swaylock.git")
1445 (commit version)))
1446 (file-name (git-file-name name version))
1447 (sha256
11bca533 1448 (base32 "1ii9ql1mxkk2z69dv6bg1x22nl3a46iww764wqjiv78x08xpk982"))))
b0805973
RH
1449 (build-system meson-build-system)
1450 (inputs `(("cairo" ,cairo)
1451 ("gdk-pixbuf" ,gdk-pixbuf)
1452 ("libxkbcommon" ,libxkbcommon)
1453 ;("linux-pam" ,linux-pam) ; FIXME: Doesn't work.
1454 ("wayland" ,wayland)))
bc552a0c 1455 (native-inputs `(("pango" ,pango)
b0805973
RH
1456 ("pkg-config" ,pkg-config)
1457 ("scdoc" ,scdoc)
1458 ("wayland-protocols" ,wayland-protocols)))
1459 (home-page "https://github.com/swaywm/sway")
1460 (synopsis "Screen locking utility for Wayland compositors")
1461 (description "Swaylock is a screen locking utility for Wayland compositors.")
1462 (license license:expat))) ; MIT license
bedb3457
SS
1463
1464(define-public swaybg
1465 (package
1466 (name "swaybg")
1467 (version "1.0")
1468 (source
1469 (origin
1470 (method git-fetch)
1471 (uri (git-reference
1472 (url "https://github.com/swaywm/swaybg.git")
1473 (commit version)))
1474 (file-name (git-file-name name version))
1475 (sha256
1476 (base32 "1lmqz5bmig90gq2m7lwf02d2g7z4hzf8fhqz78c8vk92c6p4xwbc"))))
1477 (build-system meson-build-system)
1478 (inputs `(("cairo" ,cairo)
1479 ("gdk-pixbuf" ,gdk-pixbuf)
1480 ("wayland" ,wayland)))
3e295e8d 1481 (native-inputs `(("pkg-config" ,pkg-config)
bedb3457
SS
1482 ("scdoc" ,scdoc)
1483 ("wayland-protocols" ,wayland-protocols)))
1484 (home-page "https://github.com/swaywm/sway")
1485 (synopsis "Screen wallpaper utility for Wayland compositors")
1486 (description "Swaybg is a wallpaper utility for Wayland compositors.")
1487 (license license:expat))) ; MIT license
7a1d6a77
GB
1488
1489(define-public waybar
1490 (package
1491 (name "waybar")
5e78a87b 1492 (version "0.9.1")
7a1d6a77
GB
1493 (source
1494 (origin
1495 (method git-fetch)
1496 (uri (git-reference
1497 (url "https://github.com/Alexays/Waybar.git")
1498 (commit version)))
1499 (file-name (git-file-name name version))
1500 (sha256
5e78a87b 1501 (base32 "0drlv8im5phz39jxp3gxkc40b6f85bb3piff2v3hmnfzh7ib915s"))))
7a1d6a77
GB
1502 (build-system meson-build-system)
1503 (arguments
1504 `(#:configure-flags
b80dd5e3 1505 (list (string-append "-Dout=" (assoc-ref %outputs "out")))))
5e78a87b
BT
1506 (inputs `(("date" ,date)
1507 ("fmt" ,fmt)
1508 ("gtk-layer-shell" ,gtk-layer-shell)
7a1d6a77
GB
1509 ("gtkmm" ,gtkmm)
1510 ("jsoncpp" ,jsoncpp)
de2d14f2 1511 ("libdbusmenu" ,libdbusmenu)
7a1d6a77 1512 ("libinput" ,libinput)
de2d14f2
GB
1513 ("libmpdclent" ,libmpdclient)
1514 ("libnl" ,libnl)
1515 ("pulseaudio" ,pulseaudio)
7a1d6a77
GB
1516 ("spdlog" ,spdlog)
1517 ("wayland" ,wayland)))
b80dd5e3 1518 (native-inputs `(("glib:bin" ,glib "bin")
7a1d6a77
GB
1519 ("pkg-config" ,pkg-config)
1520 ("wayland-protocols" ,wayland-protocols)))
1521 (home-page "https://github.com/Alexays/Waybar")
5e78a87b 1522 (synopsis "Wayland bar for Sway and Wlroots based compositors")
7a1d6a77
GB
1523 (description "Waybar is a highly customisable Wayland bar for Sway and
1524Wlroots based compositors.")
1525 (license license:expat))) ; MIT license
46dc940c
GB
1526
1527(define-public mako
1528 (package
1529 (name "mako")
b60ffcee 1530 (version "1.4")
46dc940c
GB
1531 (source
1532 (origin
1533 (method git-fetch)
1534 (uri (git-reference
1535 (url "https://github.com/emersion/mako.git")
1536 (commit (string-append "v" version))))
1537 (file-name (git-file-name name version))
1538 (sha256
b60ffcee 1539 (base32 "11ymiq6cr2ma0iva1mqybn3j6k73bsc6lv6pcbdq7hkhd4f9b7j9"))))
46dc940c
GB
1540 (build-system meson-build-system)
1541 (inputs `(("cairo" ,cairo)
1542 ("elogind" ,elogind)
1543 ("gdk-pixbuf" ,gdk-pixbuf)
1544 ("pango" ,pango)
1545 ("wayland" ,wayland)))
1546 (native-inputs `(("pkg-config" ,pkg-config)
1547 ("scdoc" ,scdoc)
1548 ("wayland-protocols" ,wayland-protocols)))
1549 (home-page "https://wayland.emersion.fr/mako")
1550 (synopsis "Lightweight Wayland notification daemon")
1551 (description "Mako is a lightweight notification daemon for Wayland
1552compositors that support the layer-shell protocol.")
1553 (license license:expat))) ; MIT license
88f06fd0
PN
1554
1555(define-public stumpwm
1556 (package
1557 (name "stumpwm")
59198ba1 1558 (version "19.11")
88f06fd0
PN
1559 (source
1560 (origin
1561 (method git-fetch)
1562 (uri (git-reference
1563 (url "https://github.com/stumpwm/stumpwm.git")
1564 (commit version)))
1565 (file-name (git-file-name "stumpwm" version))
1566 (sha256
59198ba1 1567 (base32 "1ha8803ll7472kqxsy2xz0v5d4sv8apmc9z631d67m31q0z1m9rz"))))
88f06fd0
PN
1568 (build-system asdf-build-system/sbcl)
1569 (native-inputs `(("fiasco" ,sbcl-fiasco)
1570 ("texinfo" ,texinfo)))
1571 (inputs `(("cl-ppcre" ,sbcl-cl-ppcre)
1572 ("clx" ,sbcl-clx)
1573 ("alexandria" ,sbcl-alexandria)))
1574 (outputs '("out" "lib"))
1575 (arguments
1576 '(#:asd-system-name "stumpwm"
1577 #:phases
1578 (modify-phases %standard-phases
1579 (add-after 'create-symlinks 'build-program
1580 (lambda* (#:key outputs #:allow-other-keys)
1581 (build-program
1582 (string-append (assoc-ref outputs "out") "/bin/stumpwm")
1583 outputs
1584 #:entry-program '((stumpwm:stumpwm) 0))))
1585 (add-after 'build-program 'create-desktop-file
1586 (lambda* (#:key outputs #:allow-other-keys)
1587 (let* ((out (assoc-ref outputs "out"))
1588 (xsessions (string-append out "/share/xsessions")))
1589 (mkdir-p xsessions)
1590 (call-with-output-file
1591 (string-append xsessions "/stumpwm.desktop")
1592 (lambda (file)
1593 (format file
1594 "[Desktop Entry]~@
1595 Name=stumpwm~@
1596 Comment=The Stump Window Manager~@
1597 Exec=~a/bin/stumpwm~@
1598 TryExec=~@*~a/bin/stumpwm~@
1599 Icon=~@
1600 Type=Application~%"
1601 out)))
1602 #t)))
1603 (add-after 'install 'install-manual
1604 (lambda* (#:key outputs #:allow-other-keys)
1605 ;; The proper way to the manual is bootstrapping a full autotools
1606 ;; build system and running ‘./configure && make stumpwm.info’ to
1607 ;; do some macro substitution. We can get away with much less.
1608 (let* ((out (assoc-ref outputs "out"))
1609 (info (string-append out "/share/info")))
1610 (invoke "makeinfo" "stumpwm.texi.in")
1611 (install-file "stumpwm.info" info)
1612 #t))))))
1613 (synopsis "Window manager written in Common Lisp")
1614 (description "Stumpwm is a window manager written entirely in Common Lisp.
1615It attempts to be highly customizable while relying entirely on the keyboard
1616for input. These design decisions reflect the growing popularity of
1617productive, customizable lisp based systems.")
1618 (home-page "https://github.com/stumpwm/stumpwm")
1619 (license license:gpl2+)
1620 (properties `((cl-source-variant . ,(delay cl-stumpwm))))))
1621
1622(define-public sbcl-stumpwm
1623 (deprecated-package "sbcl-stumpwm" stumpwm))
1624
1625(define-public cl-stumpwm
1626 (package
1627 (inherit (sbcl-package->cl-source-package stumpwm))
1628 (name "cl-stumpwm")))
1629
1630(define-public stumpwm+slynk
1631 (package
1632 (inherit stumpwm)
1633 (name "stumpwm-with-slynk")
1634 (outputs '("out"))
1635 (inputs
1636 `(("stumpwm" ,stumpwm "lib")
1637 ("slynk" ,sbcl-slynk)))
1638 (arguments
1639 (substitute-keyword-arguments (package-arguments stumpwm)
1640 ((#:phases phases)
1641 `(modify-phases ,phases
1642 (replace 'build-program
1643 (lambda* (#:key inputs outputs #:allow-other-keys)
1644 (let* ((out (assoc-ref outputs "out"))
1645 (program (string-append out "/bin/stumpwm")))
1646 (build-program program outputs
1647 #:entry-program '((stumpwm:stumpwm) 0)
1648 #:dependencies '("stumpwm"
1649 ,@(@@ (gnu packages lisp-xyz) slynk-systems))
1650 #:dependency-prefixes
1651 (map (lambda (input) (assoc-ref inputs input))
1652 '("stumpwm" "slynk")))
1653 ;; Remove unneeded file.
1654 (delete-file (string-append out "/bin/stumpwm-exec.fasl"))
1655 #t)))
1656 (delete 'copy-source)
1657 (delete 'build)
1658 (delete 'check)
1659 (delete 'create-asd-file)
1660 (delete 'cleanup)
1661 (delete 'create-symlinks)))))))
1662
9a12243c 1663(define-public stumpish
8b2a637d
MK
1664 (let ((commit "920f8fc1488f7953f205e1dda4c2ecbbbda56d6")
1665 (revision "2"))
9a12243c
OP
1666 (package
1667 (name "stumpish")
1668 (version (git-version "0.0.1" revision commit)) ;no upstream release
1669 (source
1670 (origin
1671 (method git-fetch)
1672 (uri (git-reference
1673 (url "https://github.com/stumpwm/stumpwm-contrib.git")
1674 (commit commit)))
1675 (file-name (git-file-name name version))
1676 (sha256
8b2a637d 1677 (base32 "0giac390bq95ag41xkxqp8jjrhfx1wpgglz7jg5rkm0wjhcwmyml"))))
9a12243c
OP
1678 (inputs
1679 `(("bash" ,bash)
1680 ("rlwrap" ,rlwrap)))
1681 (build-system trivial-build-system)
1682 (arguments
1683 '(#:modules ((guix build utils))
1684 #:builder
1685 (begin
1686 (use-modules (guix build utils))
1687 (copy-recursively (assoc-ref %build-inputs "source") ".")
1688 (chdir "util/stumpish")
1689 (substitute* "stumpish"
1690 (("rlwrap") (string-append (assoc-ref %build-inputs "rlwrap")
1691 "/bin/rlwrap"))
1692 (("/bin/sh") (string-append (assoc-ref %build-inputs "bash")
1693 "/bin/bash")))
1694 (install-file "stumpish" (string-append %output "/bin")))))
1695 (home-page "https://github.com/stumpwm/stumpwm-contrib")
1696 (synopsis "StumpWM interactive shell")
1697 (description "This package provides a StumpWM interactive shell.")
1698 (license (list license:gpl2+ license:gpl3+ license:bsd-2)))))
1699
88f06fd0
PN
1700(define-public sbcl-stumpwm+slynk
1701 (deprecated-package "sbcl-stumpwm-with-slynk" stumpwm+slynk))
d4145638 1702
65051fdc 1703(define-public sbcl-stumpwm-ttf-fonts
7b7c3c08
MK
1704 (let ((commit "920f8fc1488f7953f205e1dda4c2ecbbbda56d6")
1705 (revision "2"))
65051fdc
OP
1706 (package
1707 (name "sbcl-ttf-fonts")
1708 (version (git-version "0.0.1" revision commit)) ;no upstream release
1709 (source
1710 (origin
1711 (method git-fetch)
1712 (uri (git-reference
1713 (url "https://github.com/stumpwm/stumpwm-contrib.git")
1714 (commit commit)))
1715 (file-name (git-file-name name version))
1716 (sha256
7b7c3c08 1717 (base32 "0giac390bq95ag41xkxqp8jjrhfx1wpgglz7jg5rkm0wjhcwmyml"))))
65051fdc
OP
1718 (inputs
1719 `(("stumpwm" ,stumpwm "lib")
1720 ("clx-truetype" ,sbcl-clx-truetype)))
1721 (build-system asdf-build-system/sbcl)
1722 (arguments
1723 '(#:phases
1724 (modify-phases %standard-phases
1725 (add-after 'unpack 'chdir
1726 (lambda _
1727 (chdir "util/ttf-fonts"))))))
1728 (home-page "https://github.com/stumpwm/stumpwm-contrib")
1729 (synopsis "Implementation of TTF font rendering for Lisp")
1730 (description "This package provides a Lisp implementation of TTF font
1731rendering.")
1732 (license (list license:gpl2+ license:gpl3+ license:bsd-2)))))
1733
fd65311c 1734(define-public sbcl-stumpwm-pass
40dab176
MK
1735 (let ((commit "920f8fc1488f7953f205e1dda4c2ecbbbda56d6")
1736 (revision "2"))
fd65311c
MK
1737 (package
1738 (name "sbcl-pass")
1739 (version (git-version "0.0.1" revision commit)) ;no upstream release
1740 (source
1741 (origin
1742 (method git-fetch)
1743 (uri (git-reference
1744 (url "https://github.com/stumpwm/stumpwm-contrib.git")
1745 (commit commit)))
1746 (file-name (git-file-name name version))
1747 (sha256
40dab176 1748 (base32 "0giac390bq95ag41xkxqp8jjrhfx1wpgglz7jg5rkm0wjhcwmyml"))))
fd65311c
MK
1749 (inputs
1750 `(("stumpwm" ,stumpwm "lib")))
1751 (build-system asdf-build-system/sbcl)
1752 (arguments
1753 '(#:phases
1754 (modify-phases %standard-phases
1755 (add-after 'unpack 'chdir
1756 (lambda _
1757 (chdir "util/pass"))))))
1758 (home-page "https://github.com/stumpwm/stumpwm-contrib")
1759 (synopsis "Integrate @code{pass} wih StumpWM")
1760 (description "This package provides an interface which integrates
1761password-store into StumpWM.")
1762 (license (list license:gpl2+ license:gpl3+ license:bsd-2)))))
1763
396eb9e1 1764(define-public sbcl-stumpwm-globalwindows
546f21c2
MK
1765 (let ((commit "920f8fc1488f7953f205e1dda4c2ecbbbda56d6")
1766 (revision "2"))
396eb9e1
OP
1767 (package
1768 (name "sbcl-globalwindows")
1769 (version (git-version "0.0.1" revision commit)) ;no upstream release
1770 (source
1771 (origin
1772 (method git-fetch)
1773 (uri (git-reference
1774 (url "https://github.com/stumpwm/stumpwm-contrib.git")
1775 (commit commit)))
1776 (file-name (git-file-name name version))
1777 (sha256
546f21c2 1778 (base32 "0giac390bq95ag41xkxqp8jjrhfx1wpgglz7jg5rkm0wjhcwmyml"))))
396eb9e1
OP
1779 (inputs
1780 `(("stumpwm" ,stumpwm "lib")))
1781 (build-system asdf-build-system/sbcl)
1782 (arguments
1783 '(#:phases
1784 (modify-phases %standard-phases
1785 (add-after 'unpack 'chdir
1786 (lambda _
1787 (chdir "util/globalwindows"))))))
1788 (home-page "https://github.com/stumpwm/stumpwm-contrib")
1789 (synopsis "Manipulate all windows in the current X session")
1790 (description "This package provides a StumpWM module to manipulate all
1791windows in the current X session.")
1792 (license (list license:gpl2+ license:gpl3+ license:bsd-2)))))
1793
693d0fff 1794(define-public sbcl-stumpwm-swm-gaps
dfd4a298
MK
1795 (let ((commit "920f8fc1488f7953f205e1dda4c2ecbbbda56d6")
1796 (revision "2"))
693d0fff
OP
1797 (package
1798 (name "sbcl-swm-gaps")
1799 (version (git-version "0.0.1" revision commit)) ;no upstream release
1800 (source
1801 (origin
1802 (method git-fetch)
1803 (uri (git-reference
1804 (url "https://github.com/stumpwm/stumpwm-contrib.git")
1805 (commit commit)))
1806 (file-name (git-file-name name version))
1807 (sha256
dfd4a298 1808 (base32 "0giac390bq95ag41xkxqp8jjrhfx1wpgglz7jg5rkm0wjhcwmyml"))))
693d0fff
OP
1809 (inputs
1810 `(("stumpwm" ,stumpwm "lib")))
1811 (build-system asdf-build-system/sbcl)
1812 (arguments
1813 '(#:phases
1814 (modify-phases %standard-phases
1815 (add-after 'unpack 'chdir
1816 (lambda _
1817 (chdir "util/swm-gaps"))))))
1818 (home-page "https://github.com/stumpwm/stumpwm-contrib")
1819 (synopsis "Gaps between windows for StumpWM")
1820 (description "This package provides a StumpWM module which adds gaps
1821between windows.")
1822 (license (list license:gpl2+ license:gpl3+ license:bsd-2)))))
1823
d4145638
N
1824(define-public lemonbar
1825 (let ((commit "35183ab81d2128dbb7b6d8e119cc57846bcefdb4")
1826 (revision "1"))
1827 (package
1828 (name "lemonbar")
1829 (version (git-version "1.3" revision commit))
1830 (source (origin
1831 (method git-fetch)
1832 (uri (git-reference
1833 (url "https://github.com/LemonBoy/bar")
1834 (commit commit)))
1835 (file-name (git-file-name name version))
1836 (sha256
1837 (base32
1838 "1wwqbph392iwz8skaqxb0xpklb1l6yganqz80g4x1fhrnz7idmlh"))))
1839 (build-system gnu-build-system)
1840 (arguments
6978cb28
TGR
1841 `(#:tests? #f ; no test suite
1842 #:make-flags
1843 (list ,(string-append "CC=" (cc-for-target))
1844 (string-append "PREFIX=" %output))
d4145638
N
1845 #:phases
1846 (modify-phases %standard-phases
1847 (delete 'configure))))
1848 (inputs
1849 `(("libxcb" ,libxcb)))
1850 (native-inputs
1851 `(("perl" ,perl)))
1852 (home-page "https://github.com/LemonBoy/bar")
1853 (synopsis "Featherweight status bar")
1854 (description
1855 "@code{lemonbar} (formerly known as @code{bar}) is a lightweight
1856bar entirely based on XCB. Provides full UTF-8 support, basic
1857formatting, RandR and Xinerama support and EWMH compliance without
1858wasting your precious memory.")
1859 (license license:x11))))