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