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