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