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