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