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