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