gnu: Add sbcl-stumpwm-screenshot.
[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 ;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
41 ;;;
42 ;;; This file is part of GNU Guix.
43 ;;;
44 ;;; GNU Guix is free software; you can redistribute it and/or modify it
45 ;;; under the terms of the GNU General Public License as published by
46 ;;; the Free Software Foundation; either version 3 of the License, or (at
47 ;;; your option) any later version.
48 ;;;
49 ;;; GNU Guix is distributed in the hope that it will be useful, but
50 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
51 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
52 ;;; GNU General Public License for more details.
53 ;;;
54 ;;; You should have received a copy of the GNU General Public License
55 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
56
57 (define-module (gnu packages wm)
58 #:use-module ((guix licenses) #:prefix license:)
59 #:use-module (guix packages)
60 #:use-module (guix download)
61 #:use-module (guix git-download)
62 #:use-module (guix build-system asdf)
63 #:use-module (guix build-system cmake)
64 #:use-module (guix build-system gnu)
65 #:use-module (guix build-system haskell)
66 #:use-module (guix build-system meson)
67 #:use-module (guix build-system perl)
68 #:use-module (guix build-system python)
69 #:use-module (guix build-system trivial)
70 #:use-module (guix utils)
71 #:use-module (gnu packages)
72 #:use-module (gnu packages bash)
73 #:use-module (gnu packages autotools)
74 #:use-module (gnu packages base)
75 #:use-module (gnu packages bison)
76 #:use-module (gnu packages build-tools) ;for meson-0.55
77 #:use-module (gnu packages calendar)
78 #:use-module (gnu packages docbook)
79 #:use-module (gnu packages documentation)
80 #:use-module (gnu packages fontutils)
81 #:use-module (gnu packages freedesktop)
82 #:use-module (gnu packages fribidi)
83 #:use-module (gnu packages gawk)
84 #:use-module (gnu packages gcc)
85 #:use-module (gnu packages gl)
86 #:use-module (gnu packages glib)
87 #:use-module (gnu packages gperf)
88 #:use-module (gnu packages gtk)
89 #:use-module (gnu packages haskell-check)
90 #:use-module (gnu packages haskell-web)
91 #:use-module (gnu packages haskell-xyz)
92 #:use-module (gnu packages image)
93 #:use-module (gnu packages imagemagick)
94 #:use-module (gnu packages libevent)
95 #:use-module (gnu packages linux)
96 #:use-module (gnu packages lisp-xyz)
97 #:use-module (gnu packages logging)
98 #:use-module (gnu packages lua)
99 #:use-module (gnu packages m4)
100 #:use-module (gnu packages man)
101 #:use-module (gnu packages maths)
102 #:use-module (gnu packages mpd)
103 #:use-module (gnu packages pcre)
104 #:use-module (gnu packages perl)
105 #:use-module (gnu packages pkg-config)
106 #:use-module (gnu packages pretty-print)
107 #:use-module (gnu packages pulseaudio)
108 #:use-module (gnu packages python)
109 #:use-module (gnu packages readline)
110 #:use-module (gnu packages serialization)
111 #:use-module (gnu packages sphinx)
112 #:use-module (gnu packages suckless)
113 #:use-module (gnu packages texinfo)
114 #:use-module (gnu packages textutils)
115 #:use-module (gnu packages video)
116 #:use-module (gnu packages web)
117 #:use-module (gnu packages xdisorg)
118 #:use-module (gnu packages xml)
119 #:use-module (gnu packages xorg))
120
121 (define-public bspwm
122 (package
123 (name "bspwm")
124 (version "0.9.10")
125 (source
126 (origin
127 (method git-fetch)
128 (uri (git-reference
129 (url "https://github.com/baskerville/bspwm")
130 (commit version)))
131 (file-name (git-file-name name version))
132 (sha256
133 (base32 "0qlv7b4c2mmjfd65y100d11x8iqyg5f6lfiws3cgmpjidhdygnxc"))))
134 (build-system gnu-build-system)
135 (inputs
136 `(("libxcb" ,libxcb)
137 ("libxinerama" ,libxinerama)
138 ("sxhkd" ,sxhkd)
139 ("xcb-util" ,xcb-util)
140 ("xcb-util-keysyms" ,xcb-util-keysyms)
141 ("xcb-util-wm" ,xcb-util-wm)))
142 (arguments
143 '(#:phases
144 (modify-phases %standard-phases
145 (delete 'configure)) ; no configure script
146 #:tests? #f ; no check target
147 #:make-flags
148 (list "CC=gcc"
149 (string-append "PREFIX=" %output))))
150 (home-page "https://github.com/baskerville/bspwm")
151 (synopsis "Tiling window manager based on binary space partitioning")
152 (description "bspwm is a tiling window manager that represents windows as
153 the leaves of a full binary tree.")
154 (license license:bsd-2)))
155
156 (define-public herbstluftwm
157 (package
158 (name "herbstluftwm")
159 (version "0.8.3")
160 (source
161 (origin
162 (method url-fetch)
163 (uri (string-append "https://herbstluftwm.org/tarballs/herbstluftwm-"
164 version ".tar.gz"))
165 (sha256
166 (base32 "1qmb4pjf2f6g0dvcg11cw9njwmxblhqzd70ai8qnlgqw1iz3nkm1"))
167 (file-name (string-append "herbstluftwm-" version ".tar.gz"))))
168 (build-system cmake-build-system)
169 (inputs
170 `(("dzen" ,dzen)
171 ("dmenu" ,dmenu)
172 ("glib" ,glib)
173 ("glibmm" ,glibmm)
174 ("xterm" ,xterm)
175 ("xsetroot" ,xsetroot)
176 ("libx11" ,libx11)
177 ("libxext" ,libxext)
178 ("libxinerama" ,libxinerama)
179 ("libxrandr" ,libxrandr)))
180 (native-inputs
181 `(("asciidoc" ,asciidoc)
182 ("pkg-config" ,pkg-config)))
183 (arguments
184 '(#:tests? #f
185 #:configure-flags
186 (let ((out (assoc-ref %outputs "out")))
187 (list "-DCC=gcc"
188 (string-append "-DCMAKE_INSTALL_SYSCONF_PREFIX=" out "/etc")
189 (string-append "-DBASHCOMPLETIONDIR=" out "/etc/bash_completion.d")))
190 #:phases
191 (modify-phases %standard-phases
192 (add-after 'install 'install-xsession
193 (lambda* (#:key outputs #:allow-other-keys)
194 (let* ((out (assoc-ref outputs "out"))
195 (xsessions (string-append out "/share/xsessions")))
196 (mkdir-p xsessions)
197 (call-with-output-file
198 (string-append xsessions "/herbstluftwm.desktop")
199 (lambda (port)
200 (format port "~
201 [Desktop Entry]~@
202 Name=herbstluftwm~@
203 Comment=Manual tiling window manager~@
204 Exec=~a/bin/herbstluftwm~@
205 Type=XSession~%" out)))
206 #t))))))
207 (synopsis "Tiling window manager for X11")
208 (description "herbstluftwm is a manual tiling window manager for X11 using
209 Xlib and GLib. Its main features are:
210
211 @itemize
212 @item
213 The layout is based on splitting frames into subframes which can be split
214 again or can be filled with windows (similar to i3 or musca).
215
216 @item
217 Tags (or workspaces or virtual desktops or …) can be added/removed at runtime.
218 Each tag contains an own layout.
219
220 @item
221 Exactly one tag is viewed on each monitor. The tags are monitor independent
222 (similar to Xmonad).
223
224 @item
225 It is configured at runtime via IPC calls from @command{herbstclient}. So the
226 configuration file is just a script which is run on startup (similar to wmii
227 or musca).
228
229 @end itemize")
230 (home-page "https://herbstluftwm.org")
231 (license license:bsd-2)))
232
233 (define-public i3status
234 (package
235 (name "i3status")
236 (version "2.13")
237 (source (origin
238 (method url-fetch)
239 (uri (string-append "https://i3wm.org/i3status/i3status-"
240 version ".tar.bz2"))
241 (sha256
242 (base32
243 "0rhlzb96mw64z2jnhwz9nibc7pxg549626lz5642xxk5hpzwk2ff"))))
244 (build-system gnu-build-system)
245 (arguments
246 `(;; XXX: Do an "out of source" build to work around
247 ;; <https://github.com/i3/i3status/issues/339>.
248 #:out-of-source? #t
249 #:tests? #f)) ; no test suite
250 (inputs
251 `(("openlibm" ,openlibm)
252 ("libconfuse" ,libconfuse)
253 ("libyajl" ,libyajl)
254 ("alsa-lib" ,alsa-lib)
255 ("pulseaudio" ,pulseaudio)
256 ("libnl" ,libnl)
257 ("libcap" ,libcap)
258 ("asciidoc" ,asciidoc)))
259 (native-inputs
260 `(("pkg-config" ,pkg-config)
261 ("docbook-xsl" ,docbook-xsl)
262 ("libxml2" ,libxml2) ;for XML_CATALOG_FILES
263 ("xmlto" ,xmlto)))
264 (home-page "https://i3wm.org/i3status/")
265 (synopsis "Status bar for i3bar, dzen2, xmobar or similar programs")
266 (description "i3status is a small program for generating a status bar for
267 i3bar, dzen2, xmobar or similar programs. It is designed to be very efficient
268 by issuing a very small number of system calls, as one generally wants to
269 update such a status line every second. This ensures that even under high
270 load, your status bar is updated correctly. Also, it saves a bit of energy by
271 not hogging your CPU as much as spawning the corresponding amount of shell
272 commands would.")
273 (license license:bsd-3)))
274
275 (define-public i3-wm
276 (package
277 (name "i3-wm")
278 (version "4.18.3")
279 (source (origin
280 (method url-fetch)
281 (uri (string-append "https://i3wm.org/downloads/i3-"
282 version ".tar.bz2"))
283 (sha256
284 (base32
285 "03dijnwv2n8ak9jq59fhq0rc80m5wjc9d54fslqaivnnz81pkbjk"))))
286 (build-system gnu-build-system)
287 (arguments
288 `(#:configure-flags
289 ;; The build system tries to build in a separate directory, but that
290 ;; seems to be unnecessary.
291 (list "--disable-builddir")
292
293 ;; The test suite requires the unpackaged Xephyr X server.
294 #:tests? #f
295 #:phases
296 (modify-phases %standard-phases
297 (add-after 'install 'patch-session-file
298 (lambda* (#:key outputs #:allow-other-keys)
299 (let* ((out (assoc-ref outputs "out"))
300 (i3 (string-append out "/bin/i3"))
301 (i3-with-shmlog (string-append out "/bin/i3-with-shmlog")))
302 (substitute* (string-append out "/share/xsessions/i3.desktop")
303 (("Exec=i3") (string-append "Exec=" i3)))
304 (substitute* (string-append out "/share/xsessions/i3-with-shmlog.desktop")
305 (("Exec=i3-with-shmlog") (string-append "Exec=" i3-with-shmlog)))
306 #t))))))
307 (inputs
308 `(("libxcb" ,libxcb)
309 ("xcb-util" ,xcb-util)
310 ("xcb-util-cursor" ,xcb-util-cursor)
311 ("xcb-util-keysyms" ,xcb-util-keysyms)
312 ("xcb-util-wm" ,xcb-util-wm)
313 ("xcb-util-xrm" ,xcb-util-xrm)
314 ("libxkbcommon" ,libxkbcommon)
315 ("libev" ,libev)
316 ("libyajl" ,libyajl)
317 ("asciidoc" ,asciidoc)
318 ("xmlto" ,xmlto)
319 ("perl-pod-simple" ,perl-pod-simple)
320 ("libx11" ,libx11)
321 ("pcre" ,pcre)
322 ("startup-notification" ,startup-notification)
323 ("pango" ,pango)
324 ("cairo" ,cairo)))
325 (native-inputs
326 `(("which" ,which)
327 ("perl" ,perl)
328 ("pkg-config" ,pkg-config)
329 ;; For building the documentation.
330 ("libxml2" ,libxml2)
331 ("docbook-xsl" ,docbook-xsl)))
332 (home-page "https://i3wm.org/")
333 (synopsis "Tiling window manager")
334 (description "i3 is a tiling X11 window manager that dynamically manages
335 tiled, stacked, and tabbed window layouts.
336
337 i3 primarily targets advanced users. Windows are managed manually and organised
338 inside containers, which can be split vertically or horizontally, and optionally
339 resized.
340
341 i3 uses a plain-text configuration file, and can be extended and controlled from
342 many programming languages.")
343 (license license:bsd-3)))
344
345 (define-public i3-gaps
346 (package (inherit i3-wm)
347 (name "i3-gaps")
348 (version "4.18.3")
349 (source (origin
350 (method url-fetch)
351 (uri (string-append
352 "https://github.com/Airblader/i3/releases/download/"
353 version "/i3-" version ".tar.bz2"))
354 (sha256
355 (base32
356 "1hcakwyz78lgp8mhqv7pw86jlb3m415pfql1q19rkijnhm3fn3ci"))))
357 (home-page "https://github.com/Airblader/i3")
358 (synopsis "Tiling window manager with gaps")
359 (description "i3-gaps is a fork of i3wm, a tiling window manager
360 for X11. It is kept up to date with upstream, adding a few additional
361 features such as gaps between windows.
362
363 i3 is a tiling X11 window manager that dynamically manages tiled, stacked,
364 and tabbed window layouts.
365
366 i3 primarily targets advanced users. Windows are managed manually and
367 organised inside containers, which can be split vertically or horizontally,
368 and optionally resized.
369
370 i3 uses a plain-text configuration file, and can be extended and controlled
371 from many programming languages.")
372 (license license:bsd-3)))
373
374 (define-public i3lock
375 (package
376 (name "i3lock")
377 (version "2.11.1")
378 (source (origin
379 (method url-fetch)
380 (uri (string-append "https://i3wm.org/i3lock/i3lock-"
381 version ".tar.bz2"))
382 (sha256
383 (base32
384 "015dn534m7cxjvqdncpvaq9p8b2r4w5hp1yanbdy2abmhbcc7a7j"))))
385 (build-system gnu-build-system)
386 (native-inputs
387 `(("pkg-config" ,pkg-config)))
388 (inputs
389 `(("cairo" ,cairo)
390 ("libev" ,libev)
391 ("linux-pam" ,linux-pam)
392 ("libxcb" ,libxcb)
393 ("libxkbcommon" ,libxkbcommon)
394 ("xcb-util" ,xcb-util)
395 ("xcb-util-image" ,xcb-util-image)
396 ("xcb-util-xrm" ,xcb-util-xrm)))
397 (home-page "https://i3wm.org/i3lock/")
398 (synopsis "Lightweight screen locker")
399 (description
400 "i3lock is a simple X11 screen locker developed alongside the i3 project.
401 Despite the name it should work with any X11 window manager.")
402 (license license:bsd-3)))
403
404 (define-public i3blocks
405 (package
406 (name "i3blocks")
407 (version "1.5")
408 (source (origin
409 (method git-fetch)
410 (uri (git-reference
411 (url "https://github.com/vivien/i3blocks")
412 (commit version)))
413 (sha256
414 (base32
415 "0v8mwnm8qzpv6xnqvrk43s4b9iyld4naqzbaxk4ldq1qkhai0wsv"))
416 (file-name (git-file-name name version))))
417 (build-system gnu-build-system)
418 (native-inputs
419 `(("autoconf" ,autoconf)
420 ("automake" ,automake)
421 ("pkg-config" ,pkg-config)))
422 (home-page "https://github.com/vivien/i3blocks")
423 (synopsis "Minimalist scheduler for status bar scripts")
424 (description "i3blocks executes your command lines and generates a
425 status line from their output. The generated line is meant to be displayed by
426 the i3 window manager through its i3bar component, as an alternative to
427 i3status.")
428 (license license:gpl3+)))
429
430 (define-public perl-anyevent-i3
431 (package
432 (name "perl-anyevent-i3")
433 (version "0.17")
434 (source (origin
435 (method url-fetch)
436 (uri (string-append "mirror://cpan/authors/id/M/MS/MSTPLBG/"
437 "AnyEvent-I3-" version ".tar.gz"))
438 (sha256
439 (base32
440 "0qvd9bq16jyy7v3ma82qcnvz9j503bw0mh7h55gkjf7ir62ck0jk"))))
441 (build-system perl-build-system)
442 (propagated-inputs
443 `(("perl-anyevent" ,perl-anyevent)
444 ("perl-json-xs" ,perl-json-xs)))
445 (home-page "https://metacpan.org/release/AnyEvent-I3")
446 (synopsis
447 "Communicate with the i3 window manager through perl")
448 (description
449 "This module connects to the i3 window manager using the UNIX socket
450 based IPC interface it provides (if enabled in the configuration file).
451 You can then subscribe to events or send messages and receive their replies.")
452 ;; Can be used with either license.
453 (license (list license:gpl3+ license:perl-license))))
454
455 (define-public python-i3-py
456 (package
457 (name "python-i3-py")
458 (version "0.6.5")
459 (source
460 (origin
461 ;; The latest release is not tagged in Git nor has an entry in PyPi,
462 ;; but there is still a clear commit for it, and it's been the last one
463 ;; for years.
464 (method git-fetch)
465 (uri (git-reference
466 (url "https://github.com/ziberna/i3-py")
467 (commit "27f88a616e9ecc340e7d041d3d00782f8a1964c1")))
468 (sha256
469 (base32
470 "1nm719dc2xqlll7vj4c4m7mpjb27lpn3bg3c66gajvnrz2x1nmxs"))
471 (file-name (string-append name "-" version "-checkout"))))
472 (build-system python-build-system)
473 (arguments
474 `(#:tests? #f ; no tests yet
475 #:phases (modify-phases %standard-phases
476 (add-after 'install 'install-doc
477 ;; Copy readme file to documentation directory.
478 (lambda* (#:key outputs #:allow-other-keys)
479 (let ((doc (string-append (assoc-ref outputs "out")
480 "/share/doc/" ,name)))
481 (install-file "README.md" doc)
482 ;; Avoid unspecified return value.
483 #t))))))
484 (propagated-inputs
485 `(("i3-wm" ,i3-wm)))
486 (home-page "https://github.com/ziberna/i3-py")
487 (synopsis "Python interface to the i3 window manager")
488 (description "This package allows you to interact from a Python program
489 with the i3 window manager via its IPC socket. It can send commands and other
490 kinds of messages to i3, select the affected containers, filter results and
491 subscribe to events.")
492 (license license:gpl3+)))
493
494 (define-public python2-i3-py
495 (package-with-python2 python-i3-py))
496
497 (define-public quickswitch-i3
498 (let ((commit "ed692b1e8f43b95bd907ced26238ce8ccb2ed28f")
499 (revision "1")) ; Guix package revision
500 (package
501 (name "quickswitch-i3")
502 (version (string-append "2.2-" revision "."
503 (string-take commit 7)))
504 (source
505 (origin
506 ;; The latest commit is a few years old and just a couple commits
507 ;; after the last tagged release, so we use that latest commit
508 ;; instead of the release.
509 (method git-fetch)
510 (uri (git-reference
511 (url "https://github.com/proxypoke/quickswitch-for-i3")
512 (commit commit)))
513 (sha256
514 (base32
515 "0447077sama80jcdg5p64zjsvafmz5rbdrirhm1adcdjhkh6iqc5"))
516 (patches (search-patches "quickswitch-fix-dmenu-check.patch"))
517 (file-name (string-append name "-" version "-checkout"))))
518 (build-system python-build-system)
519 (arguments
520 `(#:tests? #f ; no tests yet
521 #:phases (modify-phases %standard-phases
522 (add-after 'install 'install-doc
523 ;; Copy readme file to documentation directory.
524 (lambda* (#:key outputs #:allow-other-keys)
525 (let ((doc (string-append (assoc-ref outputs "out")
526 "/share/doc/" ,name)))
527 (install-file "README.rst" doc)
528 ;; Avoid unspecified return value.
529 #t))))))
530 (inputs
531 `(("python-i3-py" ,python-i3-py)
532 ("dmenu" ,dmenu)))
533 (home-page "https://github.com/proxypoke/quickswitch-for-i3")
534 (synopsis "Quickly change to and locate windows in the i3 window manager")
535 (description
536 "This utility for the i3 window manager allows you to quickly switch to
537 and locate windows on all your workspaces, using an interactive dmenu
538 prompt.")
539 (license license:wtfpl2))))
540
541 (define-public i3lock-color
542 (package
543 (name "i3lock-color")
544 (version "2.12.c")
545 (source
546 (origin
547 (method git-fetch)
548 (uri (git-reference
549 (url "https://github.com/PandorasFox/i3lock-color")
550 (commit version)))
551 (file-name (git-file-name name version))
552 (sha256
553 (base32 "08fhnchf187b73h52xgzb86g6byzxz085zs9galsvl687g5zxk34"))))
554 (build-system gnu-build-system)
555 (arguments
556 `(#:tests? #f)) ; no tests included
557 (inputs
558 `(("cairo" ,cairo)
559 ("libev" ,libev)
560 ("libjpeg" ,libjpeg-turbo)
561 ("libxcb" ,libxcb)
562 ("libxkbcommon" ,libxkbcommon)
563 ("linux-pam" ,linux-pam)
564 ("xcb-util" ,xcb-util)
565 ("xcb-util-image" ,xcb-util-image)
566 ("xcb-util-xrm" ,xcb-util-xrm)))
567 (native-inputs
568 `(("autoconf" ,autoconf)
569 ("automake" ,automake)
570 ("pkg-config" ,pkg-config)))
571 (home-page "https://github.com/PandorasFox/i3lock-color")
572 (synopsis "Screen locker with color configuration support")
573 (description
574 "i3lock-color is a simpler X11 screen locker derived from i3lock.
575 Features include:
576
577 @enumerate
578 @item forking process, the locked screen is preserved when you suspend to RAM;
579 @item specify background color or image to be displayed in the lock screen;
580 @item many additional color options.
581 @end enumerate")
582 (license license:bsd-3)))
583
584 (define-public i3lock-fancy
585 (package
586 (name "i3lock-fancy")
587 (version "0.2")
588 (source
589 (origin
590 (method git-fetch)
591 (uri (git-reference
592 (url "https://github.com/meskarune/i3lock-fancy")
593 (commit version)))
594 (file-name (git-file-name name version))
595 (sha256
596 (base32 "11g2kkim33ra38d1m897sq1ifajw17iyw9mr7sg1q8i2ibl4lfsi"))))
597 (build-system gnu-build-system)
598 (arguments
599 `(#:tests? #f ; no tests included
600 #:phases
601 (modify-phases %standard-phases
602 (replace 'configure
603 (lambda* (#:key inputs outputs #:allow-other-keys)
604 (let* ((out (assoc-ref outputs "out"))
605 (icons (string-append out "/share/i3lock-fancy/icons/"))
606 (wmctrl (string-append (assoc-ref inputs "wmctrl")
607 "/bin/wmctrl"))
608 (mconvert (string-append (assoc-ref inputs "imagemagick")
609 "/bin/convert"))
610 (mimport (string-append (assoc-ref inputs "imagemagick")
611 "/bin/import"))
612 (awk (string-append (assoc-ref inputs "gawk")
613 "/bin/gawk")))
614
615 (substitute* "lock"
616 (("\\$\\(command -V wmctrl\\)") wmctrl)
617 (("convert") mconvert)
618 (("shot=\\(import") (string-append "shot=\(" mimport))
619 (("awk -F") (string-append awk " -F"))
620 ((" awk") awk)
621 (("\\$scriptpath/icons/") icons))
622 #t)))
623 (delete 'build)
624 (replace 'install
625 (lambda* (#:key inputs outputs #:allow-other-keys)
626 (let* ((out (assoc-ref outputs "out"))
627 (bin (string-append out "/bin"))
628 (icons (string-append out "/share/i3lock-fancy/icons/")))
629
630 (install-file "lock" bin)
631 (rename-file (string-append bin "/lock")
632 (string-append bin "/i3lock-fancy"))
633 (copy-recursively "icons" icons)
634 #t))))))
635 (inputs
636 `(("imagemagick" ,imagemagick)
637 ("wmctrl" ,wmctrl)
638 ("gawk" ,gawk)))
639 (home-page "https://github.com/meskarune/i3lock-fancy")
640 (synopsis "Screen locker with screenshot function")
641 (description
642 "@code{i3lock-fancy} is a Bash script that takes a screenshot of
643 the desktop, blurs the background and adds a lock icon and text.
644 It requires @code{i3lock-color} or @code{i3lock} and can optionally
645 be passed any screenshot util like @code{scrot}.
646 This screen locker can be used with any window manager or
647 desktop environment.")
648 (license license:expat)))
649
650 (define-public xmonad
651 (package
652 (name "xmonad")
653 (version "0.15")
654 (synopsis "Tiling window manager")
655 (source (origin
656 (method url-fetch)
657 (uri (string-append "mirror://hackage/package/xmonad/"
658 "xmonad-" version ".tar.gz"))
659 (sha256
660 (base32
661 "0a7rh21k9y6g8fwkggxdxjns2grvvsd5hi2ls4klmqz5xvk4hyaa"))
662 (patches (search-patches "xmonad-dynamic-linking.patch"))))
663 (build-system haskell-build-system)
664 (inputs
665 `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
666 ("ghc-quickcheck" ,ghc-quickcheck)
667 ("ghc-semigroups" ,ghc-semigroups)
668 ("ghc-setlocale" ,ghc-setlocale)
669 ("ghc-utf8-string" ,ghc-utf8-string)
670 ("ghc-x11" ,ghc-x11)))
671 (arguments
672 `(#:phases
673 (modify-phases %standard-phases
674 (add-after
675 'install 'install-xsession
676 (lambda _
677 (let* ((xsessions (string-append %output "/share/xsessions")))
678 (mkdir-p xsessions)
679 (call-with-output-file
680 (string-append xsessions "/xmonad.desktop")
681 (lambda (port)
682 (format port "~
683 [Desktop Entry]~@
684 Name=~a~@
685 Comment=~a~@
686 Exec=~a/bin/xmonad~@
687 Type=Application~%" ,name ,synopsis %output)))))))))
688 (home-page "https://xmonad.org")
689 (description
690 "Xmonad is a tiling window manager for X. Windows are arranged
691 automatically to tile the screen without gaps or overlap, maximising screen
692 use. All features of the window manager are accessible from the keyboard: a
693 mouse is strictly optional. Xmonad is written and extensible in Haskell.
694 Custom layout algorithms, and other extensions, may be written by the user in
695 config files. Layouts are applied dynamically, and different layouts may be
696 used on each workspace. Xinerama is fully supported, allowing windows to be
697 tiled on several screens.")
698 (license license:bsd-3)))
699
700 (define-public xmobar
701 (package
702 (name "xmobar")
703 (version "0.34")
704 (source (origin
705 (method url-fetch)
706 (uri (string-append "mirror://hackage/package/xmobar/"
707 "xmobar-" version ".tar.gz"))
708 (sha256
709 (base32
710 "0x09xbz7y9ay0046j1xpr9jjk5jqivqi06vm3q6mhcrgc4y922rx"))))
711 (build-system haskell-build-system)
712 (native-inputs
713 `(("ghc-hspec" ,ghc-hspec)
714 ("hspec-discover" ,hspec-discover)))
715 (inputs
716 `(("ghc-alsa-core" ,ghc-alsa-core)
717 ("ghc-alsa-mixer" ,ghc-alsa-mixer)
718 ("ghc-dbus" ,ghc-dbus)
719 ("ghc-hinotify" ,ghc-hinotify)
720 ("ghc-http" ,ghc-http)
721 ("ghc-http-conduit" ,ghc-http-conduit)
722 ("ghc-http-types" ,ghc-http-types)
723 ("ghc-iwlib" ,ghc-iwlib)
724 ("ghc-libmpd" ,ghc-libmpd)
725 ("ghc-old-locale" ,ghc-old-locale)
726 ("ghc-parsec-numbers" ,ghc-parsec-numbers)
727 ("ghc-regex-compat" ,ghc-regex-compat)
728 ("ghc-temporary" ,ghc-temporary)
729 ("ghc-timezone-olson" ,ghc-timezone-olson)
730 ("ghc-x11" ,ghc-x11)
731 ("ghc-x11-xft" ,ghc-x11-xft)
732 ("libxpm" ,libxpm)))
733 (arguments
734 `(#:configure-flags (list "--flags=all_extensions")
735 #:phases
736 (modify-phases %standard-phases
737 (add-before 'build 'patch-test-shebang
738 (lambda* (#:key inputs #:allow-other-keys)
739 (substitute* "test/Xmobar/Plugins/Monitors/AlsaSpec.hs"
740 (("/bin/bash") (which "bash")))
741 #t)))))
742 (home-page "https://xmobar.org")
743 (synopsis "Minimalistic text based status bar")
744 (description
745 "@code{xmobar} is a lightweight, text-based, status bar written in
746 Haskell. It was originally designed to be used together with Xmonad, but it
747 is also usable with any other window manager. While xmobar is written in
748 Haskell, no knowledge of the language is required to install and use it.")
749 (license license:bsd-3)))
750
751 (define-public yeganesh
752 (package
753 (name "yeganesh")
754 (version "2.4")
755 (source
756 (origin
757
758 (method url-fetch)
759 (uri (string-append "http://dmwit.com/yeganesh/yeganesh-" version ".tar.gz"))
760 (sha256
761 (base32 "04djfyjab3c5y9z9x8zd0xcx0jyy35zq7cl9ddr4ppf6k5ky6iky"))))
762 (build-system haskell-build-system)
763 (inputs
764 `(("ghc-strict" ,ghc-strict)
765 ("ghc-xdg-basedir" ,ghc-xdg-basedir)))
766 (home-page "http://dmwit.com/yeganesh/")
767 (synopsis "Small wrapper around dmenu")
768 (description "@code{yeganesh} is a small wrapper around demnu. Like
769 dmenu, it accepts input on stdin and writes the chosen result on stdout.
770 Unlike dmenu, it mangles the input before it presents its choices. In
771 particular, it displays commonly-chosen options before uncommon ones.")
772 (license license:bsd-3)))
773
774 (define-public ghc-xmonad-contrib
775 (package
776 (name "ghc-xmonad-contrib")
777 (version "0.16")
778 (source
779 (origin
780 (method url-fetch)
781 (uri (string-append "mirror://hackage/package/xmonad-contrib/"
782 "xmonad-contrib-" version ".tar.gz"))
783 (sha256
784 (base32 "1pddgkvnbww28wykncc7j0yb0lv15bk7xnnhdcbrwkxzw66w6wmd"))))
785 (build-system haskell-build-system)
786 (propagated-inputs
787 `(("ghc-old-time" ,ghc-old-time)
788 ("ghc-random" ,ghc-random)
789 ("ghc-utf8-string" ,ghc-utf8-string)
790 ("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
791 ("ghc-semigroups" ,ghc-semigroups)
792 ("ghc-x11" ,ghc-x11)
793 ("ghc-x11-xft" ,ghc-x11-xft)
794 ("xmonad" ,xmonad)))
795 (home-page "https://xmonad.org")
796 (synopsis "Third party extensions for xmonad")
797 (description
798 "Third party tiling algorithms, configurations, and scripts to Xmonad, a
799 tiling window manager for X.")
800 (license license:bsd-3)))
801
802 (define-public evilwm
803 (package
804 (name "evilwm")
805 (version "1.1.1")
806 (source
807 (origin
808 (method url-fetch)
809 (uri (string-append "http://www.6809.org.uk/evilwm/evilwm-"
810 version ".tar.gz"))
811 (sha256
812 (base32
813 "0ak0yajzk3v4dg5wmaghv6acf7v02a4iw8qxmq5yw5ard8lrqn3r"))
814 (patches (search-patches "evilwm-lost-focus-bug.patch"))))
815 (build-system gnu-build-system)
816 (inputs
817 `(("libx11" ,libx11)
818 ("libxext" ,libxext)
819 ("libxrandr" ,libxrandr)))
820 (arguments
821 `(#:modules ((srfi srfi-26)
822 (guix build utils)
823 (guix build gnu-build-system))
824 #:make-flags (let ((inputs (map (cut assoc-ref %build-inputs <>)
825 '("libx11" "libxext" "libxrandr")))
826 (join (lambda (proc strs)
827 (string-join (map proc strs) " ")))
828 (dash-I (cut string-append "-I" <> "/include"))
829 (dash-L (cut string-append "-L" <> "/lib")))
830 `("desktopfilesdir=$(prefix)/share/xsessions"
831 ,(string-append "prefix=" (assoc-ref %outputs "out"))
832 ,(string-append "CPPFLAGS=" (join dash-I inputs))
833 ,(string-append "LDFLAGS=" (join dash-L inputs))))
834 #:tests? #f ;no tests
835 #:phases (modify-phases %standard-phases
836 (delete 'configure)))) ;no configure script
837 (home-page "http://www.6809.org.uk/evilwm/")
838 (synopsis "Minimalist window manager for the X Window System")
839 (description
840 "evilwm is a minimalist window manager based on aewm, extended to feature
841 many keyboard controls with repositioning and maximize toggles, solid window
842 drags, snap-to-border support, and virtual desktops.")
843 (license (license:x11-style "file:///README"))))
844
845 (define-public fluxbox
846 (package
847 (name "fluxbox")
848 (version "1.3.7")
849 (synopsis "Small and fast window manager")
850 (source (origin
851 (method url-fetch)
852 (uri (string-append "mirror://sourceforge/fluxbox/fluxbox/"
853 version "/fluxbox-" version ".tar.xz"))
854 (sha256
855 (base32
856 "1h1f70y40qd225dqx937vzb4k2cz219agm1zvnjxakn5jkz7b37w"))))
857 (build-system gnu-build-system)
858 (arguments
859 `(#:make-flags '("CPPFLAGS=-U__TIME__") ;ugly, but for reproducibility
860 #:phases
861 (modify-phases %standard-phases
862 (add-after 'install 'install-vim-files
863 (lambda* (#:key outputs #:allow-other-keys)
864 (let* ((out (assoc-ref outputs "out"))
865 (syntax (string-append out "/share/vim/vimfiles/syntax")))
866 (copy-recursively "3rd/vim/vim/syntax" syntax)
867 #t)))
868 (add-after 'install 'install-xsession
869 (lambda* (#:key outputs #:allow-other-keys)
870 (let* ((out (assoc-ref outputs "out"))
871 (xsessions (string-append out "/share/xsessions")))
872 (mkdir-p xsessions)
873 (call-with-output-file
874 (string-append xsessions "/fluxbox.desktop")
875 (lambda (port)
876 (format port "~
877 [Desktop Entry]~@
878 Name=~a~@
879 Comment=~a~@
880 Exec=~a/bin/startfluxbox~@
881 Type=Application~%" ,name ,synopsis out)))
882 #t))))))
883 (native-inputs
884 `(("pkg-config" ,pkg-config)))
885 (inputs
886 `(("freetype" ,freetype)
887 ("fribidi" ,fribidi)
888 ("imlib2" ,imlib2)
889 ("libx11" ,libx11)
890 ("libxext" ,libxext)
891 ("libxft" ,libxft)
892 ("libxinerama" ,libxinerama)
893 ("libxpm" ,libxpm)
894 ("libxrandr" ,libxrandr)
895 ("libxrender" ,libxrender)))
896 (description "Fluxbox is a window manager. It is light on resources
897 and easy to handle yet full of features to make an easy and fast desktop
898 experience.")
899 (home-page "http://fluxbox.org/")
900 (license license:expat)))
901
902 (define-public awesome
903 (package
904 (name "awesome")
905 (version "4.3")
906 (source
907 (origin
908 (method url-fetch)
909 (uri (string-append
910 "https://github.com/awesomeWM/awesome-releases/raw/master/"
911 "awesome-" version ".tar.xz"))
912 (sha256
913 (base32 "0lqpw401mkkmp9wgbvrmm45bqq2j9357l4irwdqv6l1305pls9kq"))
914 (modules '((guix build utils)
915 (srfi srfi-19)))
916 (snippet
917 '(begin
918 ;; Remove non-reproducible timestamp and use the date of
919 ;; the source file instead.
920 (substitute* "common/version.c"
921 (("__DATE__ \" \" __TIME__")
922 (date->string
923 (time-utc->date
924 (make-time time-utc 0 (stat:mtime (stat "awesome.c"))))
925 "\"~c\"")))
926 #t))
927 (patches
928 (search-patches "awesome-reproducible-png.patch"))))
929 (build-system cmake-build-system)
930 (native-inputs
931 `(("asciidoc" ,asciidoc)
932 ("docbook-xsl" ,docbook-xsl)
933 ("doxygen" ,doxygen)
934 ("gperf" ,gperf)
935 ("imagemagick" ,imagemagick)
936 ("libxml2" ,libxml2) ;for XML_CATALOG_FILES
937 ("lua-ldoc" ,lua-ldoc)
938 ("pkg-config" ,pkg-config)
939 ("xmlto" ,xmlto)))
940 (inputs
941 `(("cairo" ,cairo)
942 ("dbus" ,dbus)
943 ("gdk-pixbuf" ,gdk-pixbuf)
944 ("glib" ,glib)
945 ("gobject-introspection" ,gobject-introspection)
946 ("imlib2" ,imlib2)
947 ("libev" ,libev)
948 ("libxcb" ,libxcb)
949 ("libxcursor" ,libxcursor)
950 ("libxdg-basedir" ,libxdg-basedir)
951 ("libxkbcommon" ,libxkbcommon)
952 ("lua" ,lua)
953 ("lua-lgi" ,lua-lgi)
954 ("pango" ,pango)
955 ("startup-notification" ,startup-notification)
956 ("xcb-util" ,xcb-util)
957 ("xcb-util-cursor" ,xcb-util-cursor)
958 ("xcb-util-image" ,xcb-util-image)
959 ("xcb-util-keysyms" ,xcb-util-keysyms)
960 ("xcb-util-renderutil" ,xcb-util-renderutil)
961 ("xcb-util-xrm" ,xcb-util-xrm)
962 ("xcb-util-wm" ,xcb-util-wm)))
963 (arguments
964 `(#:modules ((guix build cmake-build-system)
965 (guix build utils)
966 (ice-9 match))
967 ;; Let compression happen in our 'compress-documentation' phase
968 ;; so that '--no-name' is used, which removes timestamps from
969 ;; gzip output.
970 #:configure-flags
971 '("-DCOMPRESS_MANPAGES=off")
972 ;; Building awesome in its source directory is no longer
973 ;; supported.
974 #:out-of-source? #t
975 #:phases
976 (modify-phases %standard-phases
977 (add-before 'configure 'set-paths
978 (lambda* (#:key inputs #:allow-other-keys)
979 (substitute* "lib/awful/completion.lua"
980 (("/usr/bin/env")
981 ""))
982 ;; The build process needs to load Cairo dynamically.
983 (let* ((cairo (string-append (assoc-ref inputs "cairo") "/lib"))
984 (lua-version ,(version-major+minor (package-version lua)))
985 (lua-dependencies
986 (filter (match-lambda
987 ((label . _) (string-prefix? "lua-" label)))
988 inputs))
989 (lua-path
990 (string-join
991 (map (match-lambda
992 ((_ . dir)
993 (string-append
994 dir "/share/lua/" lua-version "/?.lua;"
995 dir "/share/lua/" lua-version "/?/?.lua")))
996 lua-dependencies)
997 ";"))
998 (lua-cpath
999 (string-join
1000 (map (match-lambda
1001 ((_ . dir)
1002 (string-append
1003 dir "/lib/lua/" lua-version "/?.so;"
1004 dir "/lib/lua/" lua-version "/?/?.so")))
1005 lua-dependencies)
1006 ";")))
1007 (setenv "LD_LIBRARY_PATH" cairo)
1008 (setenv "LUA_PATH" (string-append "?.lua;" lua-path))
1009 (setenv "LUA_CPATH" lua-cpath)
1010 #t)))
1011 (replace 'check
1012 (lambda _
1013 ;; There aren't any tests, so just make sure the binary
1014 ;; gets built and can be run successfully.
1015 (invoke "../build/awesome" "-v")))
1016 (add-after 'install 'patch-session-file
1017 (lambda* (#:key outputs #:allow-other-keys)
1018 (let* ((out (assoc-ref outputs "out"))
1019 (awesome (string-append out "/bin/awesome")))
1020 (substitute* (string-append out "/share/xsessions/awesome.desktop")
1021 (("Exec=awesome") (string-append "Exec=" awesome)))
1022 #t)))
1023 (add-after 'install 'wrap
1024 (lambda* (#:key inputs outputs #:allow-other-keys)
1025 (let* ((awesome (assoc-ref outputs "out"))
1026 (cairo (string-append (assoc-ref inputs "cairo") "/lib"))
1027 (lua-version ,(version-major+minor (package-version lua)))
1028 (lua-lgi (assoc-ref inputs "lua-lgi")))
1029 (wrap-program (string-append awesome "/bin/awesome")
1030 `("LUA_PATH" ";" suffix
1031 (,(format #f "~a/share/lua/~a/?.lua" lua-lgi lua-version)))
1032 `("LUA_CPATH" ";" suffix
1033 (,(format #f "~a/lib/lua/~a/?.so" lua-lgi lua-version)))
1034 `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))
1035 `("LD_LIBRARY_PATH" suffix (,cairo)))
1036 #t))))))
1037 (home-page "https://awesomewm.org/")
1038 (synopsis "Highly configurable window manager")
1039 (description
1040 "Awesome has been designed as a framework window manager. It is fast, small,
1041 dynamic and extensible using the Lua programming language.")
1042 (license license:gpl2+)))
1043
1044 (define-public menumaker
1045 (package
1046 (name "menumaker")
1047 (version "0.99.12")
1048 (source
1049 (origin
1050 (method url-fetch)
1051 (uri (string-append "mirror://sourceforge/menumaker/"
1052 "menumaker-" version ".tar.gz"))
1053 (sha256
1054 (base32 "034v5204bsgkzzk6zfa5ia63q95gln47f7hwf96yvad5hrhmd8z3"))))
1055 (build-system gnu-build-system)
1056 (inputs
1057 `(("python" ,python)))
1058 (synopsis "Heuristics-driven menu generator")
1059 (description
1060 "MenuMaker is a menu generation utility for a number of X window
1061 managers and desktop environments. It is capable of finding lots of
1062 installed programs and generating a root menu consistent across all
1063 supported window managers, so one will get (almost) the same menu in
1064 all of them. Currently supported window managers include:
1065
1066 @enumerate
1067 @item BlackBox
1068 @item Deskmenu
1069 @item FluxBox
1070 @item IceWM
1071 @item OpenBox
1072 @item PekWM
1073 @item WindowMaker
1074 @item XFCE
1075 @end enumerate\n")
1076 (home-page "http://menumaker.sourceforge.net/")
1077 (license license:bsd-2)))
1078
1079 (define-public keybinder
1080 (package
1081 (name "keybinder")
1082 (version "0.3.1")
1083 (source
1084 (origin
1085 (method url-fetch)
1086 (uri (string-append "https://github.com/kupferlauncher/keybinder"
1087 "/releases/download/v" version "/keybinder-"
1088 version ".tar.gz"))
1089 (file-name (string-append name "-" version ".tar.gz"))
1090 (sha256
1091 (base32
1092 "0h52hj3ay8mfhwvmfxbxlfyq74hifdk8wxgxp7fr4iy6189hg7w7"))))
1093 (build-system gnu-build-system)
1094 (inputs
1095 `(("python-2" ,python-2)
1096 ("gtk+-2" ,gtk+-2)))
1097 (native-inputs
1098 `(("python2-pygtk" ,python2-pygtk)
1099 ("gtk-doc" ,gtk-doc)
1100 ("pkg-config" ,pkg-config)))
1101 (synopsis "Library for registering global keyboard shortcuts")
1102 (description
1103 "Keybinder is a library for registering global keyboard shortcuts.
1104 Keybinder works with GTK-based applications using the X Window System.")
1105 (home-page "https://github.com/kupferlauncher/keybinder")
1106 (license license:gpl2+)))
1107
1108 (define-public keybinder-3.0
1109 (package
1110 (name "keybinder-3.0")
1111 (version "0.3.2")
1112 (source
1113 (origin
1114 (method url-fetch)
1115 (uri (string-append "https://github.com/kupferlauncher/keybinder"
1116 "/releases/download/" name "-v" version "/" name "-"
1117 version ".tar.gz"))
1118 (file-name (string-append name "-" version ".tar.gz"))
1119 (sha256
1120 (base32
1121 "0830ihwnalw59pp1xzrp37dn58n8vwb8zasnm4a1h81v3x7dxqz6"))))
1122 (build-system gnu-build-system)
1123 (inputs
1124 `(("gtk+" ,gtk+)
1125 ("gobject-introspection" ,gobject-introspection)))
1126 (native-inputs
1127 `(("gtk-doc" ,gtk-doc)
1128 ("pkg-config" ,pkg-config)))
1129 (synopsis "Library for registering global keyboard shortcuts, Gtk3 version")
1130 (description
1131 "Keybinder is a library for registering global keyboard shortcuts.
1132 Keybinder works with GTK-based applications using the X Window System.")
1133 (home-page "https://github.com/kupferlauncher/keybinder")
1134 (license license:x11)))
1135
1136 (define-public spectrwm
1137 (package
1138 (name "spectrwm")
1139 (version "3.2.0")
1140 (source
1141 (origin
1142 (method git-fetch)
1143 (uri (git-reference
1144 (url "https://github.com/conformal/spectrwm")
1145 (commit
1146 (string-append "SPECTRWM_"
1147 (string-join (string-split version #\.) "_")))))
1148 (file-name (git-file-name name version))
1149 (sha256
1150 (base32 "1dfqy5f0s1nv6rqkz9lj006vypmp4rwxd5vczfk3ndzqgnh19kw6"))))
1151 (build-system gnu-build-system)
1152 (arguments
1153 `(#:make-flags (let ((pkg-config (lambda (flag)
1154 (string-append
1155 "$(shell pkg-config " flag " "
1156 "xft fontconfig x11 libpng)"))))
1157 (list
1158 "CC=gcc"
1159 (string-append "PREFIX=" %output)
1160 (string-append "INCS=-I. " (pkg-config "--cflags"))
1161 (string-append "LIBS=" (pkg-config "--libs") " -lm")))
1162 #:tests? #f ;no test suite
1163 #:phases
1164 (modify-phases %standard-phases
1165 (add-before 'build 'change-dir
1166 (lambda _
1167 (chdir "linux") #t))
1168 (add-after 'change-dir 'patch-makefile
1169 (lambda _
1170 (substitute* "Makefile"
1171 (("-g") ""))))
1172 (delete 'configure)))) ;no 'configure' exists
1173 (inputs
1174 `(("freetype" ,freetype)
1175 ("fontconfig" ,fontconfig)
1176 ("libx11" ,libx11)
1177 ("libxcursor" ,libxcursor)
1178 ("libxrandr" ,libxrandr)
1179 ("libxtst" ,libxtst)
1180 ("libxft" ,libxft)
1181 ("xcb-util" ,xcb-util)
1182 ("xcb-util-wm" ,xcb-util-wm)
1183 ("xcb-util-keysyms" ,xcb-util-keysyms)))
1184 (native-inputs
1185 `(("libxt" ,libxt)
1186 ("pkg-config" ,pkg-config)))
1187 (synopsis "Minimalistic automatic tiling window manager")
1188 (description
1189 "Spectrwm is a small dynamic tiling and reparenting window manager for X11.
1190 It is inspired by Xmonad and dwm. Its major features include:
1191
1192 @itemize
1193 @item Navigation anywhere on all screens with either the keyboard or mouse
1194 @item Customizable status bar
1195 @item Restartable without losing state
1196 @item Quick launch menu
1197 @item Many screen layouts possible with a few simple key strokes
1198 @item Move/resize floating windows
1199 @item Extended Window Manager Hints (@dfn{EWMH}) support
1200 @item Configurable tiling
1201 @item Adjustable tile gap allows for a true one pixel border
1202 @item Customizable colors and border width
1203 @end itemize\n")
1204 (home-page "https://github.com/conformal/spectrwm")
1205 (license license:isc)))
1206
1207 (define-public cwm
1208 (package
1209 (name "cwm")
1210 (version "6.7")
1211 (source
1212 (origin
1213 (method url-fetch)
1214 (uri (string-append "https://leahneukirchen.org/releases/cwm-"
1215 version ".tar.gz"))
1216 (sha256
1217 (base32 "022zld29qawd8gl700g4m24qa89il3aks397zkhh66wvzssdblzx"))))
1218 (build-system gnu-build-system)
1219 (arguments
1220 `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
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 "20.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 "1ghs6ihvmb3bz4q4ys1d3h6rdi96xyiw7l2ip7jh54c25049aymf"))))
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 sbcl-stumpwm-numpad-layouts
1895 (package
1896 (inherit stumpwm-contrib)
1897 (name "sbcl-stumpwm-numpad-layouts")
1898 (arguments
1899 '(#:asd-systems '("numpad-layouts")
1900 #:tests? #f
1901 #:phases
1902 (modify-phases %standard-phases
1903 (add-after 'unpack 'chdir
1904 (lambda _
1905 (chdir "util/numpad-layouts"))))))
1906 (home-page
1907 "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/numpad-layouts")
1908 (synopsis "Keyboard numpad layouts for StumpWM")
1909 (description "This is a module for handling different keyboards numpad
1910 layouts in StumpWM.")
1911 (license license:gpl3+)))
1912
1913 (define-public sbcl-stumpwm-cpu
1914 (package
1915 (inherit stumpwm-contrib)
1916 (name "sbcl-stumpwm-cpu")
1917 (arguments
1918 '(#:asd-systems '("cpu")
1919 #:tests? #f
1920 #:phases
1921 (modify-phases %standard-phases
1922 (add-after 'unpack 'chdir
1923 (lambda _
1924 (chdir "modeline/cpu"))))))
1925 (home-page
1926 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/cpu")
1927 (synopsis "Modeline support for CPU info")
1928 (description "Modeline support for CPU info.")
1929 (license license:gpl3+)))
1930
1931 (define-public sbcl-stumpwm-mem
1932 (package
1933 (inherit stumpwm-contrib)
1934 (name "sbcl-stumpwm-mem")
1935 (arguments
1936 '(#:asd-systems '("mem")
1937 #:tests? #f
1938 #:phases
1939 (modify-phases %standard-phases
1940 (add-after 'unpack 'chdir
1941 (lambda _
1942 (chdir "modeline/mem"))))))
1943 (home-page
1944 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/mem")
1945 (synopsis "Modeline support for memory info")
1946 (description "Modeline support for memory info.")
1947 (license license:gpl3+)))
1948
1949 (define-public sbcl-stumpwm-winner-mode
1950 (package
1951 (inherit stumpwm-contrib)
1952 (name "sbcl-stumpwm-winner-mode")
1953 (arguments
1954 '(#:asd-systems '("winner-mode")
1955 #:tests? #f
1956 #:phases
1957 (modify-phases %standard-phases
1958 (add-after 'unpack 'chdir
1959 (lambda _
1960 (chdir "util/winner-mode"))))))
1961 (home-page
1962 "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/winner-mode")
1963 (synopsis "Emacs' winner-mode for StumpWM")
1964 (description "This module provides a winner-mode for StumpWM similar to the
1965 one in Emacs.")
1966 (license license:gpl3+)))
1967
1968 (define-public sbcl-stumpwm-screenshot
1969 (package
1970 (inherit stumpwm-contrib)
1971 (name "sbcl-stumpwm-screenshot")
1972 (inputs
1973 `(("stumpwm" ,stumpwm "lib")
1974 ("zpng" ,sbcl-zpng)))
1975 (arguments
1976 '(#:asd-systems '("screenshot")
1977 #:tests? #f
1978 #:phases
1979 (modify-phases %standard-phases
1980 (add-after 'unpack 'chdir
1981 (lambda _
1982 (chdir "util/screenshot")))
1983 (add-after 'chdir 'fix-build
1984 (lambda _
1985 (substitute* "screenshot.asd"
1986 (("#:zpng")
1987 "#:stumpwm #:zpng")))))))
1988 (home-page
1989 "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/screenshot")
1990 (synopsis "Screenshots for StumpWM")
1991 (description "This StumpWM module can take screenshots and store them as
1992 PNG files.")
1993 (license license:gpl3+)))
1994
1995 (define-public lemonbar
1996 (let ((commit "35183ab81d2128dbb7b6d8e119cc57846bcefdb4")
1997 (revision "1"))
1998 (package
1999 (name "lemonbar")
2000 (version (git-version "1.3" revision commit))
2001 (source (origin
2002 (method git-fetch)
2003 (uri (git-reference
2004 (url "https://github.com/LemonBoy/bar")
2005 (commit commit)))
2006 (file-name (git-file-name name version))
2007 (sha256
2008 (base32
2009 "1wwqbph392iwz8skaqxb0xpklb1l6yganqz80g4x1fhrnz7idmlh"))))
2010 (build-system gnu-build-system)
2011 (arguments
2012 `(#:tests? #f ; no test suite
2013 #:make-flags
2014 (list ,(string-append "CC=" (cc-for-target))
2015 (string-append "PREFIX=" %output))
2016 #:phases
2017 (modify-phases %standard-phases
2018 (delete 'configure))))
2019 (inputs
2020 `(("libxcb" ,libxcb)))
2021 (native-inputs
2022 `(("perl" ,perl)))
2023 (home-page "https://github.com/LemonBoy/bar")
2024 (synopsis "Featherweight status bar")
2025 (description
2026 "@code{lemonbar} (formerly known as @code{bar}) is a lightweight
2027 bar entirely based on XCB. Provides full UTF-8 support, basic
2028 formatting, RandR and Xinerama support and EWMH compliance without
2029 wasting your precious memory.")
2030 (license license:x11))))
2031
2032 (define-public xclickroot
2033 (package
2034 (name "xclickroot")
2035 (version "1.2")
2036 (source (origin
2037 (method git-fetch)
2038 (uri (git-reference
2039 (url "https://github.com/phillbush/xclickroot")
2040 (commit (string-append "v" version))))
2041 (file-name (git-file-name name version))
2042 (sha256
2043 (base32
2044 "1nd5qz0qz5j7gx2jsbcp234giwaa0xmg42vrcjrcf587q9ivakfl"))))
2045 (build-system gnu-build-system)
2046 (inputs
2047 `(("libx11" ,libx11)))
2048 (arguments
2049 `(#:tests? #f ;no test suite
2050 #:make-flags
2051 (list ,(string-append "CC=" (cc-for-target))
2052 (string-append "PREFIX=" %output))
2053 #:phases
2054 (modify-phases %standard-phases
2055 (delete 'configure))))
2056 (home-page "https://github.com/phillbush/xclickroot")
2057 (synopsis "Run a command when a mouse button is pressed on the root window")
2058 (description "@code{xclickroot} runs a command every time a given mouse
2059 button is pressed on the root window.")
2060 (license license:public-domain)))
2061
2062 (define-public xmenu
2063 (package
2064 (name "xmenu")
2065 (version "4.4.1")
2066 (source (origin
2067 (method git-fetch)
2068 (uri (git-reference
2069 (url "https://github.com/phillbush/xmenu")
2070 (commit (string-append "v" version))))
2071 (file-name (git-file-name name version))
2072 (sha256
2073 (base32
2074 "1s70zvsaqnsjqs298vw3py0vcvia68xlks1wcz37pb88bwligz1x"))))
2075 (build-system gnu-build-system)
2076 (inputs
2077 `(("libx11" ,libx11)
2078 ("libxinerama" ,libxinerama)
2079 ("libxft" ,libxft)
2080 ("freetype" ,freetype)
2081 ("imlib2" ,imlib2)))
2082 (arguments
2083 `(#:tests? #f ;no test suite
2084 #:make-flags
2085 (list (string-append "CC=" ,(cc-for-target))
2086 (string-append "PREFIX=" %output)
2087 (string-append "CFLAGS="
2088 "-I" (assoc-ref %build-inputs "freetype")
2089 "/include/freetype2"))
2090 #:phases
2091 (modify-phases %standard-phases
2092 (delete 'configure))))
2093 (home-page "https://github.com/phillbush/xmenu")
2094 (synopsis "Menu utility for X")
2095 (description "@code{xmenu} receives a menu specification in stdin, shows
2096 a menu for the user to select one of the options, and outputs the option
2097 selected to stdout. It can be controlled both via mouse and via keyboard.")
2098 (license license:public-domain)))
2099
2100 (define-public idesk
2101 (package
2102 (name "idesk")
2103 (version "0.7.5")
2104 (source
2105 (origin
2106 (method url-fetch)
2107 (uri (string-append
2108 "mirror://sourceforge/idesk/idesk/idesk-" version
2109 "/idesk-" version ".tar.bz2"))
2110 (sha256
2111 (base32
2112 "1lxk2yvgysxwl514zc82lwr1dwc8cd62slgr5lzdhjbdrxfymdyl"))
2113 (modules '((guix build utils)
2114 (ice-9 format)))
2115 (snippet
2116 '(let* ((file "src/DesktopConfig.cpp")
2117 (template (string-append file ".XXXXXX"))
2118 (out (mkstemp! template))
2119 (st (stat file))
2120 (mode (stat:mode st)))
2121 (call-with-ascii-input-file file
2122 (lambda (p)
2123 (format out "~{~a~%~}" '("#include <unistd.h>"
2124 "#include <sys/stat.h>"
2125 "#include <sys/types.h>"))
2126 (dump-port p out)
2127 (close out)
2128 (chmod template mode)
2129 (rename-file template file)
2130 #t))))))
2131 (build-system gnu-build-system)
2132 (inputs
2133 `(("libx11" ,libx11)
2134 ("libxft" ,libxft)
2135 ("libxpm" ,libxpm)
2136 ("libpng" ,libpng)
2137 ("freetype" ,freetype)
2138 ("imlib2" ,imlib2)
2139 ("sed" ,sed)))
2140 (native-inputs
2141 `(("pkg-config" ,pkg-config)))
2142 (arguments
2143 `(#:tests? #f)) ;no test suite
2144 (home-page "https://sourceforge.net/projects/idesk/")
2145 (synopsis "Add icons on X desktop and set background image for wallpaper")
2146 (description "Idesk is program that draws desktop icons. Each icon will
2147 execute a shell command on a configurable action. The icons can be moved on
2148 the desktop by dragging them, and the icons will remember their positions on
2149 start-up.")
2150 (license license:bsd-3)))
2151
2152 (define-public xnotify
2153 (package
2154 (name "xnotify")
2155 (version "0.7.3")
2156 (source (origin
2157 (method git-fetch)
2158 (uri (git-reference
2159 (url "https://github.com/phillbush/xnotify")
2160 (commit version)))
2161 (file-name (git-file-name name version))
2162 (sha256
2163 (base32
2164 "09s29m8z4x3mc3wja2587ik3f6zg16b40adr3nllnpyy1mqnprq5"))))
2165 (build-system gnu-build-system)
2166 (inputs
2167 `(("libx11" ,libx11)
2168 ("libxft" ,libxft)
2169 ("libxinerama" ,libxinerama)
2170 ("imlib2" ,imlib2)))
2171 (arguments
2172 `(#:make-flags
2173 (list (string-append "CC=" ,(cc-for-target))
2174 (string-append "PREFIX=" %output)
2175 (string-append "CFLAGS="
2176 "-I" (assoc-ref %build-inputs "freetype")
2177 "/include/freetype2"))
2178 #:tests? #f ;no test suite
2179 #:phases
2180 (modify-phases %standard-phases
2181 (delete 'configure))))
2182 (home-page "https://github.com/phillbush/xnotify")
2183 (synopsis "Displays a notification on the screen")
2184 (description "XNotify receives a notification specification in stdin and
2185 shows a notification for the user on the screen.")
2186 (license license:expat)))