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