gnu: gf2x: Update to 1.3.0.
[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, 2022 Eric Bavier <bavier@posteo.net>
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 2019, 2021-2022 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, 2021 Oleg Pykhalov <go.wigust@gmail.com>
18 ;;; Copyright © 2018–2021 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, 2021 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, 2022 Guillaume Le Vaillant <glv@posteo.net>
41 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
42 ;;; Copyright © 2020 Niklas Eklund <niklas.eklund@posteo.net>
43 ;;; Copyright © 2020 Robert Smith <robertsmith@posteo.net>
44 ;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
45 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
46 ;;; Copyright © 2021 qblade <qblade@protonmail.com>
47 ;;; Copyright © 2021 lasnesne <lasnesne@lagunposprasihopre.org>
48 ;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
49 ;;; Copyright © 2021 jgart <jgart@dismail.de>
50 ;;; Copyright © 2021 Disseminate Dissent <disseminatedissent@protonmail.com>
51 ;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
52 ;;; Copyright © 2022 Gabriel Wicki <gabriel@erlikon.ch>
53 ;;; Copyright © 2022 Jai Vetrivelan <jaivetrivelan@gmail.com>
54 ;;; Copyright © 2022 Daniel Meißner <daniel.meissner-i4k@ruhr-uni-bochum.de>
55 ;;; Copyright © 2022 Pier-Hugues Pellerin <ph@heykimo.com>
56 ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
57 ;;; Copyright © 2022 muradm <mail@muradm.net>
58 ;;; Copyright © 2022 Elais Player <elais@fastmail.com>
59 ;;; Copyright © 2022 Trevor Richards <trev@trevdev.ca>
60 ;;;
61 ;;; This file is part of GNU Guix.
62 ;;;
63 ;;; GNU Guix is free software; you can redistribute it and/or modify it
64 ;;; under the terms of the GNU General Public License as published by
65 ;;; the Free Software Foundation; either version 3 of the License, or (at
66 ;;; your option) any later version.
67 ;;;
68 ;;; GNU Guix is distributed in the hope that it will be useful, but
69 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
70 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
71 ;;; GNU General Public License for more details.
72 ;;;
73 ;;; You should have received a copy of the GNU General Public License
74 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
75
76 (define-module (gnu packages wm)
77 #:use-module ((guix licenses) #:prefix license:)
78 #:use-module (guix packages)
79 #:use-module (guix download)
80 #:use-module (guix gexp)
81 #:use-module (guix git-download)
82 #:use-module (guix build-system asdf)
83 #:use-module (guix build-system cmake)
84 #:use-module (guix build-system copy)
85 #:use-module (guix build-system gnu)
86 #:use-module (guix build-system haskell)
87 #:use-module (guix build-system meson)
88 #:use-module (guix build-system perl)
89 #:use-module (guix build-system python)
90 #:use-module (guix build-system trivial)
91 #:use-module (guix utils)
92 #:use-module (gnu packages)
93 #:use-module (gnu packages bash)
94 #:use-module (gnu packages admin)
95 #:use-module (gnu packages autotools)
96 #:use-module (gnu packages base)
97 #:use-module (gnu packages bison)
98 #:use-module (gnu packages build-tools)
99 #:use-module (gnu packages calendar)
100 #:use-module (gnu packages check)
101 #:use-module (gnu packages datastructures)
102 #:use-module (gnu packages docbook)
103 #:use-module (gnu packages documentation)
104 #:use-module (gnu packages fontutils)
105 #:use-module (gnu packages freedesktop)
106 #:use-module (gnu packages fribidi)
107 #:use-module (gnu packages gawk)
108 #:use-module (gnu packages gl)
109 #:use-module (gnu packages glib)
110 #:use-module (gnu packages gperf)
111 #:use-module (gnu packages gtk)
112 #:use-module (gnu packages gnome)
113 #:use-module (gnu packages haskell-check)
114 #:use-module (gnu packages haskell-web)
115 #:use-module (gnu packages haskell-xyz)
116 #:use-module (gnu packages image)
117 #:use-module (gnu packages imagemagick)
118 #:use-module (gnu packages libevent)
119 #:use-module (gnu packages libffi)
120 #:use-module (gnu packages linux)
121 #:use-module (gnu packages lisp-check)
122 #:use-module (gnu packages lisp-xyz)
123 #:use-module (gnu packages logging)
124 #:use-module (gnu packages lua)
125 #:use-module (gnu packages m4)
126 #:use-module (gnu packages man)
127 #:use-module (gnu packages maths)
128 #:use-module (gnu packages mpd)
129 #:use-module (gnu packages pcre)
130 #:use-module (gnu packages perl)
131 #:use-module (gnu packages pkg-config)
132 #:use-module (gnu packages pretty-print)
133 #:use-module (gnu packages pulseaudio)
134 #:use-module (gnu packages python)
135 #:use-module (gnu packages python-build)
136 #:use-module (gnu packages python-crypto)
137 #:use-module (gnu packages python-xyz)
138 #:use-module (gnu packages readline)
139 #:use-module (gnu packages serialization)
140 #:use-module (gnu packages sphinx)
141 #:use-module (gnu packages suckless)
142 #:use-module (gnu packages texinfo)
143 #:use-module (gnu packages textutils)
144 #:use-module (gnu packages time)
145 #:use-module (gnu packages video)
146 #:use-module (gnu packages web)
147 #:use-module (gnu packages xdisorg)
148 #:use-module (gnu packages xml)
149 #:use-module (gnu packages xorg))
150
151 (define-public bspwm
152 (package
153 (name "bspwm")
154 (version "0.9.10")
155 (source
156 (origin
157 (method git-fetch)
158 (uri (git-reference
159 (url "https://github.com/baskerville/bspwm")
160 (commit version)))
161 (file-name (git-file-name name version))
162 (sha256
163 (base32 "0qlv7b4c2mmjfd65y100d11x8iqyg5f6lfiws3cgmpjidhdygnxc"))))
164 (build-system gnu-build-system)
165 (inputs
166 (list libxcb
167 libxinerama
168 sxhkd
169 xcb-util
170 xcb-util-keysyms
171 xcb-util-wm))
172 (arguments
173 '(#:phases
174 (modify-phases %standard-phases
175 (delete 'configure)) ; no configure script
176 #:tests? #f ; no check target
177 #:make-flags
178 (list "CC=gcc"
179 (string-append "PREFIX=" %output))))
180 (home-page "https://github.com/baskerville/bspwm")
181 (synopsis "Tiling window manager based on binary space partitioning")
182 (description "bspwm is a tiling window manager that represents windows as
183 the leaves of a full binary tree.")
184 (license license:bsd-2)))
185
186 (define-public herbstluftwm
187 (package
188 (name "herbstluftwm")
189 (version "0.9.4")
190 (source
191 (origin
192 (method url-fetch)
193 (uri (string-append "https://herbstluftwm.org/tarballs/herbstluftwm-"
194 version ".tar.gz"))
195 (sha256
196 (base32 "1k03rdr6irsgnjl4w0vac0kk9nsz46qhy74iflmaycxgfv8fxy7f"))
197 (file-name (string-append "herbstluftwm-" version ".tar.gz"))))
198 (build-system cmake-build-system)
199 (inputs
200 (list dzen
201 dmenu
202 glib
203 glibmm
204 xterm
205 xsetroot
206 libx11
207 libxext
208 libxfixes
209 libxinerama
210 libxrandr
211 libxft))
212 (native-inputs
213 (list asciidoc pkg-config python))
214 (arguments
215 '(#:tests? #f
216 #:configure-flags
217 (let ((out (assoc-ref %outputs "out")))
218 (list "-DCC=gcc"
219 (string-append "-DCMAKE_INSTALL_SYSCONF_PREFIX=" out "/etc")
220 (string-append "-DBASHCOMPLETIONDIR=" out "/etc/bash_completion.d")))
221 #:phases
222 (modify-phases %standard-phases
223 (add-after 'install 'install-xsession
224 (lambda* (#:key outputs #:allow-other-keys)
225 (let* ((out (assoc-ref outputs "out"))
226 (xsessions (string-append out "/share/xsessions")))
227 (mkdir-p xsessions)
228 (call-with-output-file
229 (string-append xsessions "/herbstluftwm.desktop")
230 (lambda (port)
231 (format port "~
232 [Desktop Entry]~@
233 Name=herbstluftwm~@
234 Comment=Manual tiling window manager~@
235 Exec=~a/bin/herbstluftwm~@
236 Type=XSession~%" out)))
237 #t))))))
238 (synopsis "Tiling window manager for X11")
239 (description "herbstluftwm is a manual tiling window manager for X11 using
240 Xlib and GLib. Its main features are:
241
242 @itemize
243 @item
244 The layout is based on splitting frames into subframes which can be split
245 again or can be filled with windows (similar to i3 or musca).
246
247 @item
248 Tags (or workspaces or virtual desktops or …) can be added/removed at runtime.
249 Each tag contains an own layout.
250
251 @item
252 Exactly one tag is viewed on each monitor. The tags are monitor independent
253 (similar to Xmonad).
254
255 @item
256 It is configured at runtime via IPC calls from @command{herbstclient}. So the
257 configuration file is just a script which is run on startup (similar to wmii
258 or musca).
259
260 @end itemize")
261 (home-page "https://herbstluftwm.org")
262 (license license:bsd-2)))
263
264 (define-public i3status
265 (package
266 (name "i3status")
267 (version "2.14")
268 (source (origin
269 (method url-fetch)
270 (uri (string-append "https://i3wm.org/i3status/i3status-"
271 version ".tar.xz"))
272 (sha256
273 (base32
274 "0929chhvyq9hg4scpcz8r9zn3s9jvbg6a86k3wqa77qg85rh4kaw"))
275 (snippet
276 ;; Delete the pregenerated man page, to be rebuilt from source.
277 '(delete-file "man/i3status.1"))))
278 (build-system meson-build-system)
279 (arguments
280 (list #:configure-flags
281 '(list "-Dmans=True")
282 #:tests? #f)) ; no test suite
283 (inputs
284 (list alsa-lib
285 libconfuse
286 libnl
287 libyajl
288 pulseaudio))
289 (native-inputs
290 (list asciidoc
291 perl
292 pkg-config
293 docbook-xsl libxml2 ; for XML_CATALOG_FILES
294 xmlto))
295 (home-page "https://i3wm.org/i3status/")
296 (synopsis "Status bar for i3bar, dzen2, xmobar or similar programs")
297 (description "i3status is a small program for generating a status bar for
298 i3bar, dzen2, xmobar or similar programs. It is designed to be very efficient
299 by issuing a very small number of system calls, as one generally wants to
300 update such a status line every second. This ensures that even under high
301 load, your status bar is updated correctly. Also, it saves a bit of energy by
302 not hogging your CPU as much as spawning the corresponding amount of shell
303 commands would.")
304 (license license:bsd-3)))
305
306 (define-public i3-wm
307 (package
308 (name "i3-wm")
309 (version "4.20.1")
310 (source (origin
311 (method url-fetch)
312 (uri (string-append "https://i3wm.org/downloads/i3-"
313 version ".tar.xz"))
314 (sha256
315 (base32
316 "1rpwdgykcvmrmdz244f0wm7446ih1dcw8rlc1hm1c7cc42pyrq93"))))
317 (build-system meson-build-system)
318 (arguments
319 `(;; The test suite requires the unpackaged Xephyr X server.
320 #:tests? #f
321 #:phases
322 (modify-phases %standard-phases
323 (add-after 'install 'patch-session-file
324 (lambda* (#:key outputs #:allow-other-keys)
325 (let* ((out (assoc-ref outputs "out"))
326 (i3 (string-append out "/bin/i3"))
327 (i3-with-shmlog (string-append out "/bin/i3-with-shmlog")))
328 (substitute* (string-append out "/share/xsessions/i3.desktop")
329 (("Exec=i3") (string-append "Exec=" i3)))
330 (substitute* (string-append out "/share/xsessions/i3-with-shmlog.desktop")
331 (("Exec=i3-with-shmlog") (string-append "Exec=" i3-with-shmlog)))
332 #t))))))
333 (inputs
334 (list libxcb
335 xcb-util
336 xcb-util-cursor
337 xcb-util-keysyms
338 xcb-util-wm
339 xcb-util-xrm
340 libxkbcommon
341 libev
342 libyajl
343 xmlto
344 perl-pod-simple
345 libx11
346 pcre
347 startup-notification
348 pango
349 cairo))
350 (native-inputs
351 (list which
352 perl
353 pkg-config
354 asciidoc
355 ;; For building the documentation.
356 libxml2
357 docbook-xsl))
358 (home-page "https://i3wm.org/")
359 (synopsis "Tiling window manager")
360 (description "i3 is a tiling X11 window manager that dynamically manages
361 tiled, stacked, and tabbed window layouts.
362
363 i3 primarily targets advanced users. Windows are managed manually and organised
364 inside containers, which can be split vertically or horizontally, and optionally
365 resized.
366
367 i3 uses a plain-text configuration file, and can be extended and controlled from
368 many programming languages.")
369 (properties
370 `((upstream-name . "i3")
371 (release-monitoring-url . "https://i3wm.org/downloads")))
372 (license license:bsd-3)))
373
374 (define-public i3-gaps
375 (package
376 (inherit i3-wm)
377 (name "i3-gaps")
378 (version "4.20.1")
379 (source (origin
380 (method git-fetch)
381 (uri (git-reference
382 (url "https://github.com/Airblader/i3")
383 (commit version)))
384 (sha256
385 (base32
386 "0g0qmv2gpv9qbhj9h5f4c4vfs6ndzq2rblgx9md85iharwp5sbb9"))))
387 (home-page "https://github.com/Airblader/i3")
388 (synopsis "Tiling window manager with gaps")
389 (description
390 "i3-gaps is a fork of i3wm, a tiling window manager
391 for X11. It is kept up to date with upstream, adding a few additional
392 features such as gaps between windows.
393
394 i3 is a tiling X11 window manager that dynamically manages tiled, stacked,
395 and tabbed window layouts.
396
397 i3 primarily targets advanced users. Windows are managed manually and
398 organised inside containers, which can be split vertically or horizontally,
399 and optionally resized.
400
401 i3 uses a plain-text configuration file, and can be extended and controlled
402 from many programming languages.")
403 (license license:bsd-3)))
404
405 (define-public i3lock
406 (package
407 (name "i3lock")
408 (version "2.13")
409 (source (origin
410 (method url-fetch)
411 (uri (string-append "https://i3wm.org/i3lock/i3lock-"
412 version ".tar.bz2"))
413 (sha256
414 (base32
415 "02szjsaz7rqrdkd0r2nwgwa85c4hwfrcskxw7ryk695kmjcfhzv3"))))
416 (build-system gnu-build-system)
417 (native-inputs
418 (list pkg-config))
419 (inputs
420 (list cairo
421 libev
422 linux-pam
423 libxcb
424 libxkbcommon
425 xcb-util
426 xcb-util-image
427 xcb-util-xrm))
428 (home-page "https://i3wm.org/i3lock/")
429 (synopsis "Lightweight screen locker")
430 (description
431 "i3lock is a simple X11 screen locker developed alongside the i3 project.
432 Despite the name it should work with any X11 window manager.")
433 (license license:bsd-3)))
434
435 (define-public i3lock-blur
436 (package
437 (name "i3lock-blur")
438 (version "2.10")
439 (source (origin
440 (method git-fetch)
441 (uri
442 (git-reference
443 (url "https://github.com/karulont/i3lock-blur")
444 (commit version)))
445 (file-name (git-file-name name version))
446 (sha256
447 (base32
448 "1bd5nrlga5g1sz1f64gnc3dqy8yfrr4q1ss59krymbpxa1hhf55c"))))
449 (build-system gnu-build-system)
450 (native-inputs
451 (list pkg-config automake autoconf))
452 (inputs
453 (list cairo
454 mesa
455 libev
456 linux-pam
457 libxcb
458 libxkbcommon
459 xcb-util
460 xcb-util-image
461 xcb-util-xrm))
462 (home-page "https://github.com/karulont/i3lock-blur")
463 (synopsis "Lightweight screen locker with transparent blurring background")
464 (description
465 "Simple X11 screen locker with transparent blurring background developed
466 alongside the i3 project. Despite the name it should work with any X11 window
467 manager.")
468 (license license:expat)))
469
470 (define-public i3blocks
471 (package
472 (name "i3blocks")
473 (version "1.5")
474 (source (origin
475 (method git-fetch)
476 (uri (git-reference
477 (url "https://github.com/vivien/i3blocks")
478 (commit version)))
479 (sha256
480 (base32
481 "0v8mwnm8qzpv6xnqvrk43s4b9iyld4naqzbaxk4ldq1qkhai0wsv"))
482 (file-name (git-file-name name version))))
483 (build-system gnu-build-system)
484 (native-inputs
485 (list autoconf automake pkg-config))
486 (home-page "https://github.com/vivien/i3blocks")
487 (synopsis "Minimalist scheduler for status bar scripts")
488 (description "i3blocks executes your command lines and generates a
489 status line from their output. The generated line is meant to be displayed by
490 the i3 window manager through its i3bar component, as an alternative to
491 i3status.")
492 (license license:gpl3+)))
493
494 (define-public perl-anyevent-i3
495 (package
496 (name "perl-anyevent-i3")
497 (version "0.17")
498 (source (origin
499 (method url-fetch)
500 (uri (string-append "mirror://cpan/authors/id/M/MS/MSTPLBG/"
501 "AnyEvent-I3-" version ".tar.gz"))
502 (sha256
503 (base32
504 "0qvd9bq16jyy7v3ma82qcnvz9j503bw0mh7h55gkjf7ir62ck0jk"))))
505 (build-system perl-build-system)
506 (propagated-inputs
507 (list perl-anyevent perl-json-xs))
508 (home-page "https://metacpan.org/release/AnyEvent-I3")
509 (synopsis
510 "Communicate with the i3 window manager through perl")
511 (description
512 "This module connects to the i3 window manager using the UNIX socket
513 based IPC interface it provides (if enabled in the configuration file).
514 You can then subscribe to events or send messages and receive their replies.")
515 ;; Can be used with either license.
516 (license (list license:gpl3+ license:perl-license))))
517
518 (define-public python-i3-py
519 (package
520 (name "python-i3-py")
521 (version "0.6.5")
522 (source
523 (origin
524 ;; The latest release is not tagged in Git nor has an entry in PyPi,
525 ;; but there is still a clear commit for it, and it's been the last one
526 ;; for years.
527 (method git-fetch)
528 (uri (git-reference
529 (url "https://github.com/ziberna/i3-py")
530 (commit "27f88a616e9ecc340e7d041d3d00782f8a1964c1")))
531 (sha256
532 (base32
533 "1nm719dc2xqlll7vj4c4m7mpjb27lpn3bg3c66gajvnrz2x1nmxs"))
534 (file-name (string-append name "-" version "-checkout"))))
535 (build-system python-build-system)
536 (arguments
537 `(#:tests? #f ; no tests yet
538 #:phases (modify-phases %standard-phases
539 (add-after 'install 'install-doc
540 ;; Copy readme file to documentation directory.
541 (lambda* (#:key outputs #:allow-other-keys)
542 (let ((doc (string-append (assoc-ref outputs "out")
543 "/share/doc/" ,name)))
544 (install-file "README.md" doc)
545 ;; Avoid unspecified return value.
546 #t))))))
547 (propagated-inputs
548 (list i3-wm))
549 (home-page "https://github.com/ziberna/i3-py")
550 (synopsis "Python interface to the i3 window manager")
551 (description "This package allows you to interact from a Python program
552 with the i3 window manager via its IPC socket. It can send commands and other
553 kinds of messages to i3, select the affected containers, filter results and
554 subscribe to events.")
555 (license license:gpl3+)))
556
557 (define-public qtile
558 (package
559 (name "qtile")
560 (version "0.18.1")
561 (source
562 (origin
563 (method url-fetch)
564 (uri (pypi-uri "qtile" version))
565 (sha256
566 (base32 "14hb26xkza7brvkd4276j60mxd3zsas72ih6y0cq3j060izm1865"))))
567 (build-system python-build-system)
568 (arguments
569 `(#:tests? #f ; Tests require Xvfb and writable temp/cache space
570 #:phases
571 (modify-phases %standard-phases
572 (add-after 'unpack 'patch-paths
573 (lambda* (#:key inputs #:allow-other-keys)
574 (substitute* "libqtile/pangocffi.py"
575 (("^gobject = ffi.dlopen.*")
576 (string-append "gobject = ffi.dlopen(\""
577 (assoc-ref inputs "glib") "/lib/libgobject-2.0.so.0\")\n"))
578 (("^pango = ffi.dlopen.*")
579 (string-append "pango = ffi.dlopen(\""
580 (assoc-ref inputs "pango") "/lib/libpango-1.0.so.0\")\n"))
581 (("^pangocairo = ffi.dlopen.*")
582 (string-append "pangocairo = ffi.dlopen(\""
583 (assoc-ref inputs "pango") "/lib/libpangocairo-1.0.so.0\")\n")))))
584 (add-after 'install 'install-xsession
585 (lambda* (#:key outputs #:allow-other-keys)
586 (let* ((out (assoc-ref outputs "out"))
587 (xsessions (string-append out "/share/xsessions"))
588 (qtile (string-append out "/bin/qtile start")))
589 (mkdir-p xsessions)
590 (copy-file "resources/qtile.desktop" (string-append xsessions "/qtile.desktop"))
591 (substitute* (string-append xsessions "/qtile.desktop")
592 (("qtile start") qtile))))))))
593 (inputs
594 (list glib pango pulseaudio))
595 (propagated-inputs
596 (list python-cairocffi
597 python-cffi
598 python-dateutil
599 python-dbus-next
600 python-iwlib
601 python-keyring
602 python-mpd2
603 python-pyxdg
604 python-xcffib))
605 (native-inputs
606 (list pkg-config
607 python-flake8
608 python-pep8-naming
609 python-psutil
610 python-pytest-cov
611 python-setuptools-scm))
612 (home-page "http://qtile.org")
613 (synopsis "Hackable tiling window manager written and configured in Python")
614 (description "Qtile is simple, small, and extensible. It's easy to write
615 your own layouts, widgets, and built-in commands.")
616 (license license:expat)))
617
618 (define-public quickswitch-i3
619 (let ((commit "ed692b1e8f43b95bd907ced26238ce8ccb2ed28f")
620 (revision "1")) ; Guix package revision
621 (package
622 (name "quickswitch-i3")
623 (version (string-append "2.2-" revision "."
624 (string-take commit 7)))
625 (source
626 (origin
627 ;; The latest commit is a few years old and just a couple commits
628 ;; after the last tagged release, so we use that latest commit
629 ;; instead of the release.
630 (method git-fetch)
631 (uri (git-reference
632 (url "https://github.com/proxypoke/quickswitch-for-i3")
633 (commit commit)))
634 (sha256
635 (base32
636 "0447077sama80jcdg5p64zjsvafmz5rbdrirhm1adcdjhkh6iqc5"))
637 (patches (search-patches "quickswitch-fix-dmenu-check.patch"))
638 (file-name (string-append name "-" version "-checkout"))))
639 (build-system python-build-system)
640 (arguments
641 `(#:tests? #f ; no tests yet
642 #:phases (modify-phases %standard-phases
643 (add-after 'install 'install-doc
644 ;; Copy readme file to documentation directory.
645 (lambda* (#:key outputs #:allow-other-keys)
646 (let ((doc (string-append (assoc-ref outputs "out")
647 "/share/doc/" ,name)))
648 (install-file "README.rst" doc)
649 ;; Avoid unspecified return value.
650 #t))))))
651 (inputs
652 (list python-i3-py dmenu))
653 (home-page "https://github.com/proxypoke/quickswitch-for-i3")
654 (synopsis "Quickly change to and locate windows in the i3 window manager")
655 (description
656 "This utility for the i3 window manager allows you to quickly switch to
657 and locate windows on all your workspaces, using an interactive dmenu
658 prompt.")
659 (license license:wtfpl2))))
660
661 (define-public i3lock-color
662 (package
663 (name "i3lock-color")
664 (version "2.13.c.4")
665 (source
666 (origin
667 (method git-fetch)
668 (uri (git-reference
669 (url "https://github.com/Raymo111/i3lock-color")
670 (commit version)))
671 (file-name (git-file-name name version))
672 (sha256
673 (base32 "1lnyh8spbf1ar4xan5v7q8i2i51aq1i60kzbfkn9w3wa0jzf9f3d"))))
674 (build-system gnu-build-system)
675 (arguments
676 `(#:tests? #f)) ; no tests included
677 (inputs
678 (list cairo
679 libev
680 libjpeg-turbo
681 libxcb
682 libxkbcommon
683 linux-pam
684 xcb-util
685 xcb-util-image
686 xcb-util-xrm))
687 (native-inputs
688 (list autoconf automake pkg-config))
689 (home-page "https://github.com/Raymo111/i3lock-color")
690 (synopsis "Screen locker with color configuration support")
691 (description
692 "i3lock-color is a simpler X11 screen locker derived from i3lock.
693 Features include:
694
695 @enumerate
696 @item forking process, the locked screen is preserved when you suspend to RAM;
697 @item specify background color or image to be displayed in the lock screen;
698 @item many additional color options.
699 @end enumerate")
700 (license license:bsd-3)))
701
702 (define-public i3lock-fancy
703 (package
704 (name "i3lock-fancy")
705 (version "0.2")
706 (source
707 (origin
708 (method git-fetch)
709 (uri (git-reference
710 (url "https://github.com/meskarune/i3lock-fancy")
711 (commit version)))
712 (file-name (git-file-name name version))
713 (sha256
714 (base32 "11g2kkim33ra38d1m897sq1ifajw17iyw9mr7sg1q8i2ibl4lfsi"))))
715 (build-system gnu-build-system)
716 (arguments
717 `(#:tests? #f ; no tests included
718 #:phases
719 (modify-phases %standard-phases
720 (replace 'configure
721 (lambda* (#:key inputs outputs #:allow-other-keys)
722 (let* ((out (assoc-ref outputs "out"))
723 (icons (string-append out "/share/i3lock-fancy/icons/"))
724 (wmctrl (search-input-file inputs "/bin/wmctrl"))
725 (mconvert (search-input-file inputs "/bin/convert"))
726 (mimport (search-input-file inputs "/bin/import"))
727 (awk (search-input-file inputs "/bin/gawk")))
728
729 (substitute* "lock"
730 (("\\$\\(command -V wmctrl\\)") wmctrl)
731 (("convert") mconvert)
732 (("shot=\\(import") (string-append "shot=\(" mimport))
733 (("awk -F") (string-append awk " -F"))
734 ((" awk") awk)
735 (("\\$scriptpath/icons/") icons))
736 #t)))
737 (delete 'build)
738 (replace 'install
739 (lambda* (#:key inputs outputs #:allow-other-keys)
740 (let* ((out (assoc-ref outputs "out"))
741 (bin (string-append out "/bin"))
742 (icons (string-append out "/share/i3lock-fancy/icons/")))
743
744 (install-file "lock" bin)
745 (rename-file (string-append bin "/lock")
746 (string-append bin "/i3lock-fancy"))
747 (copy-recursively "icons" icons)
748 #t))))))
749 (inputs
750 (list imagemagick wmctrl i3lock gawk))
751 (home-page "https://github.com/meskarune/i3lock-fancy")
752 (synopsis "Screen locker with screenshot function")
753 (description
754 "@code{i3lock-fancy} is a Bash script that takes a screenshot of
755 the desktop, blurs the background and adds a lock icon and text.
756 It requires @code{i3lock-color} or @code{i3lock} and can optionally
757 be passed any screenshot util like @code{scrot}.
758 This screen locker can be used with any window manager or
759 desktop environment.")
760 (license license:expat)))
761
762 (define-public xmonad-next
763 (package
764 (name "xmonad-next")
765 (version "0.17.0")
766 (synopsis "Tiling window manager")
767 (source (origin
768 (method url-fetch)
769 (uri (string-append "mirror://hackage/package/xmonad/"
770 "xmonad-" version ".tar.gz"))
771 (sha256
772 (base32
773 "04qspdz9w6xpw1npcmx2zx0595wc68q985pv4i0hvp32zillvdqy"))
774 (patches (search-patches "xmonad-next-dynamic-linking.patch"))))
775 (build-system haskell-build-system)
776 (inputs (list ghc-data-default-class ghc-setlocale ghc-x11))
777 (native-inputs (list ghc-quickcheck ghc-quickcheck-classes))
778 (arguments
779 (list #:phases
780 #~(modify-phases %standard-phases
781 (add-after 'install 'install-xsession
782 (lambda _
783 (let ((xsessions (string-append #$output "/share/xsessions")))
784 (mkdir-p xsessions)
785 (call-with-output-file (string-append xsessions
786 "/xmonad.desktop")
787 (lambda (port)
788 (format port "~
789 [Desktop Entry]~@
790 Name=~a~@
791 Comment=~a~@
792 Exec=~a/bin/xmonad~@
793 Type=Application~%" #$name #$synopsis #$output)))))))))
794 (home-page "https://xmonad.org")
795 (description
796 "Xmonad is a tiling window manager for X. Windows are arranged
797 automatically to tile the screen without gaps or overlap, maximising screen
798 use. All features of the window manager are accessible from the keyboard: a
799 mouse is strictly optional. Xmonad is written and extensible in Haskell.
800 Custom layout algorithms, and other extensions, may be written by the user in
801 config files. Layouts are applied dynamically, and different layouts may be
802 used on each workspace. Xinerama is fully supported, allowing windows to be
803 tiled on several screens.")
804 (license license:bsd-3)))
805
806 (define-public xmonad
807 (package
808 (inherit xmonad-next)
809 (name "xmonad")
810 (version "0.15")
811 (source (origin
812 (method url-fetch)
813 (uri (string-append "mirror://hackage/package/xmonad/"
814 "xmonad-" version ".tar.gz"))
815 (sha256
816 (base32
817 "0a7rh21k9y6g8fwkggxdxjns2grvvsd5hi2ls4klmqz5xvk4hyaa"))
818 (patches (search-patches "xmonad-dynamic-linking.patch"))))
819 (inputs
820 (list ghc-extensible-exceptions
821 ghc-data-default
822 ghc-quickcheck
823 ghc-semigroups
824 ghc-setlocale
825 ghc-utf8-string
826 ghc-x11))
827 (native-inputs '())
828 (arguments
829 `(#:cabal-revision
830 ("1" "0yqh96qqphllr0zyz5j93cij5w2qvf39xxnrb52pz0qz3pywz9wd")
831 ,@(package-arguments xmonad-next)))))
832
833 (define-public xmobar
834 (package
835 (name "xmobar")
836 (version "0.44.2")
837 (source (origin
838 (method url-fetch)
839 (uri (string-append "https://hackage.haskell.org/package/xmobar/"
840 "xmobar-" version ".tar.gz"))
841 (sha256
842 (base32
843 "0gdphjn5ll5lkb2psdsb34563wsz6g0y2gg3z8cj4jy8lvbbv808"))))
844 (build-system haskell-build-system)
845 (native-inputs
846 (list ghc-hspec hspec-discover))
847 (inputs
848 (list ghc-alsa-core
849 ghc-alsa-mixer
850 ghc-dbus
851 ghc-hinotify
852 ghc-http
853 ghc-http-conduit
854 ghc-http-types
855 ghc-iwlib
856 ghc-libmpd
857 ghc-netlink
858 ghc-old-locale
859 ghc-parsec-numbers
860 ghc-regex-compat
861 ghc-temporary
862 ghc-timezone-olson
863 ghc-x11
864 ghc-x11-xft
865 libxpm))
866 (arguments
867 `(#:configure-flags (list "--flags=all_extensions")
868 #:phases
869 (modify-phases %standard-phases
870 (add-before 'build 'patch-test-shebang
871 (lambda* (#:key inputs #:allow-other-keys)
872 (substitute* "test/Xmobar/Plugins/Monitors/AlsaSpec.hs"
873 (("/bin/bash") (which "bash")))
874 #t)))))
875 (home-page "https://xmobar.org")
876 (synopsis "Minimalistic text based status bar")
877 (description
878 "@code{xmobar} is a lightweight, text-based, status bar written in
879 Haskell. It was originally designed to be used together with Xmonad, but it
880 is also usable with any other window manager. While xmobar is written in
881 Haskell, no knowledge of the language is required to install and use it.")
882 (license license:bsd-3)))
883
884 (define-public yeganesh
885 (package
886 (name "yeganesh")
887 (version "2.4")
888 (source
889 (origin
890
891 (method url-fetch)
892 (uri (string-append "http://dmwit.com/yeganesh/yeganesh-" version ".tar.gz"))
893 (sha256
894 (base32 "04djfyjab3c5y9z9x8zd0xcx0jyy35zq7cl9ddr4ppf6k5ky6iky"))))
895 (build-system haskell-build-system)
896 (inputs
897 (list ghc-strict ghc-xdg-basedir))
898 (home-page "http://dmwit.com/yeganesh/")
899 (synopsis "Small wrapper around dmenu")
900 (description "@code{yeganesh} is a small wrapper around demnu. Like
901 dmenu, it accepts input on stdin and writes the chosen result on stdout.
902 Unlike dmenu, it mangles the input before it presents its choices. In
903 particular, it displays commonly-chosen options before uncommon ones.")
904 (license license:bsd-3)))
905
906 (define-public ghc-xmonad-contrib-next
907 (package
908 (name "ghc-xmonad-contrib-next")
909 (version "0.17.0")
910 (source
911 (origin
912 (method url-fetch)
913 (uri (string-append "mirror://hackage/package/xmonad-contrib/"
914 "xmonad-contrib-" version ".tar.gz"))
915 (sha256
916 (base32 "11g1cyfgfvcmz35qhgi9wzxrk3br8m8b7qy3jvph4nnf6aj13wvy"))))
917 (build-system haskell-build-system)
918 (propagated-inputs (list ghc-random ghc-x11 ghc-utf8-string ghc-x11-xft xmonad-next))
919 (native-inputs (list ghc-quickcheck ghc-hspec))
920 (home-page "https://xmonad.org")
921 (synopsis "Third party extensions for xmonad")
922 (description
923 "Third party tiling algorithms, configurations, and scripts to Xmonad, a
924 tiling window manager for X.")
925 (license license:bsd-3)))
926
927 (define-public ghc-xmonad-contrib
928 (package
929 (inherit ghc-xmonad-contrib-next)
930 (name "ghc-xmonad-contrib")
931 (version "0.16")
932 (source
933 (origin
934 (method url-fetch)
935 (uri (string-append "mirror://hackage/package/xmonad-contrib/"
936 "xmonad-contrib-" version ".tar.gz"))
937 (sha256
938 (base32 "1pddgkvnbww28wykncc7j0yb0lv15bk7xnnhdcbrwkxzw66w6wmd"))))
939 (arguments
940 `(#:cabal-revision
941 ("1" "0vimkby2gq6sgzxzbvz67caba609xqlv2ii2gi8a1cjrnn6ib011")
942 ,@(package-arguments ghc-xmonad-contrib-next)))
943 (native-inputs '())
944 (propagated-inputs
945 (list ghc-old-time
946 ghc-random
947 ghc-utf8-string
948 ghc-extensible-exceptions
949 ghc-semigroups
950 ghc-x11
951 ghc-x11-xft
952 xmonad))))
953
954 (define-public evilwm
955 (package
956 (name "evilwm")
957 (version "1.3.1")
958 (source
959 (origin
960 (method url-fetch)
961 (uri (string-append "http://www.6809.org.uk/evilwm/dl/evilwm-"
962 version ".tar.gz"))
963 (sha256
964 (base32
965 "1jry36qkg2l02v37zvzszxvxm2d8c62z25gks5gdqqjl9ifbpv1j"))))
966 (build-system gnu-build-system)
967 (inputs
968 (list libx11 libxext libxrandr))
969 (arguments
970 `(#:modules ((srfi srfi-26)
971 (guix build utils)
972 (guix build gnu-build-system))
973 #:make-flags (let ((inputs (map (cut assoc-ref %build-inputs <>)
974 '("libx11" "libxext" "libxrandr")))
975 (join (lambda (proc strs)
976 (string-join (map proc strs) " ")))
977 (dash-I (cut string-append "-I" <> "/include"))
978 (dash-L (cut string-append "-L" <> "/lib")))
979 `("desktopfilesdir=$(prefix)/share/xsessions"
980 ,(string-append "prefix=" (assoc-ref %outputs "out"))
981 ,(string-append "CPPFLAGS=" (join dash-I inputs))
982 ,(string-append "LDFLAGS=" (join dash-L inputs))))
983 #:tests? #f ;no tests
984 #:phases (modify-phases %standard-phases
985 (delete 'configure)))) ;no configure script
986 (home-page "http://www.6809.org.uk/evilwm/")
987 (synopsis "Minimalist window manager for the X Window System")
988 (description
989 "evilwm is a minimalist window manager based on aewm, extended to feature
990 many keyboard controls with repositioning and maximize toggles, solid window
991 drags, snap-to-border support, and virtual desktops.")
992 (license (license:x11-style "file:///README"))))
993
994 (define-public fluxbox
995 (package
996 (name "fluxbox")
997 (version "1.3.7")
998 (synopsis "Small and fast window manager")
999 (source (origin
1000 (method url-fetch)
1001 (uri (string-append "mirror://sourceforge/fluxbox/fluxbox/"
1002 version "/fluxbox-" version ".tar.xz"))
1003 (sha256
1004 (base32
1005 "1h1f70y40qd225dqx937vzb4k2cz219agm1zvnjxakn5jkz7b37w"))))
1006 (build-system gnu-build-system)
1007 (arguments
1008 `(#:make-flags '("CPPFLAGS=-U__TIME__") ;ugly, but for reproducibility
1009 #:phases
1010 (modify-phases %standard-phases
1011 (add-after 'install 'install-vim-files
1012 (lambda* (#:key outputs #:allow-other-keys)
1013 (let* ((out (assoc-ref outputs "out"))
1014 (syntax (string-append out "/share/vim/vimfiles/syntax")))
1015 (copy-recursively "3rd/vim/vim/syntax" syntax)
1016 #t)))
1017 (add-after 'install 'install-xsession
1018 (lambda* (#:key outputs #:allow-other-keys)
1019 (let* ((out (assoc-ref outputs "out"))
1020 (xsessions (string-append out "/share/xsessions")))
1021 (mkdir-p xsessions)
1022 (call-with-output-file
1023 (string-append xsessions "/fluxbox.desktop")
1024 (lambda (port)
1025 (format port "~
1026 [Desktop Entry]~@
1027 Name=~a~@
1028 Comment=~a~@
1029 Exec=~a/bin/startfluxbox~@
1030 Type=Application~%" ,name ,synopsis out)))
1031 #t))))))
1032 (native-inputs
1033 (list pkg-config))
1034 (inputs
1035 (list freetype
1036 fribidi
1037 imlib2
1038 libx11
1039 libxext
1040 libxft
1041 libxinerama
1042 libxpm
1043 libxrandr
1044 libxrender))
1045 (description "Fluxbox is a window manager. It is light on resources
1046 and easy to handle yet full of features to make an easy and fast desktop
1047 experience.")
1048 (home-page "http://fluxbox.org/")
1049 (license license:expat)))
1050
1051 (define-public fnott
1052 (package
1053 (name "fnott")
1054 (version "1.2.1")
1055 (source (origin
1056 (method git-fetch)
1057 (uri (git-reference
1058 (url "https://codeberg.org/dnkl/fnott")
1059 (commit version)))
1060 (file-name (git-file-name name version))
1061 (sha256
1062 (base32
1063 "1770p5hfswbaa15zmjh10n7fskch00d3y03ij3gfb1v4q314nb9n"))))
1064 (build-system meson-build-system)
1065 (arguments `(#:build-type "release"))
1066 (native-inputs
1067 (list pkg-config
1068 wayland-protocols
1069 tllist
1070 scdoc))
1071 (inputs
1072 (list wlroots wayland fcft dbus libpng))
1073 (home-page "https://codeberg.org/dnkl/fnott")
1074 (synopsis "Keyboard driven and lightweight Wayland notification daemon")
1075 (description "Fnott is a keyboard driven and lightweight notification daemon
1076 for wlroots-based Wayland compositors.")
1077 (license license:expat)))
1078
1079 (define-public awesome
1080 (package
1081 (name "awesome")
1082 (version "4.3")
1083 (source
1084 (origin
1085 (method url-fetch)
1086 (uri (string-append
1087 "https://github.com/awesomeWM/awesome-releases/raw/master/"
1088 "awesome-" version ".tar.xz"))
1089 (sha256
1090 (base32 "0lqpw401mkkmp9wgbvrmm45bqq2j9357l4irwdqv6l1305pls9kq"))
1091 (modules '((guix build utils)
1092 (srfi srfi-19)))
1093 (snippet
1094 '(begin
1095 ;; Remove non-reproducible timestamp and use the date of
1096 ;; the source file instead.
1097 (substitute* "common/version.c"
1098 (("__DATE__ \" \" __TIME__")
1099 (date->string
1100 (time-utc->date
1101 (make-time time-utc 0 (stat:mtime (stat "awesome.c"))))
1102 "\"~c\"")))
1103 #t))
1104 (patches
1105 (search-patches "awesome-reproducible-png.patch"
1106 "awesome-4.3-fno-common.patch"))))
1107 (build-system cmake-build-system)
1108 (native-inputs
1109 (list asciidoc
1110 docbook-xsl
1111 doxygen
1112 gperf
1113 imagemagick
1114 libxml2 ;for XML_CATALOG_FILES
1115 lua-ldoc
1116 pkg-config
1117 xmlto))
1118 (inputs
1119 (list cairo
1120 dbus
1121 gdk-pixbuf
1122 glib
1123 gobject-introspection
1124 imlib2
1125 libev
1126 libxcb
1127 libxcursor
1128 libxdg-basedir
1129 libxkbcommon
1130 lua
1131 lua-lgi
1132 pango
1133 startup-notification
1134 xcb-util
1135 xcb-util-cursor
1136 xcb-util-image
1137 xcb-util-keysyms
1138 xcb-util-renderutil
1139 xcb-util-xrm
1140 xcb-util-wm))
1141 (arguments
1142 `(#:modules ((guix build cmake-build-system)
1143 (guix build utils)
1144 (ice-9 match))
1145 ;; Let compression happen in our 'compress-documentation' phase
1146 ;; so that '--no-name' is used, which removes timestamps from
1147 ;; gzip output.
1148 #:configure-flags
1149 '("-DCOMPRESS_MANPAGES=off")
1150 ;; Building awesome in its source directory is no longer
1151 ;; supported.
1152 #:out-of-source? #t
1153 #:phases
1154 (modify-phases %standard-phases
1155 (add-before 'configure 'set-paths
1156 (lambda* (#:key inputs #:allow-other-keys)
1157 (substitute* "lib/awful/completion.lua"
1158 (("/usr/bin/env")
1159 ""))
1160 ;; The build process needs to load Cairo dynamically.
1161 (let* ((cairo (string-append (assoc-ref inputs "cairo") "/lib"))
1162 (lua-version ,(version-major+minor (package-version lua)))
1163 (lua-dependencies
1164 (filter (match-lambda
1165 ((label . _) (string-prefix? "lua-" label)))
1166 inputs))
1167 (lua-path
1168 (string-join
1169 (map (match-lambda
1170 ((_ . dir)
1171 (string-append
1172 dir "/share/lua/" lua-version "/?.lua;"
1173 dir "/share/lua/" lua-version "/?/?.lua")))
1174 lua-dependencies)
1175 ";"))
1176 (lua-cpath
1177 (string-join
1178 (map (match-lambda
1179 ((_ . dir)
1180 (string-append
1181 dir "/lib/lua/" lua-version "/?.so;"
1182 dir "/lib/lua/" lua-version "/?/?.so")))
1183 lua-dependencies)
1184 ";")))
1185 (setenv "LD_LIBRARY_PATH" cairo)
1186 (setenv "LUA_PATH" (string-append "?.lua;" lua-path))
1187 (setenv "LUA_CPATH" lua-cpath)
1188 (setenv "HOME" (getcwd))
1189 (setenv "XDG_CACHE_HOME" (getcwd)))))
1190 (replace 'check
1191 (lambda _
1192 ;; There aren't any tests, so just make sure the binary
1193 ;; gets built and can be run successfully.
1194 (invoke "../build/awesome" "-v")))
1195 (add-after 'install 'patch-session-file
1196 (lambda* (#:key outputs #:allow-other-keys)
1197 (let* ((out (assoc-ref outputs "out"))
1198 (awesome (string-append out "/bin/awesome")))
1199 (substitute* (string-append out "/share/xsessions/awesome.desktop")
1200 (("Exec=awesome") (string-append "Exec=" awesome)))
1201 #t)))
1202 (add-after 'install 'wrap
1203 (lambda* (#:key inputs outputs #:allow-other-keys)
1204 (let* ((awesome (assoc-ref outputs "out"))
1205 (cairo (string-append (assoc-ref inputs "cairo") "/lib"))
1206 (lua-version ,(version-major+minor (package-version lua)))
1207 (lua-lgi (assoc-ref inputs "lua-lgi")))
1208 (wrap-program (string-append awesome "/bin/awesome")
1209 `("LUA_PATH" ";" suffix
1210 (,(format #f "~a/share/lua/~a/?.lua" lua-lgi lua-version)))
1211 `("LUA_CPATH" ";" suffix
1212 (,(format #f "~a/lib/lua/~a/?.so" lua-lgi lua-version)))
1213 `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))
1214 `("LD_LIBRARY_PATH" suffix (,cairo)))
1215 #t))))))
1216 (home-page "https://awesomewm.org/")
1217 (synopsis "Highly configurable window manager")
1218 (description
1219 "Awesome has been designed as a framework window manager. It is fast, small,
1220 dynamic and extensible using the Lua programming language.")
1221 (license license:gpl2+)))
1222
1223 (define-public menumaker
1224 (package
1225 (name "menumaker")
1226 (version "0.99.14")
1227 (source
1228 (origin
1229 (method url-fetch)
1230 (uri (string-append "mirror://sourceforge/menumaker/"
1231 "menumaker-" version ".tar.gz"))
1232 (sha256
1233 (base32 "0nnnc1awvhq5pplvclap3ha61g9209bca6zqgpsm1f53fq75vs8i"))))
1234 (build-system gnu-build-system)
1235 (inputs
1236 (list python))
1237 (synopsis "Heuristics-driven menu generator")
1238 (description
1239 "MenuMaker is a menu generation utility for a number of X window
1240 managers and desktop environments. It is capable of finding lots of
1241 installed programs and generating a root menu consistent across all
1242 supported window managers, so one will get (almost) the same menu in
1243 all of them. Currently supported window managers include:
1244
1245 @enumerate
1246 @item BlackBox
1247 @item Deskmenu
1248 @item FluxBox
1249 @item IceWM
1250 @item OpenBox
1251 @item PekWM
1252 @item WindowMaker
1253 @item XFCE
1254 @end enumerate\n")
1255 (home-page "http://menumaker.sourceforge.net/")
1256 (license license:bsd-2)))
1257
1258 (define-public keybinder
1259 (package
1260 (name "keybinder")
1261 (version "0.3.2")
1262 (source
1263 (origin
1264 (method url-fetch)
1265 (uri (string-append "https://github.com/kupferlauncher/keybinder"
1266 "/releases/download/" name "-3.0-v" version "/"
1267 name "-3.0-" version ".tar.gz"))
1268 (file-name (string-append name "-" version ".tar.gz"))
1269 (sha256
1270 (base32
1271 "0830ihwnalw59pp1xzrp37dn58n8vwb8zasnm4a1h81v3x7dxqz6"))))
1272 (build-system gnu-build-system)
1273 (inputs
1274 (list gtk+ gobject-introspection))
1275 (native-inputs
1276 (list gtk-doc pkg-config))
1277 (synopsis "Library for registering global keyboard shortcuts, Gtk3 version")
1278 (description
1279 "Keybinder is a library for registering global keyboard shortcuts.
1280 Keybinder works with GTK-based applications using the X Window System.")
1281 (home-page "https://github.com/kupferlauncher/keybinder")
1282 (license license:x11)))
1283
1284 (define-public keybinder-3.0
1285 (deprecated-package "keybinder-3.0" keybinder))
1286
1287 (define-public spectrwm
1288 (package
1289 (name "spectrwm")
1290 (version "3.2.0")
1291 (source
1292 (origin
1293 (method git-fetch)
1294 (uri (git-reference
1295 (url "https://github.com/conformal/spectrwm")
1296 (commit
1297 (string-append "SPECTRWM_"
1298 (string-join (string-split version #\.) "_")))))
1299 (file-name (git-file-name name version))
1300 (sha256
1301 (base32 "1dfqy5f0s1nv6rqkz9lj006vypmp4rwxd5vczfk3ndzqgnh19kw6"))))
1302 (build-system gnu-build-system)
1303 (arguments
1304 `(#:make-flags (let ((pkg-config (lambda (flag)
1305 (string-append
1306 "$(shell pkg-config " flag " "
1307 "xft fontconfig x11 libpng)"))))
1308 (list
1309 "CC=gcc"
1310 (string-append "PREFIX=" %output)
1311 (string-append "INCS=-I. " (pkg-config "--cflags"))
1312 (string-append "LIBS=" (pkg-config "--libs") " -lm")))
1313 #:tests? #f ;no test suite
1314 #:phases
1315 (modify-phases %standard-phases
1316 (add-before 'build 'change-dir
1317 (lambda _
1318 (chdir "linux") #t))
1319 (add-after 'change-dir 'patch-makefile
1320 (lambda _
1321 (substitute* "Makefile"
1322 (("-g") ""))))
1323 (delete 'configure)))) ;no 'configure' exists
1324 (inputs
1325 `(("freetype" ,freetype)
1326 ("fontconfig" ,fontconfig)
1327 ("libx11" ,libx11)
1328 ("libxcursor" ,libxcursor)
1329 ("libxrandr" ,libxrandr)
1330 ("libxtst" ,libxtst)
1331 ("libxft" ,libxft)
1332 ("xcb-util" ,xcb-util)
1333 ("xcb-util-wm" ,xcb-util-wm)
1334 ("xcb-util-keysyms" ,xcb-util-keysyms)))
1335 (native-inputs
1336 (list libxt pkg-config))
1337 (synopsis "Minimalistic automatic tiling window manager")
1338 (description
1339 "Spectrwm is a small dynamic tiling and reparenting window manager for X11.
1340 It is inspired by Xmonad and dwm. Its major features include:
1341
1342 @itemize
1343 @item Navigation anywhere on all screens with either the keyboard or mouse
1344 @item Customizable status bar
1345 @item Restartable without losing state
1346 @item Quick launch menu
1347 @item Many screen layouts possible with a few simple key strokes
1348 @item Move/resize floating windows
1349 @item Extended Window Manager Hints (@dfn{EWMH}) support
1350 @item Configurable tiling
1351 @item Adjustable tile gap allows for a true one pixel border
1352 @item Customizable colors and border width
1353 @end itemize\n")
1354 (home-page "https://github.com/conformal/spectrwm")
1355 (license license:isc)))
1356
1357 (define-public cwm
1358 (package
1359 (name "cwm")
1360 (version "6.7")
1361 (source
1362 (origin
1363 (method url-fetch)
1364 (uri (string-append "https://leahneukirchen.org/releases/cwm-"
1365 version ".tar.gz"))
1366 (sha256
1367 (base32 "022zld29qawd8gl700g4m24qa89il3aks397zkhh66wvzssdblzx"))))
1368 (build-system gnu-build-system)
1369 (arguments
1370 `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
1371 (string-append "PREFIX=" %output))
1372 #:tests? #f
1373 #:phases
1374 (modify-phases %standard-phases
1375 (delete 'configure)
1376 (add-after 'build 'install-xsession
1377 (lambda* (#:key outputs #:allow-other-keys)
1378 ;; Add a .desktop file to xsessions.
1379 (let* ((output (assoc-ref outputs "out"))
1380 (xsessions (string-append output "/share/xsessions")))
1381 (mkdir-p xsessions)
1382 (with-output-to-file
1383 (string-append xsessions "/cwm.desktop")
1384 (lambda _
1385 (format #t
1386 "[Desktop Entry]~@
1387 Name=cwm~@
1388 Comment=OpenBSD Calm Window Manager fork~@
1389 Exec=~a/bin/cwm~@
1390 TryExec=~@*~a/bin/cwm~@
1391 Icon=~@
1392 Type=Application~%"
1393 output)))
1394 #t))))))
1395 (inputs
1396 (list libxft libxrandr libxinerama))
1397 (native-inputs
1398 (list pkg-config bison))
1399 (home-page "https://github.com/leahneukirchen/cwm")
1400 (synopsis "OpenBSD fork of the calmwm window manager")
1401 (description "Cwm is a stacking window manager for X11. It is an OpenBSD
1402 project derived from the original Calm Window Manager.")
1403 (license license:isc)))
1404
1405 (define-public dwl
1406 (package
1407 (name "dwl")
1408 (version "0.2.1")
1409 (source (origin
1410 (method git-fetch)
1411 (uri (git-reference
1412 (url "https://github.com/djpohly/dwl")
1413 (commit (string-append "v" version))))
1414 (file-name (git-file-name name version))
1415 (sha256
1416 (base32
1417 "0js8xjc2rx1ml6s58s90jrak5n7vh3kj5na2j4yy3qy0cb501xcm"))))
1418 (build-system gnu-build-system)
1419 (arguments
1420 `(#:tests? #f ; no tests
1421 #:make-flags
1422 (list
1423 (string-append "CC=" ,(cc-for-target))
1424 (string-append "PREFIX=" (assoc-ref %outputs "out")))
1425 #:phases
1426 (modify-phases %standard-phases
1427 (delete 'configure)))) ; no configure
1428 (native-inputs
1429 (list pkg-config))
1430 (inputs
1431 (list wlroots))
1432 (home-page "https://github.com/djpohly/dwl")
1433 (synopsis "Dynamic window manager for Wayland")
1434 (description
1435 "@command{dwl} is a compact, hackable compositor for Wayland based on
1436 wlroots. It is intended to fill the same space in the Wayland world that dwm
1437 does in X11, primarily in terms of philosophy, and secondarily in terms of
1438 functionality. Like dwm, dwl is easy to understand and hack on, due to a
1439 limited size and a few external dependencies. It is configurable via
1440 @file{config.h}.")
1441 ;; LICENSE LICENSE.dwm LICENSE.tinywl
1442 (license (list license:gpl3+ license:expat license:cc0))))
1443
1444 (define-public nitrogen
1445 (package
1446 (name "nitrogen")
1447 (version "1.6.1")
1448 (source (origin
1449 (method url-fetch)
1450 (uri (string-append "http://github.com/l3ib/nitrogen/"
1451 "releases/download/" version "/"
1452 name "-" version ".tar.gz"))
1453 (sha256
1454 (base32
1455 "0zc3fl1mbhq0iyndy4ysmy8vv5c7xwf54rbgamzfhfvsgdq160pl"))))
1456 (build-system gnu-build-system)
1457 (inputs
1458 (list gtk+-2 gtkmm-2 glib glibmm))
1459 (native-inputs
1460 (list pkg-config))
1461 (home-page "http://projects.l3ib.org/nitrogen/")
1462 (synopsis "Background browser and setter for X windows")
1463 (description
1464 "This package is a background browser and setter for X windows. It's
1465 features are:
1466
1467 @itemize
1468 @item Multihead and Xinerama aware
1469 @item Recall mode to used via startup script
1470 @item Uses freedesktop.org standard for thumbnails
1471 @item Can set GNOME background
1472 @item Command lie set modes for script use
1473 @item Inotify monitoring of browse directory
1474 @item Lazy loading of thumbnails - conserves memory
1475 @item \"Automatic\" set mode - determines best mode to set an image based on
1476 its size
1477 @item Display preview images in a tiled icon layout
1478 @end itemize")
1479 (license license:gpl2+)))
1480
1481 (define-public polybar
1482 (package
1483 (name "polybar")
1484 (version "3.6.3")
1485 (source
1486 (origin
1487 (method url-fetch)
1488 (uri (string-append "https://github.com/polybar/polybar/releases/"
1489 "download/" version "/polybar-" version ".tar.gz"))
1490 (sha256
1491 (base32 "19azx5dpfyfh0pv4q2fcrf4p7a0pc5d13m7lnv3qy8376mbmhmzj"))))
1492 (build-system cmake-build-system)
1493 (arguments
1494 ;; Test is disabled because it requires downloading googletest from the
1495 ;; Internet.
1496 (list #:tests? #f
1497 #:phases
1498 #~(modify-phases %standard-phases
1499 ;; Make polybar find its default configuration file in the
1500 ;; store.
1501 (add-after 'unpack 'patch-config-path
1502 (lambda _
1503 (substitute* "CMakeLists.txt"
1504 (("/etc") (string-append #$output "/etc")))
1505 (substitute* "src/utils/file.cpp"
1506 (("\"/etc\"") (string-append "\"" #$output "/etc\""))))))))
1507 (inputs
1508 (list alsa-lib
1509 cairo
1510 i3-wm
1511 jsoncpp
1512 libmpdclient
1513 libnl
1514 libuv
1515 libxcb
1516 pulseaudio
1517 xcb-proto
1518 xcb-util
1519 xcb-util-cursor
1520 xcb-util-image
1521 xcb-util-wm
1522 xcb-util-xrm))
1523 (native-inputs
1524 (list pkg-config
1525 python-sphinx ; for the manual
1526 python)) ; xcb-proto depends on python 3
1527 (home-page "https://polybar.github.io/")
1528 (synopsis "Fast and easy-to-use status bar")
1529 (description "Polybar aims to help users build beautiful and highly
1530 customizable status bars for their desktop environment. It has built-in
1531 functionality to display information about the most commonly used services.")
1532 (license license:expat)))
1533
1534 (define-public wlroots
1535 (package
1536 (name "wlroots")
1537 (version "0.14.1")
1538 (source
1539 (origin
1540 (method git-fetch)
1541 (uri (git-reference
1542 (url "https://github.com/swaywm/wlroots")
1543 (commit version)))
1544 (file-name (git-file-name name version))
1545 (sha256
1546 (base32 "1sshp3lvlkl1i670kxhwsb4xzxl8raz6769kqvgmxzcb63ns9ay1"))))
1547 (build-system meson-build-system)
1548 (arguments
1549 `(#:phases
1550 (modify-phases %standard-phases
1551 (add-before 'configure 'hardcode-paths
1552 (lambda* (#:key inputs #:allow-other-keys)
1553 (substitute* "xwayland/server.c"
1554 (("Xwayland") (string-append (assoc-ref inputs
1555 "xorg-server-xwayland")
1556 "/bin/Xwayland")))
1557 #t)))))
1558 (propagated-inputs
1559 (list ;; As required by wlroots.pc.
1560 eudev
1561 libinput-minimal
1562 libxkbcommon
1563 mesa
1564 pixman
1565 libseat
1566 wayland
1567 wayland-protocols
1568 xcb-util-errors
1569 xcb-util-wm
1570 xorg-server-xwayland))
1571 (native-inputs
1572 (list pkg-config))
1573 (home-page "https://github.com/swaywm/wlroots")
1574 (synopsis "Pluggable, composable, unopinionated modules for building a
1575 Wayland compositor")
1576 (description "wlroots is a set of pluggable, composable, unopinionated
1577 modules for building a Wayland compositor.")
1578 (license license:expat))) ; MIT license
1579
1580 (define-public sway
1581 (package
1582 (name "sway")
1583 (version "1.6.1")
1584 (source
1585 (origin
1586 (method git-fetch)
1587 (uri (git-reference
1588 (url "https://github.com/swaywm/sway")
1589 (commit version)))
1590 (file-name (git-file-name name version))
1591 (sha256
1592 (base32 "0j4sdbsrlvky1agacc0pcz9bwmaxjmrapjnzscbd2i0cria2fc5j"))))
1593 (build-system meson-build-system)
1594 (arguments
1595 `(;; elogind is propagated by wlroots -> libseat
1596 ;; and would otherwise shadow basu.
1597 #:configure-flags '("-Dsd-bus-provider=basu")
1598 #:phases
1599 (modify-phases %standard-phases
1600 (add-before 'configure 'hardcode-paths
1601 (lambda* (#:key inputs #:allow-other-keys)
1602 ;; Hardcode path to swaybg.
1603 (substitute* "sway/config.c"
1604 (("strdup..swaybg..")
1605 (string-append "strdup(\"" (assoc-ref inputs "swaybg")
1606 "/bin/swaybg\")")))
1607 ;; Hardcode path to scdoc.
1608 (substitute* "meson.build"
1609 (("scdoc.get_pkgconfig_variable..scdoc..")
1610 (string-append "'" (assoc-ref inputs "scdoc")
1611 "/bin/scdoc'")))
1612 #t)))))
1613 (inputs (list basu
1614 cairo
1615 gdk-pixbuf
1616 json-c
1617 libevdev
1618 libinput-minimal
1619 libxkbcommon
1620 pango
1621 swaybg
1622 wayland
1623 wlroots))
1624 (native-inputs
1625 (list linux-pam mesa pkg-config scdoc wayland-protocols))
1626 (home-page "https://github.com/swaywm/sway")
1627 (synopsis "Wayland compositor compatible with i3")
1628 (description "Sway is a i3-compatible Wayland compositor.")
1629 (license license:expat)))
1630
1631 (define-public swayidle
1632 (package
1633 (name "swayidle")
1634 (version "1.7")
1635 (source
1636 (origin
1637 (method git-fetch)
1638 (uri (git-reference
1639 (url "https://github.com/swaywm/swayidle")
1640 (commit version)))
1641 (file-name (git-file-name name version))
1642 (sha256
1643 (base32 "0ziya8d5pvvxg16jhy4i04pvq11bdvj68gz5q654ar4dldil17nn"))))
1644 (build-system meson-build-system)
1645 (arguments
1646 `(#:configure-flags '("-Dlogind-provider=elogind")))
1647 (inputs (list elogind wayland))
1648 (native-inputs (list pkg-config scdoc wayland-protocols))
1649 (home-page "https://github.com/swaywm/swayidle")
1650 (synopsis "Idle management daemon for Wayland compositors")
1651 (description "Swayidle is a idle management daemon for Wayland compositors.")
1652 (license license:expat))) ; MIT license
1653
1654 (define-public swaylock
1655 (package
1656 (name "swaylock")
1657 (version "1.6")
1658 (source
1659 (origin
1660 (method git-fetch)
1661 (uri (git-reference
1662 (url "https://github.com/swaywm/swaylock")
1663 (commit version)))
1664 (file-name (git-file-name name version))
1665 (sha256
1666 (base32 "1ihdvx6gdinzabvnazjmkk3ajrp7ngg0jzfwcjqn4hcjv64s0lam"))))
1667 (build-system meson-build-system)
1668 (inputs (list cairo gdk-pixbuf libxkbcommon
1669 ;("linux-pam" ,linux-pam) ; FIXME: Doesn't work.
1670 wayland))
1671 (native-inputs (list pango pkg-config scdoc wayland-protocols-next))
1672 (home-page "https://github.com/swaywm/sway")
1673 (synopsis "Screen locking utility for Wayland compositors")
1674 (description "Swaylock is a screen locking utility for Wayland compositors.")
1675 (license license:expat))) ; MIT license
1676
1677 (define-public swaylock-effects
1678 (package
1679 (inherit swaylock)
1680 (name "swaylock-effects")
1681 (version "1.6.10")
1682 (source
1683 (origin
1684 (method git-fetch)
1685 (uri (git-reference
1686 (url "https://github.com/jirutka/swaylock-effects")
1687 (commit (string-append "v" version))))
1688 (file-name (git-file-name name version))
1689 (sha256
1690 (base32
1691 "1d8ri7bzwfr53ybgf23acz57wyhcl2f1nqprcda1v9bzfgsqfk2n"))))
1692 (arguments
1693 (list #:configure-flags #~'("-Dsse=false")))
1694 (synopsis "Screen locking utility for Wayland compositors with effects")
1695 (description "@code{Swaylock-effects} is a fork of swaylock with additional
1696 features, such as the ability to take a screenshot as the background image,
1697 display a clock or apply image manipulation techniques to the background image.")
1698 (home-page "https://github.com/jirutka/swaylock-effects")))
1699
1700 (define-public swaybg
1701 (package
1702 (name "swaybg")
1703 (version "1.0")
1704 (source
1705 (origin
1706 (method git-fetch)
1707 (uri (git-reference
1708 (url "https://github.com/swaywm/swaybg")
1709 (commit version)))
1710 (file-name (git-file-name name version))
1711 (sha256
1712 (base32 "1lmqz5bmig90gq2m7lwf02d2g7z4hzf8fhqz78c8vk92c6p4xwbc"))))
1713 (build-system meson-build-system)
1714 (inputs (list cairo gdk-pixbuf wayland))
1715 (native-inputs (list pkg-config scdoc wayland-protocols))
1716 (home-page "https://github.com/swaywm/sway")
1717 (synopsis "Screen wallpaper utility for Wayland compositors")
1718 (description "Swaybg is a wallpaper utility for Wayland compositors.")
1719 (license license:expat))) ; MIT license
1720
1721 (define-public waybar
1722 (package
1723 (name "waybar")
1724 (version "0.9.13")
1725 (source
1726 (origin
1727 (method git-fetch)
1728 (uri (git-reference
1729 (url "https://github.com/Alexays/Waybar")
1730 (commit version)))
1731 (file-name (git-file-name name version))
1732 (sha256
1733 (base32 "15fy21cipih80amv78g7g4k2gylf107phbv0fjacn3w3n0i3cf2k"))))
1734 (build-system meson-build-system)
1735 (inputs (list date
1736 fmt
1737 gtk-layer-shell
1738 gtkmm-3
1739 jsoncpp
1740 libdbusmenu
1741 libinput-minimal
1742 libmpdclient
1743 libnl
1744 libxml2
1745 pulseaudio
1746 spdlog
1747 wayland))
1748 (native-inputs
1749 (list `(,glib "bin") pkg-config scdoc wayland-protocols))
1750 (home-page "https://github.com/Alexays/Waybar")
1751 (synopsis "Wayland bar for Sway and Wlroots based compositors")
1752 (description "Waybar is a highly customisable Wayland bar for Sway and
1753 Wlroots based compositors.")
1754 (license license:expat))) ; MIT license
1755
1756 (define-public wlr-randr
1757 (package
1758 (name "wlr-randr")
1759 (version "0.2.0")
1760 (source
1761 (origin
1762 (method git-fetch)
1763 (uri (git-reference
1764 (url "https://git.sr.ht/~emersion/wlr-randr")
1765 (commit (string-append "v" version))))
1766 (file-name (git-file-name name version))
1767 (sha256
1768 (base32 "0d44r4schknfc3g09y0kjbhl62zkynv6hi1z4zqc9ic5fhav3r15"))))
1769 (build-system meson-build-system)
1770 (inputs (list wayland))
1771 (native-inputs (list pkg-config))
1772 (home-page "https://sr.ht/~emersion/wlr-randr")
1773 (synopsis "Utility to manage Wayland compositor outputs")
1774 (description "wlr-randr is a utility to manage outputs of a Wayland compositor.")
1775 (license license:expat))) ; MIT license
1776
1777 (define-public mako
1778 (package
1779 (name "mako")
1780 (version "1.7.1")
1781 (source
1782 (origin
1783 (method git-fetch)
1784 (uri (git-reference
1785 (url "https://github.com/emersion/mako")
1786 (commit (string-append "v" version))))
1787 (file-name (git-file-name name version))
1788 (sha256
1789 (base32 "0vpar1a7zafkd2plmyaackgba6fyg35s9zzyxmj8j7v2q5zxirgz"))))
1790 (build-system meson-build-system)
1791 (inputs (list basu cairo gdk-pixbuf pango wayland))
1792 (native-inputs (list pkg-config scdoc wayland-protocols))
1793 (home-page "https://wayland.emersion.fr/mako")
1794 (synopsis "Lightweight Wayland notification daemon")
1795 (description "Mako is a lightweight notification daemon for Wayland
1796 compositors that support the layer-shell protocol.")
1797 (license license:expat))) ; MIT license
1798
1799 (define-public kanshi
1800 (package
1801 (name "kanshi")
1802 (version "1.2.0")
1803 (source
1804 (origin
1805 (method git-fetch)
1806 (uri (git-reference
1807 (url "https://git.sr.ht/~emersion/kanshi")
1808 (commit (string-append "v" version))))
1809 (file-name (git-file-name name version))
1810 (sha256
1811 (base32 "10lxagwc2pkq86g2sxkwljjd39sahp3w1j5yx853d3c4d95iwls5"))))
1812 (build-system meson-build-system)
1813 (inputs (list wayland))
1814 (native-inputs (list pkg-config scdoc))
1815 (home-page "https://wayland.emersion.fr/kanshi")
1816 (synopsis "Hotswappable output profiles for Wayland")
1817 (description "Kanshi allows you to define output profiles that are
1818 automatically enabled and disabled on hotplug. Kanshi can be used with
1819 Wayland compositors supporting the wlr-output-management protocol.")
1820 (license license:expat))) ; MIT license
1821
1822 (define-public stumpwm
1823 (package
1824 (name "stumpwm")
1825 (version "22.05")
1826 (source
1827 (origin
1828 (method git-fetch)
1829 (uri (git-reference
1830 (url "https://github.com/stumpwm/stumpwm")
1831 (commit version)))
1832 (file-name (git-file-name "stumpwm" version))
1833 (sha256
1834 (base32 "12hf70mpwy0ixiyvv8sf8pkwrzz8nb12a8ybvsdpibsxfjxgxnan"))))
1835 (build-system asdf-build-system/sbcl)
1836 (native-inputs
1837 (list sbcl-fiasco
1838 texinfo
1839
1840 ;; To build the manual.
1841 autoconf
1842 automake))
1843 (inputs
1844 (list sbcl-alexandria
1845 sbcl-cl-ppcre
1846 sbcl-clx))
1847 (outputs '("out" "lib"))
1848 (arguments
1849 (list
1850 #:phases
1851 #~(modify-phases %standard-phases
1852 (add-after 'unpack 'fix-tests
1853 (lambda _
1854 (substitute* "stumpwm-tests.asd"
1855 (("\"ALL-TESTS\"")
1856 "\"RUN-PACKAGE-TESTS\" :package"))))
1857 (add-after 'create-asdf-configuration 'build-program
1858 (lambda* (#:key outputs #:allow-other-keys)
1859 (build-program
1860 (string-append (assoc-ref outputs "out") "/bin/stumpwm")
1861 outputs
1862 #:entry-program '((stumpwm:stumpwm) 0))))
1863 (add-after 'build-program 'create-desktop-file
1864 (lambda* (#:key outputs #:allow-other-keys)
1865 (let* ((out (assoc-ref outputs "out"))
1866 (xsessions (string-append out "/share/xsessions")))
1867 (mkdir-p xsessions)
1868 (call-with-output-file
1869 (string-append xsessions "/stumpwm.desktop")
1870 (lambda (file)
1871 (format file
1872 "[Desktop Entry]~@
1873 Name=stumpwm~@
1874 Comment=The Stump Window Manager~@
1875 Exec=~a/bin/stumpwm~@
1876 TryExec=~@*~a/bin/stumpwm~@
1877 Icon=~@
1878 Type=Application~%"
1879 out))))))
1880 (add-after 'install 'install-manual
1881 (lambda* (#:key (make-flags '()) outputs #:allow-other-keys)
1882 (let* ((out (assoc-ref outputs "out"))
1883 (info (string-append out "/share/info")))
1884 (invoke "./autogen.sh")
1885 (invoke "sh" "./configure" "SHELL=sh")
1886 (apply invoke "make" "stumpwm.info" make-flags)
1887 (install-file "stumpwm.info" info)))))))
1888 (synopsis "Window manager written in Common Lisp")
1889 (description "Stumpwm is a window manager written entirely in Common Lisp.
1890 It attempts to be highly customizable while relying entirely on the keyboard
1891 for input. These design decisions reflect the growing popularity of
1892 productive, customizable lisp based systems.")
1893 (home-page "https://github.com/stumpwm/stumpwm")
1894 (license license:gpl2+)
1895 (properties `((cl-source-variant . ,(delay cl-stumpwm))))))
1896
1897 (define-public sbcl-stumpwm
1898 (deprecated-package "sbcl-stumpwm" stumpwm))
1899
1900 (define-public cl-stumpwm
1901 (package
1902 (inherit (sbcl-package->cl-source-package stumpwm))
1903 (name "cl-stumpwm")))
1904
1905 (define-public stumpwm+slynk
1906 (package
1907 (inherit stumpwm)
1908 (name "stumpwm-with-slynk")
1909 (outputs '("out"))
1910 (inputs
1911 `(("stumpwm" ,stumpwm "lib")
1912 ("slynk" ,sbcl-slynk)))
1913 (arguments
1914 (substitute-keyword-arguments (package-arguments stumpwm)
1915 ((#:phases phases)
1916 `(modify-phases ,phases
1917 (replace 'build-program
1918 (lambda* (#:key inputs outputs #:allow-other-keys)
1919 (let* ((out (assoc-ref outputs "out"))
1920 (program (string-append out "/bin/stumpwm")))
1921 (setenv "HOME" "/tmp")
1922 (build-program program outputs
1923 #:entry-program '((stumpwm:stumpwm) 0)
1924 #:dependencies '("stumpwm" "slynk")
1925 #:dependency-prefixes
1926 (map (lambda (input) (assoc-ref inputs input))
1927 '("stumpwm" "slynk")))
1928 #t)))
1929 (delete 'copy-source)
1930 (delete 'build)
1931 (delete 'check)
1932 (delete 'cleanup)))))))
1933
1934 (define stumpwm-contrib
1935 (let ((commit "d0c05077eca5257d33083de949c10bca4aac4242")
1936 (revision "4"))
1937 (package
1938 (name "stumpwm-contrib")
1939 (version (git-version "0.0.1" revision commit)) ;no upstream release
1940 (source
1941 (origin
1942 (method git-fetch)
1943 (uri (git-reference
1944 (url "https://github.com/stumpwm/stumpwm-contrib")
1945 (commit commit)))
1946 (file-name (git-file-name name version))
1947 (sha256
1948 (base32 "0zxhqh9wjfk7zas67kmwfx0a47y8rxmh8f1a5rcs300bv1083lkb"))))
1949 (build-system asdf-build-system/sbcl)
1950 (inputs
1951 `(("stumpwm" ,stumpwm "lib")))
1952 (home-page "https://github.com/stumpwm/stumpwm-contrib")
1953 (synopsis "StumpWM extra modules")
1954 (description "This package provides extra modules for StumpWM.")
1955 (license (list license:gpl2+ license:gpl3+ license:bsd-2)))))
1956
1957 (define-public stumpish
1958 (package
1959 (inherit stumpwm-contrib)
1960 (name "stumpish")
1961 (inputs
1962 (list bash rlwrap xprop))
1963 (build-system trivial-build-system)
1964 (arguments
1965 '(#:modules ((guix build utils))
1966 #:builder
1967 (begin
1968 (use-modules (guix build utils))
1969 (copy-recursively (assoc-ref %build-inputs "source") ".")
1970 (chdir "util/stumpish")
1971 (substitute* "stumpish"
1972 (("rlwrap") (search-input-file %build-inputs "/bin/rlwrap"))
1973 (("xprop") (search-input-file %build-inputs "/bin/xprop"))
1974 (("/bin/sh") (search-input-file %build-inputs "/bin/bash")))
1975 (install-file "stumpish" (string-append %output "/bin")))))
1976 (home-page "https://github.com/stumpwm/stumpwm-contrib")
1977 (synopsis "StumpWM interactive shell")
1978 (description "This package provides a StumpWM interactive shell.")
1979 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
1980
1981 (define-public sbcl-stumpwm-pamixer
1982 (let ((commit "aa820533c80ea1af5a0e107cea25eaf34e69dc24")
1983 (revision "1"))
1984 (package
1985 (name "sbcl-stumpwm-pamixer")
1986 (version (git-version "0.1.1" revision commit))
1987 (source (origin
1988 (method git-fetch)
1989 (uri (git-reference
1990 (url "https://github.com/Junker/stumpwm-pamixer")
1991 (commit commit)))
1992 (file-name (git-file-name name version))
1993 (sha256
1994 (base32
1995 "0djcrr16bx40l7b60d4j507vk5l42fdgmjpgrnk86z1ba8wlqim8"))))
1996 (inputs (list pamixer `(,stumpwm "lib")))
1997 (build-system asdf-build-system/sbcl)
1998 (arguments
1999 (list #:asd-systems ''("pamixer")
2000 #:phases
2001 #~(modify-phases %standard-phases
2002 (add-after 'unpack 'patch-pamixer
2003 (lambda _
2004 (substitute* "pamixer.lisp"
2005 (("\"pamixer \"")
2006 (string-append "\""
2007 #$(this-package-input "pamixer")
2008 "/bin/pamixer \""))))))))
2009 (home-page "https://github.com/Junker/stumpwm-pamixer")
2010 (synopsis "StumpWM Pamixer Module")
2011 (description
2012 "This package provides a minimalistic Pulseaudio volume and microphone
2013 control module for StumpWM.")
2014 (license license:gpl3))))
2015
2016 (define-public sbcl-stumpwm+slynk
2017 (deprecated-package "sbcl-stumpwm-with-slynk" stumpwm+slynk))
2018
2019 (define-public sbcl-stumpwm-ttf-fonts
2020 (package
2021 (inherit stumpwm-contrib)
2022 (name "sbcl-stumpwm-ttf-fonts")
2023 (inputs
2024 `(("stumpwm" ,stumpwm "lib")
2025 ("clx-truetype" ,sbcl-clx-truetype)))
2026 (arguments
2027 '(#:asd-systems '("ttf-fonts")
2028 #:tests? #f
2029 #:phases
2030 (modify-phases %standard-phases
2031 (add-after 'unpack 'chdir
2032 (lambda _ (chdir "util/ttf-fonts") #t)))))
2033 (home-page "https://github.com/stumpwm/stumpwm-contrib")
2034 (synopsis "Implementation of TTF font rendering for Lisp")
2035 (description "This package provides a Lisp implementation of TTF font
2036 rendering.")
2037 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
2038
2039 (define-public sbcl-stumpwm-pass
2040 (package
2041 (inherit stumpwm-contrib)
2042 (name "sbcl-stumpwm-pass")
2043 (arguments
2044 '(#:asd-systems '("pass")
2045 #:tests? #f
2046 #:phases
2047 (modify-phases %standard-phases
2048 (add-after 'unpack 'chdir
2049 (lambda _ (chdir "util/pass") #t)))))
2050 (home-page "https://github.com/stumpwm/stumpwm-contrib")
2051 (synopsis "Integrate @code{pass} with StumpWM")
2052 (description "This package provides an interface which integrates
2053 password-store into StumpWM.")
2054 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
2055
2056 (define-public sbcl-stumpwm-globalwindows
2057 (package
2058 (inherit stumpwm-contrib)
2059 (name "sbcl-stumpwm-globalwindows")
2060 (arguments
2061 '(#:asd-systems '("globalwindows")
2062 #:tests? #f
2063 #:phases
2064 (modify-phases %standard-phases
2065 (add-after 'unpack 'chdir
2066 (lambda _ (chdir "util/globalwindows") #t)))))
2067 (home-page "https://github.com/stumpwm/stumpwm-contrib")
2068 (synopsis "Manipulate all windows in the current X session")
2069 (description "This package provides a StumpWM module to manipulate all
2070 windows in the current X session.")
2071 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
2072
2073 (define-public sbcl-stumpwm-swm-gaps
2074 (package
2075 (inherit stumpwm-contrib)
2076 (name "sbcl-stumpwm-swm-gaps")
2077 (arguments
2078 '(#:asd-systems '("swm-gaps")
2079 #:tests? #f
2080 #:phases
2081 (modify-phases %standard-phases
2082 (add-after 'unpack 'chdir
2083 (lambda _ (chdir "util/swm-gaps") #t)))))
2084 (home-page "https://github.com/stumpwm/stumpwm-contrib")
2085 (synopsis "Gaps between windows for StumpWM")
2086 (description "This package provides a StumpWM module which adds gaps
2087 between windows.")
2088 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
2089
2090 (define-public sbcl-stumpwm-net
2091 (package
2092 (inherit stumpwm-contrib)
2093 (name "sbcl-stumpwm-net")
2094 (arguments
2095 '(#:asd-systems '("net")
2096 #:tests? #f
2097 #:phases
2098 (modify-phases %standard-phases
2099 (add-after 'unpack 'chdir (lambda _ (chdir "modeline/net") #t)))))
2100 (home-page
2101 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/net")
2102 (synopsis "Modeline support for network connectivity")
2103 (description "Modeline support for network connectivity.")
2104 (supported-systems
2105 (filter (lambda (a) (string-contains a "linux")) %supported-systems))
2106 (license license:gpl3+)))
2107
2108 (define-public sbcl-stumpwm-wifi
2109 (package
2110 (inherit stumpwm-contrib)
2111 (name "sbcl-stumpwm-wifi")
2112 (arguments
2113 '(#:asd-systems '("wifi")
2114 #:tests? #f
2115 #:phases
2116 (modify-phases %standard-phases
2117 (add-after 'unpack 'chdir (lambda _ (chdir "modeline/wifi") #t)))))
2118 (home-page
2119 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/wifi")
2120 (synopsis "Modeline support for wifi connectivity")
2121 (description "Modeline support for wifi connectivity.")
2122 (supported-systems
2123 (filter (lambda (a) (string-contains a "linux")) %supported-systems))
2124 (license license:gpl3+)))
2125
2126 (define-public sbcl-stumpwm-stumptray
2127 (package
2128 (inherit stumpwm-contrib)
2129 (name "sbcl-stumpwm-stumptray")
2130 (arguments
2131 '(#:asd-systems '("stumptray")
2132 #:tests? #f
2133 #:phases
2134 (modify-phases %standard-phases
2135 (add-after 'unpack 'chdir (lambda _ (chdir "modeline/stumptray") #t)))))
2136 (inputs
2137 `(("stumpwm" ,stumpwm "lib")
2138 ("xembed" ,sbcl-clx-xembed)
2139 ("alexandria" ,sbcl-alexandria)))
2140 (home-page
2141 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/stumptray")
2142 (synopsis "Modeline support for stumptray connectivity")
2143 (description "Modeline support for stumptray connectivity.")
2144 (supported-systems
2145 (filter (lambda (a) (string-contains a "linux")) %supported-systems))
2146 (license license:gpl3+)))
2147
2148 (define-public sbcl-stumpwm-kbd-layouts
2149 (package
2150 (inherit stumpwm-contrib)
2151 (name "sbcl-stumpwm-kbd-layouts")
2152 (arguments
2153 '(#:asd-systems '("kbd-layouts")
2154 #:asd-operation "compile-system"
2155 #:tests? #f
2156 #:phases
2157 (modify-phases %standard-phases
2158 (add-after 'unpack 'chdir (lambda _ (chdir "util/kbd-layouts") #t)))))
2159 (home-page
2160 "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/kbd-layouts")
2161 (synopsis "Keyboard layout switcher for StumpWM")
2162 (description "Keyboard layout switcher for StumpWM")
2163 (license license:gpl3+)))
2164
2165 (define-public sbcl-stumpwm-numpad-layouts
2166 (package
2167 (inherit stumpwm-contrib)
2168 (name "sbcl-stumpwm-numpad-layouts")
2169 (arguments
2170 '(#:asd-systems '("numpad-layouts")
2171 #:tests? #f
2172 #:phases
2173 (modify-phases %standard-phases
2174 (add-after 'unpack 'chdir
2175 (lambda _
2176 (chdir "util/numpad-layouts"))))))
2177 (home-page
2178 "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/numpad-layouts")
2179 (synopsis "Keyboard numpad layouts for StumpWM")
2180 (description "This is a module for handling different keyboards numpad
2181 layouts in StumpWM.")
2182 (license license:gpl3+)))
2183
2184 (define-public sbcl-stumpwm-cpu
2185 (package
2186 (inherit stumpwm-contrib)
2187 (name "sbcl-stumpwm-cpu")
2188 (arguments
2189 '(#:asd-systems '("cpu")
2190 #:tests? #f
2191 #:phases
2192 (modify-phases %standard-phases
2193 (add-after 'unpack 'chdir
2194 (lambda _
2195 (chdir "modeline/cpu"))))))
2196 (home-page
2197 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/cpu")
2198 (synopsis "Modeline support for CPU info")
2199 (description "Modeline support for CPU info.")
2200 (license license:gpl3+)))
2201
2202 (define-public sbcl-stumpwm-disk
2203 (package
2204 (inherit stumpwm-contrib)
2205 (name "sbcl-stumpwm-disk")
2206 (arguments
2207 '(#:asd-systems '("disk")
2208 #:tests? #f
2209 #:phases
2210 (modify-phases %standard-phases
2211 (add-after 'unpack 'chdir
2212 (lambda _ (chdir "modeline/disk") #t)))))
2213 (inputs
2214 `(("stumpwm" ,stumpwm "lib")
2215 ("cl-diskspace" ,sbcl-cl-diskspace)
2216 ("cl-mount-info" ,sbcl-cl-mount-info)))
2217 (home-page "https://github.com/stumpwm/stumpwm-contrib")
2218 (synopsis "StumpWM modeline support to show disk usage")
2219 (description "StumpWM modeline support to show disk usage")
2220 (license (list license:gpl2+ license:gpl3+))))
2221
2222 (define-public sbcl-stumpwm-mem
2223 (package
2224 (inherit stumpwm-contrib)
2225 (name "sbcl-stumpwm-mem")
2226 (arguments
2227 '(#:asd-systems '("mem")
2228 #:tests? #f
2229 #:phases
2230 (modify-phases %standard-phases
2231 (add-after 'unpack 'chdir
2232 (lambda _
2233 (chdir "modeline/mem"))))))
2234 (home-page
2235 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/mem")
2236 (synopsis "Modeline support for memory info")
2237 (description "Modeline support for memory info.")
2238 (license license:gpl3+)))
2239
2240 (define-public sbcl-stumpwm-winner-mode
2241 (package
2242 (inherit stumpwm-contrib)
2243 (name "sbcl-stumpwm-winner-mode")
2244 (arguments
2245 '(#:asd-systems '("winner-mode")
2246 #:tests? #f
2247 #:phases
2248 (modify-phases %standard-phases
2249 (add-after 'unpack 'chdir
2250 (lambda _
2251 (chdir "util/winner-mode"))))))
2252 (home-page
2253 "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/winner-mode")
2254 (synopsis "Emacs' winner-mode for StumpWM")
2255 (description "This module provides a winner-mode for StumpWM similar to the
2256 one in Emacs.")
2257 (license license:gpl3+)))
2258
2259 (define-public sbcl-stumpwm-screenshot
2260 (package
2261 (inherit stumpwm-contrib)
2262 (name "sbcl-stumpwm-screenshot")
2263 (inputs
2264 `(("stumpwm" ,stumpwm "lib")
2265 ("zpng" ,sbcl-zpng)))
2266 (arguments
2267 '(#:asd-systems '("screenshot")
2268 #:tests? #f
2269 #:phases
2270 (modify-phases %standard-phases
2271 (add-after 'unpack 'chdir
2272 (lambda _
2273 (chdir "util/screenshot")))
2274 (add-after 'chdir 'fix-build
2275 (lambda _
2276 (substitute* "screenshot.asd"
2277 (("#:zpng")
2278 "#:stumpwm #:zpng")))))))
2279 (home-page
2280 "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/screenshot")
2281 (synopsis "Screenshots for StumpWM")
2282 (description "This StumpWM module can take screenshots and store them as
2283 PNG files.")
2284 (license license:gpl3+)))
2285
2286 (define-public sbcl-stumpwm-notify
2287 (package
2288 (inherit stumpwm-contrib)
2289 (name "sbcl-stumpwm-notify")
2290 (build-system asdf-build-system/sbcl)
2291 (inputs
2292 (list sbcl-bordeaux-threads
2293 sbcl-dbus
2294 sbcl-xml-emitter
2295 (list stumpwm "lib")))
2296 (arguments
2297 '(#:asd-systems '("notify")
2298 #:phases
2299 (modify-phases %standard-phases
2300 (add-after 'unpack 'chdir
2301 (lambda _ (chdir "util/notify"))))))
2302 (home-page "https://github.com/stumpwm/stumpwm-contrib")
2303 (synopsis "Notifications server for StumpWM")
2304 (description "This module implements org.freedesktop.Notifications
2305 interface[fn:dbus-spec]. It shows notifications using stumpwm:message
2306 by default.")
2307 (license license:gpl3+)))
2308
2309 (define-public lemonbar
2310 (package
2311 (name "lemonbar")
2312 (version "1.4")
2313 (source (origin
2314 (method git-fetch)
2315 (uri (git-reference
2316 (url "https://github.com/LemonBoy/bar")
2317 (commit (string-append "v" version))))
2318 (file-name (git-file-name name version))
2319 (sha256
2320 (base32
2321 "0sm1lxxf0y2n87nvc8mz6i6mzb32f4qab80ppb28ibrwfir6jsln"))))
2322 (build-system gnu-build-system)
2323 (arguments
2324 (list
2325 #:tests? #f ;no test suite
2326 #:make-flags
2327 #~(list #$(string-append "CC=" (cc-for-target))
2328 (string-append "PREFIX=" #$output))
2329 #:phases
2330 #~(modify-phases %standard-phases
2331 (delete 'configure))))
2332 (inputs
2333 (list libxcb))
2334 (native-inputs
2335 (list perl))
2336 (home-page "https://github.com/LemonBoy/bar")
2337 (synopsis "Featherweight status bar")
2338 (description
2339 "@code{lemonbar} (formerly known as @code{bar}) is a lightweight
2340 bar entirely based on XCB. Provides full UTF-8 support, basic
2341 formatting, RandR and Xinerama support and EWMH compliance without
2342 wasting your precious memory.")
2343 (license license:x11)))
2344
2345 (define-public lemonbar-xft
2346 ;; Upstream v2.0 tag is several years behind HEAD
2347 (let ((commit "481e12363e2a0fe0ddd2176a8e003392be90ed02"))
2348 (package
2349 (inherit lemonbar)
2350 (name "lemonbar-xft")
2351 (version (string-append "2.0." (string-take commit 7)))
2352 (source (origin
2353 (method git-fetch)
2354 (uri (git-reference
2355 (url "https://github.com/drscream/lemonbar-xft")
2356 (commit commit)))
2357 (file-name (git-file-name name version))
2358 (sha256
2359 (base32
2360 "0588g37h18lv50h7w8vfbwhvc3iajh7sdr53848spaif99nh3mh4"))))
2361 (inputs
2362 (modify-inputs (package-inputs lemonbar)
2363 (prepend freetype libxft libx11)))
2364 (arguments
2365 (substitute-keyword-arguments (package-arguments lemonbar)
2366 ((#:make-flags make-flags)
2367 #~(#$@make-flags
2368 (format #f "CFLAGS=~a -DVERSION='~s'"
2369 (string-append
2370 "-I" #$(this-package-input "freetype")
2371 "/include/freetype2")
2372 #$version)))))
2373 (home-page "https://github.com/drscream/lemonbar-xft")
2374 (synopsis
2375 (string-append
2376 (package-synopsis lemonbar)
2377 " with fontconfig support"))
2378 (description
2379 (string-append
2380 (package-description lemonbar)
2381 "This is a fork of the @code{lemonbar} package that adds fontconfig
2382 support, for easier unicode usage.")))))
2383
2384 (define-public xclickroot
2385 (package
2386 (name "xclickroot")
2387 (version "1.3")
2388 (source (origin
2389 (method git-fetch)
2390 (uri (git-reference
2391 (url "https://github.com/phillbush/xclickroot")
2392 (commit (string-append "v" version))))
2393 (file-name (git-file-name name version))
2394 (sha256
2395 (base32
2396 "0wnsfxvh4v02r2jjyh2n6jfkbj2dna2hlm6anl4b36lwji749k2k"))))
2397 (build-system gnu-build-system)
2398 (inputs
2399 (list libx11))
2400 (arguments
2401 `(#:tests? #f ;no test suite
2402 #:make-flags
2403 (list ,(string-append "CC=" (cc-for-target))
2404 (string-append "PREFIX=" %output))
2405 #:phases
2406 (modify-phases %standard-phases
2407 (delete 'configure))))
2408 (home-page "https://github.com/phillbush/xclickroot")
2409 (synopsis "Run a command when a mouse button is pressed on the root window")
2410 (description "@code{xclickroot} runs a command every time a given mouse
2411 button is pressed on the root window.")
2412 (license license:public-domain)))
2413
2414 (define-public xinitrc-xsession
2415 (let ((commit "cbfc77a1ccaf07b7d8a35f4d8007c7102f365374")
2416 (revision "0"))
2417 (package
2418 (name "xinitrc-xsession")
2419 (version (git-version "1" revision commit))
2420 (source
2421 (origin
2422 (method git-fetch)
2423 (uri (git-reference
2424 (url "https://aur.archlinux.org/xinit-xsession.git")
2425 (commit commit)))
2426 (file-name (git-file-name name version))
2427 (sha256
2428 (base32 "12nv3qyjhy2l9mcb547f414d8bj79mhdhsra0g8x7x71b1xxl15b"))))
2429 (build-system copy-build-system)
2430 (arguments
2431 (list
2432 #:phases
2433 #~(modify-phases %standard-phases
2434 (add-after 'install 'patch-xsession-file
2435 (lambda _
2436 (let* ((xinitrc-desktop
2437 (string-append #$output "/share/xsessions/xinitrc.desktop"))
2438 (xinitrc-helper
2439 (string-append #$output "/bin/xinitrcsession-helper")))
2440 (substitute* xinitrc-desktop
2441 (("Exec=xinitrcsession-helper")
2442 (string-append "Exec=" xinitrc-helper)))))))
2443 #:install-plan
2444 #~(list '("xinitrcsession-helper" "bin/")
2445 '("xinitrc.desktop" "share/xsessions/"))))
2446 (home-page "https://aur.archlinux.org/packages/xinit-xsession/")
2447 (synopsis "Use ~/.xinitrc as an xsession from your display manager")
2448 (description
2449 "Xinitrc-xsession allows @code{~/.xinitrc} to be run as a session from
2450 your display manager. Make @code{~/.xinitrc} executable and use this package
2451 in your system configuration have this xsession available to your display
2452 manager.")
2453 (license license:gpl3))))
2454
2455 (define-public xmenu
2456 (package
2457 (name "xmenu")
2458 (version "4.5.5")
2459 (source (origin
2460 (method git-fetch)
2461 (uri (git-reference
2462 (url "https://github.com/phillbush/xmenu")
2463 (commit (string-append "v" version))))
2464 (file-name (git-file-name name version))
2465 (sha256
2466 (base32
2467 "0qgxkrv9jnnnf3px7zh0paf8xsr4bcpf0f2nq9zy012m214223hs"))))
2468 (build-system gnu-build-system)
2469 (inputs
2470 (list libx11 libxinerama libxft freetype imlib2))
2471 (arguments
2472 `(#:tests? #f ;no test suite
2473 #:make-flags
2474 (list (string-append "CC=" ,(cc-for-target))
2475 (string-append "PREFIX=" %output)
2476 (string-append "CFLAGS="
2477 "-I" (assoc-ref %build-inputs "freetype")
2478 "/include/freetype2"))
2479 #:phases
2480 (modify-phases %standard-phases
2481 (delete 'configure))))
2482 (home-page "https://github.com/phillbush/xmenu")
2483 (synopsis "Menu utility for X")
2484 (description "@code{xmenu} receives a menu specification in stdin, shows
2485 a menu for the user to select one of the options, and outputs the option
2486 selected to stdout. It can be controlled both via mouse and via keyboard.")
2487 (license license:public-domain)))
2488
2489 (define-public idesk
2490 (package
2491 (name "idesk")
2492 (version "0.7.5")
2493 (source
2494 (origin
2495 (method url-fetch)
2496 (uri (string-append
2497 "mirror://sourceforge/idesk/idesk/idesk-" version
2498 "/idesk-" version ".tar.bz2"))
2499 (sha256
2500 (base32
2501 "1lxk2yvgysxwl514zc82lwr1dwc8cd62slgr5lzdhjbdrxfymdyl"))
2502 (modules '((guix build utils)
2503 (ice-9 format)))
2504 (snippet
2505 '(let* ((file "src/DesktopConfig.cpp")
2506 (template (string-append file ".XXXXXX"))
2507 (out (mkstemp! template))
2508 (st (stat file))
2509 (mode (stat:mode st)))
2510 (call-with-ascii-input-file file
2511 (lambda (p)
2512 (format out "~{~a~%~}" '("#include <unistd.h>"
2513 "#include <sys/stat.h>"
2514 "#include <sys/types.h>"))
2515 (dump-port p out)
2516 (close out)
2517 (chmod template mode)
2518 (rename-file template file)
2519 #t))))))
2520 (build-system gnu-build-system)
2521 (inputs
2522 (list libx11
2523 libxft
2524 libxpm
2525 libpng
2526 freetype
2527 imlib2-1.7
2528 sed))
2529 (native-inputs
2530 (list pkg-config))
2531 (arguments
2532 `(#:tests? #f)) ;no test suite
2533 (home-page "https://sourceforge.net/projects/idesk/")
2534 (synopsis "Add icons on X desktop and set background image for wallpaper")
2535 (description "Idesk is program that draws desktop icons. Each icon will
2536 execute a shell command on a configurable action. The icons can be moved on
2537 the desktop by dragging them, and the icons will remember their positions on
2538 start-up.")
2539 (license license:bsd-3)))
2540
2541 (define-public xnotify
2542 (package
2543 (name "xnotify")
2544 (version "0.8.1")
2545 (source (origin
2546 (method git-fetch)
2547 (uri (git-reference
2548 (url "https://github.com/phillbush/xnotify")
2549 (commit (string-append "v" version))))
2550 (file-name (git-file-name name version))
2551 (sha256
2552 (base32
2553 "1jxms4md2mwfjgm2pgg3vakpp33800jbn9hnl0j4jyfc9f1ckbsv"))))
2554 (build-system gnu-build-system)
2555 (inputs
2556 (list libx11 libxft libxinerama imlib2))
2557 (arguments
2558 `(#:make-flags
2559 (list (string-append "CC=" ,(cc-for-target))
2560 (string-append "PREFIX=" %output)
2561 (string-append "CFLAGS="
2562 "-I" (assoc-ref %build-inputs "freetype")
2563 "/include/freetype2"))
2564 #:tests? #f ;no test suite
2565 #:phases
2566 (modify-phases %standard-phases
2567 (delete 'configure))))
2568 (home-page "https://github.com/phillbush/xnotify")
2569 (synopsis "Displays a notification on the screen")
2570 (description "XNotify receives a notification specification in stdin and
2571 shows a notification for the user on the screen.")
2572 (license license:expat)))
2573
2574 (define-public cagebreak
2575 (package
2576 (name "cagebreak")
2577 (version "1.8.0")
2578 (source (origin
2579 (method git-fetch)
2580 (uri (git-reference
2581 (url "https://github.com/project-repo/cagebreak")
2582 (commit version)))
2583 (file-name (git-file-name name version))
2584 (sha256
2585 (base32
2586 "0296mnzk7qd0zvnhw716jvpp7madjsar373ixx4qcff0m0jwfrxm"))))
2587 (build-system meson-build-system)
2588 (arguments '(#:configure-flags '("-Dxwayland=true")))
2589 (native-inputs
2590 (list pandoc pkg-config))
2591 (inputs
2592 (list libevdev pango wlroots))
2593 (home-page "https://github.com/project-repo/cagebreak")
2594 (synopsis "Tiling wayland compositor inspired by ratpoison")
2595 (description
2596 "@command{cagebreak} is a slim, keyboard-controlled, tiling compositor
2597 for wayland conceptually based on the X11 window manager
2598 @command{ratpoison}.")
2599 (license license:expat)))
2600
2601 (define-public libucl
2602 (package
2603 (name "libucl")
2604 (version "0.8.1")
2605 (source
2606 (origin
2607 (method git-fetch)
2608 (uri (git-reference
2609 (url "https://github.com/vstakhov/libucl/")
2610 (commit version)))
2611 (file-name (git-file-name name version))
2612 (sha256
2613 (base32
2614 "1h52ldxankyhbbm1qbqz1f2q0j03c1b4mig7343bs3mc6fpm18gf"))))
2615 (native-inputs
2616 (list autoconf automake pkg-config libtool))
2617 (build-system gnu-build-system)
2618 (arguments
2619 `(#:tests? #f)) ;; no tests
2620 (home-page "https://github.com/vstakhov/libucl")
2621 (synopsis "Universal configuration language (UCL) parser")
2622 (description "libucl implements a configuration language that is easy to
2623 read and write, and compatible with JSON.")
2624 (license license:bsd-2)))
2625
2626 (define-public hikari
2627 (package
2628 (name "hikari")
2629 (version "2.3.2")
2630 (source
2631 (origin
2632 (method url-fetch)
2633 (uri (string-append "https://hikari.acmelabs.space/releases/"
2634 "hikari-" version ".tar.gz"))
2635 (sha256
2636 (base32 "1jvy21irh6s7czff2hk63spswqibjcjhrpsgmrki5bii9ddi73wy"))))
2637 (build-system gnu-build-system)
2638 (native-inputs
2639 (list bmake pkg-config wayland-protocols))
2640 (inputs
2641 `(("cairo" ,cairo)
2642 ("libinput" ,libinput-minimal)
2643 ("libucl" ,libucl)
2644 ("libxkbcommon" ,libxkbcommon)
2645 ("pam" ,linux-pam)
2646 ("pango" ,pango)
2647 ("wayland" ,wayland)
2648 ("wlroots" ,wlroots)))
2649 (arguments
2650 `(#:tests? #f ; no tests
2651 #:make-flags
2652 (list
2653 (string-append "PREFIX=" (assoc-ref %outputs "out"))
2654 (string-append "CC=" ,(cc-for-target))
2655 "WITH_XWAYLAND=YES"
2656 "WITH_SCREENCOPY=YES"
2657 "WITH_LAYERSHELL=YES"
2658 "WITH_VIRTUAL_INPUT=YES")
2659 #:phases
2660 (modify-phases %standard-phases
2661 (delete 'configure)
2662 (replace 'build
2663 (lambda* (#:key inputs outputs make-flags #:allow-other-keys)
2664 (apply invoke "bmake" make-flags)))
2665 (replace 'install
2666 (lambda* (#:key inputs outputs make-flags #:allow-other-keys)
2667 (apply invoke "bmake" "install" make-flags))))))
2668 (home-page "https://hikari.acmelabs.space/")
2669 (synopsis "Stacking Wayland compositor with tiling capabilities")
2670 (description
2671 "Hikari is a stacking Wayland compositor with additional tiling
2672 capabilities. It is heavily inspired by the Calm Window manager(cwm).")
2673 (license license:bsd-2)))
2674
2675 (define-public devour
2676 (package
2677 (name "devour")
2678 (version "12")
2679 (source
2680 (origin
2681 (method git-fetch)
2682 (uri (git-reference
2683 (url "https://github.com/salman-abedin/devour")
2684 (commit version)))
2685 (file-name (git-file-name name version))
2686 (sha256
2687 (base32 "1qq5l6d0fn8azg7sj7a4m2jsmhlpswl5793clcxs1p34vy4wb2lp"))))
2688 (build-system gnu-build-system)
2689 (inputs
2690 (list libx11))
2691 (arguments
2692 `(#:tests? #f ;no tests
2693 #:phases
2694 (modify-phases %standard-phases
2695 (delete 'configure)) ;no configure script
2696 #:make-flags
2697 (list (string-append "CC=" ,(cc-for-target))
2698 (string-append "BIN_DIR=" %output "/bin"))))
2699 (home-page "https://github.com/salman-abedin/devour")
2700 (synopsis "X11 window swallower")
2701 (description
2702 "@command{devour} hides your current window before launching an external
2703 program and unhides it after quitting.")
2704 (license license:gpl2)))
2705
2706 (define-public trayer-srg
2707 (package
2708 (name "trayer-srg")
2709 (version "1.1.8")
2710 (source
2711 (origin
2712 (method git-fetch)
2713 (uri (git-reference
2714 (url "https://github.com/sargon/trayer-srg")
2715 (commit (string-append "trayer-" version))))
2716 (file-name (git-file-name name version))
2717 (sha256
2718 (base32
2719 "1mvhwaqa9bng9wh3jg3b7y8gl7nprbydmhg963xg0r076jyzv0cg"))))
2720 (native-inputs
2721 (list libxmu pkg-config))
2722 (inputs
2723 (list libx11 gdk-pixbuf gtk+-2))
2724 (build-system gnu-build-system)
2725 (arguments
2726 `(#:tests? #f ; There are no tests.
2727 #:make-flags
2728 (let ((out (assoc-ref %outputs "out")))
2729 (list (string-append "CC=" ,(cc-for-target))
2730 (string-append "PREFIX=" %output)))
2731 #:phases
2732 (modify-phases %standard-phases
2733 (replace 'configure
2734 (lambda* (#:key configure-flags #:allow-other-keys)
2735 (apply invoke "./configure" configure-flags))))))
2736 (home-page "https://github.com/sargon/trayer-srg")
2737 (synopsis "Minimal GTK based system tray")
2738 (description
2739 "@command{trayer} is small program designed to provide systray
2740 functionality present in GNOME/KDE desktop environments for window managers
2741 which do not support it.")
2742 (license license:expat)))
2743
2744 (define-public wlogout
2745 (package
2746 (name "wlogout")
2747 (version "1.1.1")
2748 (source (origin
2749 (method git-fetch)
2750 (uri (git-reference
2751 (url "https://github.com/ArtsyMacaw/wlogout")
2752 (commit version)))
2753 (file-name (git-file-name name version))
2754 (sha256
2755 (base32
2756 "1swhzkqkzli59c89pvrakfvicd00x7ga860c3x2pbb4y3xziqfvi"))))
2757 (build-system meson-build-system)
2758 (native-inputs
2759 (list pkg-config scdoc))
2760 (inputs
2761 (list gtk-layer-shell gtk+))
2762 (arguments
2763 '(#:tests? #f
2764 #:phases
2765 (modify-phases %standard-phases
2766 (add-after 'unpack 'patch-source-paths
2767 (lambda* (#:key outputs #:allow-other-keys)
2768 (let ((out (assoc-ref outputs "out")))
2769 (substitute* "main.c"
2770 (("/usr/share") (string-append out "/share"))
2771 (("/etc") (string-append out "/etc"))))
2772 #t)))))
2773 (home-page "https://github.com/ArtsyMacaw/wlogout")
2774 (synopsis "Logout menu for Wayland")
2775 (description "wlogout is a logout menu for Wayland environments.")
2776 (license license:expat)))
2777
2778 (define-public berry
2779 (package
2780 (name "berry")
2781 (version "0.1.11")
2782 (source
2783 (origin
2784 (method git-fetch)
2785 (uri (git-reference
2786 (url "https://github.com/jlervin/berry")
2787 (commit version)))
2788 (file-name (git-file-name name version))
2789 (sha256
2790 (base32 "1qyq3g0m7rb9gpk1i5kfy9nr8sqivjiilbi4g0nw4d400rblvkbj"))))
2791 (build-system gnu-build-system)
2792 (arguments
2793 `(#:tests? #f ; There are no tests.
2794 #:make-flags
2795 ,#~(list (string-append "CC=" #$(cc-for-target))
2796 (string-append "prefix=" #$output)
2797 (string-append "CFLAGS="
2798 "-I" (assoc-ref %build-inputs "freetype")
2799 "/include/freetype2"))
2800 #:phases
2801 (modify-phases %standard-phases
2802 (delete 'configure)
2803 (add-after 'build 'install-xsession
2804 (lambda* (#:key outputs #:allow-other-keys)
2805 (let* ((output (assoc-ref outputs "out"))
2806 (xsessions (string-append output "/share/xsessions")))
2807 (mkdir-p xsessions)
2808 (with-output-to-file (string-append xsessions "/berry.desktop")
2809 (lambda _
2810 (format #t
2811 "\
2812 [Desktop Entry]~@
2813 Name=berry~@
2814 Comment=Berry Window Manager~@
2815 Exec=~a/bin/berry~@
2816 TryExec=~@*~a/bin/berry~@
2817 Icon=~@
2818 Type=Application~%"
2819 output)))))))))
2820 (native-inputs
2821 (list pkg-config))
2822 (inputs
2823 (list freetype
2824 fontconfig
2825 libxext
2826 libx11
2827 libxft
2828 libxinerama))
2829 (home-page "https://berrywm.org/")
2830 (synopsis "Healthy, byte-sized window manager")
2831 (description
2832 "@code{berry} is a healthy, bite-sized window manager written in C using XLib.")
2833 (license license:expat)))
2834
2835 (define-public avizo
2836 (package
2837 (name "avizo")
2838 (version "1.2.1")
2839 (source (origin
2840 (method git-fetch)
2841 (uri (git-reference
2842 (url "https://github.com/misterdanb/avizo")
2843 (commit version)))
2844 (file-name (git-file-name name version))
2845 (sha256
2846 (base32
2847 "0ddv5ssxfjbzhqskbbhi9qj1yqkraiv3r8svfmp9s5nnfpid8aba"))))
2848 (build-system meson-build-system)
2849 (inputs (list gtk+))
2850 (native-inputs
2851 (list vala
2852 `(,glib "bin")
2853 gobject-introspection
2854 gtk-layer-shell
2855 pkg-config))
2856 (home-page "https://github.com/misterdanb/avizo")
2857 (synopsis "Notification daemon for Sway")
2858 (description
2859 "Avizo is a simple notification daemon for Sway, mainly intended to be
2860 used for multimedia keys.")
2861 (license license:gpl3+)))
2862
2863 (define-public grimshot
2864 (package
2865 (inherit sway)
2866 (name "grimshot")
2867 (source (origin
2868 (inherit (package-source sway))
2869 (snippet #~(delete-file "contrib/grimshot.1"))))
2870 (build-system copy-build-system)
2871 (arguments
2872 (list #:install-plan #~`(("grimshot" "bin/")
2873 ("grimshot.1" "usr/share/man/man1/"))
2874 #:phases #~(modify-phases %standard-phases
2875 (add-after 'unpack 'chdir
2876 (lambda _
2877 (chdir "contrib")))
2878 (add-after 'chdir 'patch-script-dependencies
2879 (lambda* (#:key inputs #:allow-other-keys)
2880 (substitute* "grimshot"
2881 (("\\b(date|grim|jq|notify-send|slurp|swaymsg|wl-copy)\\b"
2882 _ binary)
2883 (search-input-file
2884 inputs (string-append "bin/" binary))))))
2885 (add-after 'patch-script-dependencies 'build-man-page
2886 (lambda _
2887 (with-input-from-file "grimshot.1.scd"
2888 (lambda _
2889 (with-output-to-file "grimshot.1"
2890 (lambda _
2891 (invoke "scdoc"))))))))))
2892 (native-inputs (list scdoc))
2893 (inputs (list coreutils
2894 grim
2895 jq
2896 libnotify
2897 slurp
2898 sway
2899 wl-clipboard))
2900 (synopsis "Screenshot utility for the Sway window manager")
2901 (description "Grimshot is a screenshot utility for @code{sway}. It provides
2902 an interface over @code{grim}, @code{slurp} and @code{jq}, and supports storing
2903 the screenshot either directly to the clipboard using @code{wl-copy} or to a
2904 file.")))