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