ddc6905c82536f6c5ab46b702ac8091ca36745f0
[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 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 ng0 <ng0@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 Marius Bakke <mbakke@fastmail.com>
17 ;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
18 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
19 ;;; Copyright © 2018 Pierre-Antoine Rouby <contact@parouby.fr>
20 ;;; Copyright © 2018 Meiyo Peng <meiyo.peng@gmail.com>
21 ;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com>
22 ;;; Copyright © 2019 Timothy Sample <samplet@ngyro.com>
23 ;;;
24 ;;; This file is part of GNU Guix.
25 ;;;
26 ;;; GNU Guix is free software; you can redistribute it and/or modify it
27 ;;; under the terms of the GNU General Public License as published by
28 ;;; the Free Software Foundation; either version 3 of the License, or (at
29 ;;; your option) any later version.
30 ;;;
31 ;;; GNU Guix is distributed in the hope that it will be useful, but
32 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
33 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
34 ;;; GNU General Public License for more details.
35 ;;;
36 ;;; You should have received a copy of the GNU General Public License
37 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
38
39 (define-module (gnu packages wm)
40 #:use-module ((guix licenses) #:prefix license:)
41 #:use-module (guix packages)
42 #:use-module (gnu packages)
43 #:use-module (gnu packages linux)
44 #:use-module (guix build-system cmake)
45 #:use-module (guix build-system gnu)
46 #:use-module (guix build-system haskell)
47 #:use-module (guix build-system meson)
48 #:use-module (guix build-system perl)
49 #:use-module (guix build-system python)
50 #:use-module (gnu packages haskell)
51 #:use-module (gnu packages haskell-check)
52 #:use-module (gnu packages haskell-web)
53 #:use-module (gnu packages autotools)
54 #:use-module (gnu packages bison)
55 #:use-module (gnu packages gawk)
56 #:use-module (gnu packages base)
57 #:use-module (gnu packages pkg-config)
58 #:use-module (gnu packages perl)
59 #:use-module (gnu packages pulseaudio)
60 #:use-module (gnu packages xorg)
61 #:use-module (gnu packages xdisorg)
62 #:use-module (gnu packages documentation)
63 #:use-module (gnu packages xml)
64 #:use-module (gnu packages m4)
65 #:use-module (gnu packages docbook)
66 #:use-module (gnu packages image)
67 #:use-module (gnu packages pcre)
68 #:use-module (gnu packages python)
69 #:use-module (gnu packages gtk)
70 #:use-module (gnu packages libevent)
71 #:use-module (gnu packages fribidi)
72 #:use-module (gnu packages maths)
73 #:use-module (gnu packages web)
74 #:use-module (gnu packages fontutils)
75 #:use-module (gnu packages freedesktop)
76 #:use-module (gnu packages glib)
77 #:use-module (gnu packages gperf)
78 #:use-module (gnu packages imagemagick)
79 #:use-module (gnu packages lua)
80 #:use-module (gnu packages linux)
81 #:use-module (gnu packages suckless)
82 #:use-module (gnu packages mpd)
83 #:use-module (gnu packages gl)
84 #:use-module (gnu packages video)
85 #:use-module (gnu packages version-control)
86 #:use-module (gnu packages man)
87 #:use-module (gnu packages textutils)
88 #:use-module (guix download)
89 #:use-module (guix git-download))
90
91 (define-public bspwm
92 (package
93 (name "bspwm")
94 (version "0.9.5")
95 (source
96 (origin
97 (method git-fetch)
98 (uri (git-reference
99 (url "https://github.com/baskerville/bspwm.git")
100 (commit version)))
101 (file-name (git-file-name name version))
102 (sha256
103 (base32 "09h3g1rxxjyw861mk32lj774nmwkx8cwxq4wfgmf4dpbizymvhhr"))))
104 (build-system gnu-build-system)
105 (inputs
106 `(("libxcb" ,libxcb)
107 ("libxinerama" ,libxinerama)
108 ("sxhkd" ,sxhkd)
109 ("xcb-util" ,xcb-util)
110 ("xcb-util-keysyms" ,xcb-util-keysyms)
111 ("xcb-util-wm" ,xcb-util-wm)))
112 (arguments
113 '(#:phases
114 (modify-phases %standard-phases
115 (delete 'configure)) ; no configure script
116 #:tests? #f ; no check target
117 #:make-flags
118 (list "CC=gcc"
119 (string-append "PREFIX=" %output))))
120 (home-page "https://github.com/baskerville/bspwm")
121 (synopsis "Tiling window manager based on binary space partitioning")
122 (description "bspwm is a tiling window manager that represents windows as
123 the leaves of a full binary tree.")
124 (license license:bsd-2)))
125
126 (define-public i3status
127 (package
128 (name "i3status")
129 (version "2.12")
130 (source (origin
131 (method url-fetch)
132 (uri (string-append "https://i3wm.org/i3status/i3status-"
133 version ".tar.bz2"))
134 (sha256
135 (base32
136 "06krpbijv4yi33nypg6qcn4hilcrdyarsdpd9fmr2cq46qaqiikg"))))
137 (build-system gnu-build-system)
138 (arguments
139 `(#:make-flags (list "CC=gcc" (string-append "PREFIX=" %output))
140 #:phases
141 (modify-phases %standard-phases
142 (delete 'configure))
143 #:tests? #f)) ; no test suite
144 (inputs
145 `(("openlibm" ,openlibm)
146 ("libconfuse" ,libconfuse)
147 ("libyajl" ,libyajl)
148 ("alsa-lib" ,alsa-lib)
149 ("pulseaudio" ,pulseaudio)
150 ("libnl" ,libnl)
151 ("libcap" ,libcap)
152 ("asciidoc" ,asciidoc)))
153 (native-inputs
154 `(("pkg-config" ,pkg-config)))
155 (home-page "https://i3wm.org/i3status/")
156 (synopsis "Status bar for i3bar, dzen2, xmobar or similar programs")
157 (description "i3status is a small program for generating a status bar for
158 i3bar, dzen2, xmobar or similar programs. It is designed to be very efficient
159 by issuing a very small number of system calls, as one generally wants to
160 update such a status line every second. This ensures that even under high
161 load, your status bar is updated correctly. Also, it saves a bit of energy by
162 not hogging your CPU as much as spawning the corresponding amount of shell
163 commands would.")
164 (license license:bsd-3)))
165
166 (define-public i3-wm
167 (package
168 (name "i3-wm")
169 (version "4.16.1")
170 (source (origin
171 (method url-fetch)
172 (uri (string-append "https://i3wm.org/downloads/i3-"
173 version ".tar.bz2"))
174 (sha256
175 (base32
176 "0xl56y196vxv001gvx35xwfr25zah8m3xwizp9ycdgdc0rfc4rdb"))))
177 (build-system gnu-build-system)
178 (arguments
179 `(#:configure-flags
180 ;; The build system tries to build in a separate directory, but that
181 ;; seems to be unnecessary.
182 (list "--disable-builddir")
183
184 ;; The test suite requires the unpackaged Xephyr X server.
185 #:tests? #f
186 #:phases
187 (modify-phases %standard-phases
188 (add-after 'install 'patch-session-file
189 (lambda* (#:key outputs #:allow-other-keys)
190 (let* ((out (assoc-ref outputs "out"))
191 (i3 (string-append out "/bin/i3"))
192 (i3-with-shmlog (string-append out "/bin/i3-with-shmlog")))
193 (substitute* (string-append out "/share/xsessions/i3.desktop")
194 (("Exec=i3") (string-append "Exec=" i3)))
195 (substitute* (string-append out "/share/xsessions/i3-with-shmlog.desktop")
196 (("Exec=i3-with-shmlog") (string-append "Exec=" i3-with-shmlog)))
197 #t))))))
198 (inputs
199 `(("libxcb" ,libxcb)
200 ("xcb-util" ,xcb-util)
201 ("xcb-util-cursor" ,xcb-util-cursor)
202 ("xcb-util-keysyms" ,xcb-util-keysyms)
203 ("xcb-util-wm" ,xcb-util-wm)
204 ("xcb-util-xrm" ,xcb-util-xrm)
205 ("libxkbcommon" ,libxkbcommon)
206 ("libev" ,libev)
207 ("libyajl" ,libyajl)
208 ("asciidoc" ,asciidoc)
209 ("xmlto" ,xmlto)
210 ("perl-pod-simple" ,perl-pod-simple)
211 ("libx11" ,libx11)
212 ("pcre" ,pcre)
213 ("startup-notification" ,startup-notification)
214 ("pango" ,pango)
215 ("cairo" ,cairo)))
216 (native-inputs
217 `(("which" ,which)
218 ("perl" ,perl)
219 ("pkg-config" ,pkg-config)
220 ;; For building the documentation.
221 ("libxml2" ,libxml2)
222 ("docbook-xsl" ,docbook-xsl)))
223 (home-page "https://i3wm.org/")
224 (synopsis "Tiling window manager")
225 (description "i3 is a tiling X11 window manager that dynamically manages
226 tiled, stacked, and tabbed window layouts.
227
228 i3 primarily targets advanced users. Windows are managed manually and organised
229 inside containers, which can be split vertically or horizontally, and optionally
230 resized.
231
232 i3 uses a plain-text configuration file, and can be extended and controlled from
233 many programming languages.")
234 (license license:bsd-3)))
235
236 (define-public i3lock
237 (package
238 (name "i3lock")
239 (version "2.11.1")
240 (source (origin
241 (method url-fetch)
242 (uri (string-append "https://i3wm.org/i3lock/i3lock-"
243 version ".tar.bz2"))
244 (sha256
245 (base32
246 "015dn534m7cxjvqdncpvaq9p8b2r4w5hp1yanbdy2abmhbcc7a7j"))))
247 (build-system gnu-build-system)
248 (native-inputs
249 `(("pkg-config" ,pkg-config)))
250 (inputs
251 `(("cairo" ,cairo)
252 ("libev" ,libev)
253 ("linux-pam" ,linux-pam)
254 ("libxcb" ,libxcb)
255 ("libxkbcommon" ,libxkbcommon)
256 ("xcb-util" ,xcb-util)
257 ("xcb-util-image" ,xcb-util-image)
258 ("xcb-util-xrm" ,xcb-util-xrm)))
259 (home-page "https://i3wm.org/i3lock/")
260 (synopsis "Lightweight screen locker")
261 (description
262 "i3lock is a simple X11 screen locker developed alongside the i3 project.
263 Despite the name it should work with any X11 window manager.")
264 (license license:bsd-3)))
265
266 (define-public i3blocks
267 (let ((commit "37f23805ff886639163fbef8aedba71c8071eff8")
268 (revision "1"))
269 (package
270 (name "i3blocks")
271 (version (string-append "1.4-" revision "."
272 (string-take commit 7)))
273 (source (origin
274 (method git-fetch)
275 (uri (git-reference
276 (url "https://github.com/vivien/i3blocks.git")
277 (commit commit)))
278 (sha256
279 (base32
280 "15rnrcajzyrmhlz1a21qqsjlj3dkib70806dlb386fliylc2kisb"))
281 (file-name (git-file-name name version))))
282 (build-system gnu-build-system)
283 (arguments
284 `(#:make-flags (list "CC=gcc" (string-append "PREFIX=" %output))
285 #:phases (modify-phases %standard-phases
286 (add-after 'unpack 'autogen
287 (lambda _ (invoke "sh" "autogen.sh")))
288 (add-after 'install 'install-doc
289 (lambda* (#:key outputs #:allow-other-keys)
290 (let* ((out (assoc-ref outputs "out"))
291 (man1 (string-append out "/share/man/man1")))
292 (install-file "docs/i3blocks.1" man1)
293 #t))))))
294 (native-inputs
295 `(("autoconf" ,autoconf)
296 ("automake" ,automake)
297 ("pkg-config" ,pkg-config)))
298 (home-page "https://github.com/vivien/i3blocks")
299 (synopsis "Minimalist scheduler for status bar scripts")
300 (description "i3blocks executes your command lines and generates a
301 status line from their output. The generated line is meant to be displayed by
302 the i3 window manager through its i3bar component, as an alternative to
303 i3status.")
304 (license license:gpl3+))))
305
306 (define-public perl-anyevent-i3
307 (package
308 (name "perl-anyevent-i3")
309 (version "0.17")
310 (source (origin
311 (method url-fetch)
312 (uri (string-append "mirror://cpan/authors/id/M/MS/MSTPLBG/"
313 "AnyEvent-I3-" version ".tar.gz"))
314 (sha256
315 (base32
316 "0qvd9bq16jyy7v3ma82qcnvz9j503bw0mh7h55gkjf7ir62ck0jk"))))
317 (build-system perl-build-system)
318 (propagated-inputs
319 `(("perl-anyevent" ,perl-anyevent)
320 ("perl-json-xs" ,perl-json-xs)))
321 (home-page "https://metacpan.org/release/AnyEvent-I3")
322 (synopsis
323 "Communicate with the i3 window manager through perl")
324 (description
325 "This module connects to the i3 window manager using the UNIX socket
326 based IPC interface it provides (if enabled in the configuration file).
327 You can then subscribe to events or send messages and receive their replies.")
328 ;; Can be used with either license.
329 (license (list license:gpl3+ license:perl-license))))
330
331 (define-public python-i3-py
332 (package
333 (name "python-i3-py")
334 (version "0.6.5")
335 (source
336 (origin
337 ;; The latest release is not tagged in Git nor has an entry in PyPi,
338 ;; but there is still a clear commit for it, and it's been the last one
339 ;; for years.
340 (method git-fetch)
341 (uri (git-reference
342 (url "https://github.com/ziberna/i3-py.git")
343 (commit "27f88a616e9ecc340e7d041d3d00782f8a1964c1")))
344 (sha256
345 (base32
346 "1nm719dc2xqlll7vj4c4m7mpjb27lpn3bg3c66gajvnrz2x1nmxs"))
347 (file-name (string-append name "-" version "-checkout"))))
348 (build-system python-build-system)
349 (arguments
350 `(#:tests? #f ; no tests yet
351 #:phases (modify-phases %standard-phases
352 (add-after 'install 'install-doc
353 ;; Copy readme file to documentation directory.
354 (lambda* (#:key outputs #:allow-other-keys)
355 (let ((doc (string-append (assoc-ref outputs "out")
356 "/share/doc/" ,name)))
357 (install-file "README.md" doc)
358 ;; Avoid unspecified return value.
359 #t))))))
360 (propagated-inputs
361 `(("i3-wm" ,i3-wm)))
362 (home-page "https://github.com/ziberna/i3-py")
363 (synopsis "Python interface to the i3 window manager")
364 (description "This package allows you to interact from a Python program
365 with the i3 window manager via its IPC socket. It can send commands and other
366 kinds of messages to i3, select the affected containers, filter results and
367 subscribe to events.")
368 (license license:gpl3+)))
369
370 (define-public python2-i3-py
371 (package-with-python2 python-i3-py))
372
373 (define-public quickswitch-i3
374 (let ((commit "ed692b1e8f43b95bd907ced26238ce8ccb2ed28f")
375 (revision "1")) ; Guix package revision
376 (package
377 (name "quickswitch-i3")
378 (version (string-append "2.2-" revision "."
379 (string-take commit 7)))
380 (source
381 (origin
382 ;; The latest commit is a few years old and just a couple commits
383 ;; after the last tagged release, so we use that latest commit
384 ;; instead of the release.
385 (method git-fetch)
386 (uri (git-reference
387 (url "https://github.com/proxypoke/quickswitch-for-i3.git")
388 (commit commit)))
389 (sha256
390 (base32
391 "0447077sama80jcdg5p64zjsvafmz5rbdrirhm1adcdjhkh6iqc5"))
392 (patches (search-patches "quickswitch-fix-dmenu-check.patch"))
393 (file-name (string-append name "-" version "-checkout"))))
394 (build-system python-build-system)
395 (arguments
396 `(#:tests? #f ; no tests yet
397 #:phases (modify-phases %standard-phases
398 (add-after 'install 'install-doc
399 ;; Copy readme file to documentation directory.
400 (lambda* (#:key outputs #:allow-other-keys)
401 (let ((doc (string-append (assoc-ref outputs "out")
402 "/share/doc/" ,name)))
403 (install-file "README.rst" doc)
404 ;; Avoid unspecified return value.
405 #t))))))
406 (inputs
407 `(("python-i3-py" ,python-i3-py)
408 ("dmenu" ,dmenu)))
409 (home-page "https://github.com/proxypoke/quickswitch-for-i3")
410 (synopsis "Quickly change to and locate windows in the i3 window manager")
411 (description
412 "This utility for the i3 window manager allows you to quickly switch to
413 and locate windows on all your workspaces, using an interactive dmenu
414 prompt.")
415 (license (license:non-copyleft "http://www.wtfpl.net/txt/copying/")))))
416
417 (define-public i3lock-color
418 (package
419 (name "i3lock-color")
420 (version "2.12.c")
421 (source
422 (origin
423 (method git-fetch)
424 (uri (git-reference
425 (url "https://github.com/PandorasFox/i3lock-color.git")
426 (commit version)))
427 (file-name (git-file-name name version))
428 (sha256
429 (base32 "08fhnchf187b73h52xgzb86g6byzxz085zs9galsvl687g5zxk34"))))
430 (build-system gnu-build-system)
431 (arguments
432 `(#:tests? #f)) ; no tests included
433 (inputs
434 `(("cairo" ,cairo)
435 ("libev" ,libev)
436 ("libjpeg" ,libjpeg-turbo)
437 ("libxcb" ,libxcb)
438 ("libxkbcommon" ,libxkbcommon)
439 ("linux-pam" ,linux-pam)
440 ("xcb-util" ,xcb-util)
441 ("xcb-util-image" ,xcb-util-image)
442 ("xcb-util-xrm" ,xcb-util-xrm)))
443 (native-inputs
444 `(("autoconf" ,autoconf)
445 ("automake" ,automake)
446 ("pkg-config" ,pkg-config)))
447 (home-page "https://github.com/PandorasFox/i3lock-color")
448 (synopsis "Screen locker with color configuration support")
449 (description
450 "i3lock-color is a simpler X11 screen locker derived from i3lock.
451 Features include:
452
453 @enumerate
454 @item forking process, the locked screen is preserved when you suspend to RAM;
455 @item specify background color or image to be displayed in the lock screen;
456 @item many additional color options.
457 @end enumerate")
458 (license license:bsd-3)))
459
460 (define-public i3lock-fancy
461 (package
462 (name "i3lock-fancy")
463 (version "0.2")
464 (source
465 (origin
466 (method git-fetch)
467 (uri (git-reference
468 (url "https://github.com/meskarune/i3lock-fancy.git")
469 (commit version)))
470 (file-name (git-file-name name version))
471 (sha256
472 (base32 "11g2kkim33ra38d1m897sq1ifajw17iyw9mr7sg1q8i2ibl4lfsi"))))
473 (build-system gnu-build-system)
474 (arguments
475 `(#:tests? #f ; no tests included
476 #:phases
477 (modify-phases %standard-phases
478 (replace 'configure
479 (lambda* (#:key inputs outputs #:allow-other-keys)
480 (let* ((out (assoc-ref outputs "out"))
481 (icons (string-append out "/share/i3lock-fancy/icons/"))
482 (wmctrl (string-append (assoc-ref inputs "wmctrl")
483 "/bin/wmctrl"))
484 (mconvert (string-append (assoc-ref inputs "imagemagick")
485 "/bin/convert"))
486 (mimport (string-append (assoc-ref inputs "imagemagick")
487 "/bin/import"))
488 (awk (string-append (assoc-ref inputs "gawk")
489 "/bin/gawk")))
490
491 (substitute* "lock"
492 (("$(which wmctrl)") wmctrl)
493 (("convert") mconvert)
494 (("shot=\\(import") (string-append "shot=\(" mimport))
495 (("awk -F") (string-append awk " -F"))
496 ((" awk") awk)
497 (("\\$scriptpath/icons/") icons))
498 #t)))
499 (delete 'build)
500 (replace 'install
501 (lambda* (#:key inputs outputs #:allow-other-keys)
502 (let* ((out (assoc-ref outputs "out"))
503 (bin (string-append out "/bin"))
504 (icons (string-append out "/share/i3lock-fancy/icons/")))
505
506 (install-file "lock" bin)
507 (rename-file (string-append bin "/lock")
508 (string-append bin "/i3lock-fancy"))
509 (copy-recursively "icons" icons)
510 #t))))))
511 (native-inputs
512 `(("imagemagick" ,imagemagick)
513 ("wmctrl" ,wmctrl)
514 ("gawk" ,gawk)))
515 (home-page "https://github.com/meskarune/i3lock-fancy")
516 (synopsis "Screen locker with screenshot function")
517 (description
518 "@code{i3lock-fancy} is a Bash script that takes a screenshot of
519 the desktop, blurs the background and adds a lock icon and text.
520 It requires @code{i3lock-color} or @code{i3lock} and can optionally
521 be passed any screenshot util like @code{scrot}.
522 This screen locker can be used with any window manager or
523 desktop environment.")
524 (license license:expat)))
525
526 (define-public xmonad
527 (package
528 (name "xmonad")
529 (version "0.15")
530 (synopsis "Tiling window manager")
531 (source (origin
532 (method url-fetch)
533 (uri (string-append "mirror://hackage/package/xmonad/"
534 "xmonad-" version ".tar.gz"))
535 (sha256
536 (base32
537 "0a7rh21k9y6g8fwkggxdxjns2grvvsd5hi2ls4klmqz5xvk4hyaa"))))
538 (build-system haskell-build-system)
539 (inputs
540 `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
541 ("ghc-quickcheck" ,ghc-quickcheck)
542 ("ghc-semigroups" ,ghc-semigroups)
543 ("ghc-setlocale" ,ghc-setlocale)
544 ("ghc-utf8-string" ,ghc-utf8-string)
545 ("ghc-x11" ,ghc-x11)))
546 (arguments
547 `(#:phases
548 (modify-phases %standard-phases
549 (add-after
550 'install 'install-xsession
551 (lambda _
552 (let* ((xsessions (string-append %output "/share/xsessions")))
553 (mkdir-p xsessions)
554 (call-with-output-file
555 (string-append xsessions "/xmonad.desktop")
556 (lambda (port)
557 (format port "~
558 [Desktop Entry]~@
559 Name=~a~@
560 Comment=~a~@
561 Exec=~a/bin/xmonad~@
562 Type=Application~%" ,name ,synopsis %output)))))))))
563 (home-page "https://xmonad.org")
564 (description
565 "Xmonad is a tiling window manager for X. Windows are arranged
566 automatically to tile the screen without gaps or overlap, maximising screen
567 use. All features of the window manager are accessible from the keyboard: a
568 mouse is strictly optional. Xmonad is written and extensible in Haskell.
569 Custom layout algorithms, and other extensions, may be written by the user in
570 config files. Layouts are applied dynamically, and different layouts may be
571 used on each workspace. Xinerama is fully supported, allowing windows to be
572 tiled on several screens.")
573 (license license:bsd-3)))
574
575 (define-public xmobar
576 (package
577 (name "xmobar")
578 (version "0.28")
579 (source (origin
580 (method url-fetch)
581 (uri (string-append "mirror://hackage/package/xmobar/"
582 "xmobar-" version ".tar.gz"))
583 (sha256
584 (base32
585 "1xh87asg8y35srvp7d3gyyy4bkxsw122liihxgzgm8pqv2z3h4zd"))))
586 (build-system haskell-build-system)
587 (native-inputs
588 `(("ghc-hspec" ,ghc-hspec)
589 ("hspec-discover" ,hspec-discover)))
590 (inputs
591 `(("ghc-hinotify" ,ghc-hinotify)
592 ("ghc-http" ,ghc-http)
593 ("ghc-iwlib" ,ghc-iwlib)
594 ("ghc-parsec" ,ghc-parsec)
595 ("ghc-parsec-numbers" ,ghc-parsec-numbers)
596 ("ghc-regex-compat" ,ghc-regex-compat)
597 ("ghc-stm" ,ghc-stm)
598 ("ghc-x11-xft" ,ghc-x11-xft)
599 ("libxpm" ,libxpm)))
600 (arguments
601 `(#:configure-flags
602 (list (string-append "--flags="
603 (string-join (list "with_inotify"
604 "with_iwlib"
605 "with_utf8"
606 "with_weather"
607 "with_xft"
608 "with_xpm")
609 " ")))))
610 (home-page "http://xmobar.org")
611 (synopsis "Minimalistic text based status bar")
612 (description
613 "@code{xmobar} is a lightweight, text-based, status bar written in
614 Haskell. It was originally designed to be used together with Xmonad, but it
615 is also usable with any other window manager. While xmobar is written in
616 Haskell, no knowledge of the language is required to install and use it.")
617 (license license:bsd-3)))
618
619 (define-public ghc-xmonad-contrib
620 (package
621 (name "ghc-xmonad-contrib")
622 (version "0.15")
623 (source
624 (origin
625 (method url-fetch)
626 (uri (string-append "mirror://hackage/package/xmonad-contrib/"
627 "xmonad-contrib-" version ".tar.gz"))
628 (sha256
629 (base32 "0r9yzgy67j4mi3dyxx714f0ssk5qzca5kh4zw0fhiz1pf008cxms"))))
630 (build-system haskell-build-system)
631 (propagated-inputs
632 `(("ghc-old-time" ,ghc-old-time)
633 ("ghc-random" ,ghc-random)
634 ("ghc-utf8-string" ,ghc-utf8-string)
635 ("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
636 ("ghc-semigroups" ,ghc-semigroups)
637 ("ghc-x11" ,ghc-x11)
638 ("ghc-x11-xft" ,ghc-x11-xft)
639 ("xmonad" ,xmonad)))
640 (home-page "https://xmonad.org")
641 (synopsis "Third party extensions for xmonad")
642 (description
643 "Third party tiling algorithms, configurations, and scripts to Xmonad, a
644 tiling window manager for X.")
645 (license license:bsd-3)))
646
647 (define-public evilwm
648 (package
649 (name "evilwm")
650 (version "1.1.1")
651 (source
652 (origin
653 (method url-fetch)
654 (uri (string-append "http://www.6809.org.uk/evilwm/evilwm-"
655 version ".tar.gz"))
656 (sha256
657 (base32
658 "0ak0yajzk3v4dg5wmaghv6acf7v02a4iw8qxmq5yw5ard8lrqn3r"))
659 (patches (search-patches "evilwm-lost-focus-bug.patch"))))
660 (build-system gnu-build-system)
661 (inputs
662 `(("libx11" ,libx11)
663 ("libxext" ,libxext)
664 ("libxrandr" ,libxrandr)))
665 (arguments
666 `(#:modules ((srfi srfi-26)
667 (guix build utils)
668 (guix build gnu-build-system))
669 #:make-flags (let ((inputs (map (cut assoc-ref %build-inputs <>)
670 '("libx11" "libxext" "libxrandr")))
671 (join (lambda (proc strs)
672 (string-join (map proc strs) " ")))
673 (dash-I (cut string-append "-I" <> "/include"))
674 (dash-L (cut string-append "-L" <> "/lib")))
675 `("desktopfilesdir=$(prefix)/share/xsessions"
676 ,(string-append "prefix=" (assoc-ref %outputs "out"))
677 ,(string-append "CPPFLAGS=" (join dash-I inputs))
678 ,(string-append "LDFLAGS=" (join dash-L inputs))))
679 #:tests? #f ;no tests
680 #:phases (modify-phases %standard-phases
681 (delete 'configure)))) ;no configure script
682 (home-page "http://www.6809.org.uk/evilwm/")
683 (synopsis "Minimalist window manager for the X Window System")
684 (description
685 "evilwm is a minimalist window manager based on aewm, extended to feature
686 many keyboard controls with repositioning and maximize toggles, solid window
687 drags, snap-to-border support, and virtual desktops.")
688 (license (license:x11-style "file:///README"))))
689
690 (define-public fluxbox
691 (package
692 (name "fluxbox")
693 (version "1.3.7")
694 (synopsis "Small and fast window manager")
695 (source (origin
696 (method url-fetch)
697 (uri (string-append "mirror://sourceforge/fluxbox/fluxbox/"
698 version "/fluxbox-" version ".tar.xz"))
699 (sha256
700 (base32
701 "1h1f70y40qd225dqx937vzb4k2cz219agm1zvnjxakn5jkz7b37w"))))
702 (build-system gnu-build-system)
703 (arguments
704 `(#:make-flags '("CPPFLAGS=-U__TIME__") ;ugly, but for reproducibility
705 #:phases
706 (modify-phases %standard-phases
707 (add-after 'install 'install-vim-files
708 (lambda* (#:key outputs #:allow-other-keys)
709 (let* ((out (assoc-ref outputs "out"))
710 (syntax (string-append out "/share/vim/vimfiles/syntax")))
711 (copy-recursively "3rd/vim/vim/syntax" syntax)
712 #t)))
713 (add-after 'install 'install-xsession
714 (lambda* (#:key outputs #:allow-other-keys)
715 (let* ((out (assoc-ref outputs "out"))
716 (xsessions (string-append out "/share/xsessions")))
717 (mkdir-p xsessions)
718 (call-with-output-file
719 (string-append xsessions "/fluxbox.desktop")
720 (lambda (port)
721 (format port "~
722 [Desktop Entry]~@
723 Name=~a~@
724 Comment=~a~@
725 Exec=~a/bin/startfluxbox~@
726 Type=Application~%" ,name ,synopsis out)))
727 #t))))))
728 (native-inputs
729 `(("pkg-config" ,pkg-config)))
730 (inputs
731 `(("freetype" ,freetype)
732 ("fribidi" ,fribidi)
733 ("imlib2" ,imlib2)
734 ("libx11" ,libx11)
735 ("libxext" ,libxext)
736 ("libxft" ,libxft)
737 ("libxinerama" ,libxinerama)
738 ("libxpm" ,libxpm)
739 ("libxrandr" ,libxrandr)
740 ("libxrender" ,libxrender)))
741 (description "Fluxbox is a window manager. It is light on resources
742 and easy to handle yet full of features to make an easy and fast desktop
743 experience.")
744 (home-page "http://fluxbox.org/")
745 (license license:expat)))
746
747 (define-public awesome
748 (package
749 (name "awesome")
750 (version "4.2")
751 (source
752 (origin (method url-fetch)
753 (uri (string-append
754 "https://github.com/awesomeWM/awesome-releases/raw/"
755 "master/awesome-" version ".tar.xz"))
756 (sha256
757 (base32
758 "0kwpbls9h1alxcmvxh5g9qb995fds5b2ngcr44w0ibazkyls2pdc"))
759 (modules '((guix build utils)
760 (srfi srfi-19)))
761 (snippet '(begin
762 ;; Remove non-reproducible timestamp and use the date
763 ;; of the source file instead.
764 (substitute* "common/version.c"
765 (("__DATE__ \" \" __TIME__")
766 (date->string
767 (time-utc->date
768 (make-time time-utc 0
769 (stat:mtime (stat "awesome.c"))))
770 "\"~c\"")))
771 #t))
772 (patches (search-patches "awesome-reproducible-png.patch"))))
773 (build-system cmake-build-system)
774 (native-inputs `(("asciidoc" ,asciidoc)
775 ("docbook-xsl" ,docbook-xsl)
776 ("doxygen" ,doxygen)
777 ("gperf" ,gperf)
778 ("imagemagick" ,imagemagick)
779 ("libxml2" ,libxml2) ;for XML_CATALOG_FILES
780 ("pkg-config" ,pkg-config)
781 ("xmlto" ,xmlto)))
782 (inputs `(("cairo" ,cairo)
783 ("dbus" ,dbus)
784 ("gdk-pixbuf" ,gdk-pixbuf)
785 ("glib" ,glib)
786 ("gobject-introspection" ,gobject-introspection)
787 ("imlib2" ,imlib2)
788 ("libev" ,libev)
789 ("libxcb" ,libxcb)
790 ("libxcursor" ,libxcursor)
791 ("libxdg-basedir" ,libxdg-basedir)
792 ("libxkbcommon" ,libxkbcommon)
793 ("lua" ,lua)
794 ("lua-lgi" ,lua-lgi)
795 ("pango" ,pango)
796 ("startup-notification" ,startup-notification)
797 ("xcb-util" ,xcb-util)
798 ("xcb-util-cursor" ,xcb-util-cursor)
799 ("xcb-util-image" ,xcb-util-image)
800 ("xcb-util-keysyms" ,xcb-util-keysyms)
801 ("xcb-util-renderutil" ,xcb-util-renderutil)
802 ("xcb-util-xrm" ,xcb-util-xrm)
803 ("xcb-util-wm" ,xcb-util-wm)))
804 (arguments
805 `(;; Let compression happen in our 'compress-documentation' phase so that
806 ;; '--no-name' is used, which removes timestamps from gzip output.
807 #:configure-flags '("-DCOMPRESS_MANPAGES=off")
808
809 ;; Building awesome in its source dir is no longer supported.
810 #:out-of-source? #t
811
812 #:phases
813 (modify-phases %standard-phases
814 (add-before 'build 'xmlto-skip-validation
815 (lambda _
816 ;; We can't download the necessary schema, so so skip
817 ;; validation and assume they're valid.
818 (substitute* "../build/CMakeFiles/man.dir/build.make"
819 (("/xmlto")
820 (string-append "/xmlto --skip-validation")))
821 #t))
822 (add-before 'configure 'set-lua-paths
823 (lambda* (#:key inputs #:allow-other-keys)
824 ;; The build process needs to load cairo dynamically.
825 (let* ((cairo (string-append
826 (assoc-ref inputs "cairo") "/lib" ))
827 (lua-lgi (assoc-ref inputs "lua-lgi") ))
828 (setenv "LD_LIBRARY_PATH" cairo )
829 (setenv "LUA_PATH" (string-append lua-lgi
830 "/share/lua/5.2/?.lua"))
831 (setenv "LUA_CPATH" (string-append lua-lgi
832 "/lib/lua/5.2/?.so"))
833 #t)))
834 (replace 'check
835 (lambda _
836 ;; There aren't any tests, so just make sure the binary
837 ;; gets built and can be run successfully.
838 (invoke "../build/awesome" "-v")))
839 (add-after 'install 'patch-session-file
840 (lambda* (#:key outputs #:allow-other-keys)
841 (let* ((out (assoc-ref outputs "out"))
842 (awesome (string-append out "/bin/awesome")))
843 (substitute* (string-append out "/share/xsessions/awesome.desktop")
844 (("Exec=awesome") (string-append "Exec=" awesome)))
845 #t)))
846 (add-after 'install 'wrap
847 (lambda* (#:key inputs outputs #:allow-other-keys)
848 (let* ((awesome (assoc-ref outputs "out"))
849 (cairo (string-append
850 (assoc-ref inputs "cairo") "/lib" ))
851 (lua-lgi (assoc-ref inputs "lua-lgi") ))
852 (wrap-program (string-append awesome "/bin/awesome")
853 `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))
854 `("LD_LIBRARY_PATH" suffix (, cairo))
855 `("LUA_PATH" suffix (,(string-append lua-lgi
856 "/share/lua/5.2/?.lua")))
857 `("LUA_CPATH" suffix (,(string-append
858 lua-lgi "/lib/lua/5.2/?.so"))))))))))
859 (synopsis "Highly configurable window manager")
860 (description
861 "Awesome has been designed as a framework window manager. It is fast, small,
862 dynamic and extensible using the Lua programming language.")
863 (license license:gpl2+)
864 (home-page "https://awesomewm.org/")))
865
866 (define-public menumaker
867 (package
868 (name "menumaker")
869 (version "0.99.10")
870 (source
871 (origin
872 (method url-fetch)
873 (uri (string-append "mirror://sourceforge/menumaker/"
874 "menumaker-" version ".tar.gz"))
875 (sha256
876 (base32
877 "1mm4cvg3kphkkd8nwrhcg6d9nm5ar7mgc0wf6fxk6zck1l7xn8ky"))))
878 (build-system gnu-build-system)
879 (inputs
880 `(("python" ,python)))
881 (synopsis "Heuristics-driven menu generator")
882 (description
883 "MenuMaker is a menu generation utility for a number of X window
884 managers and desktop environments. It is capable of finding lots of
885 installed programs and generating a root menu consistent across all
886 supported window managers, so one will get (almost) the same menu in
887 all of them. Currently supported window managers include:
888
889 @enumerate
890 @item BlackBox
891 @item Deskmenu
892 @item FluxBox
893 @item IceWM
894 @item OpenBox
895 @item PekWM
896 @item WindowMaker
897 @item XFCE
898 @end enumerate\n")
899 (home-page "http://menumaker.sourceforge.net/")
900 (license license:bsd-2)))
901
902 (define-public keybinder
903 (package
904 (name "keybinder")
905 (version "0.3.1")
906 (source
907 (origin
908 (method url-fetch)
909 (uri (string-append "https://github.com/kupferlauncher/keybinder"
910 "/releases/download/v" version "/keybinder-"
911 version ".tar.gz"))
912 (file-name (string-append name "-" version ".tar.gz"))
913 (sha256
914 (base32
915 "0h52hj3ay8mfhwvmfxbxlfyq74hifdk8wxgxp7fr4iy6189hg7w7"))))
916 (build-system gnu-build-system)
917 (inputs
918 `(("python-2" ,python-2)
919 ("gtk+-2" ,gtk+-2)))
920 (native-inputs
921 `(("python2-pygtk" ,python2-pygtk)
922 ("gtk-doc" ,gtk-doc)
923 ("pkg-config" ,pkg-config)))
924 (synopsis "Library for registering global keyboard shortcuts")
925 (description
926 "Keybinder is a library for registering global keyboard shortcuts.
927 Keybinder works with GTK-based applications using the X Window System.")
928 (home-page "https://github.com/kupferlauncher/keybinder")
929 (license license:gpl2+)))
930
931 (define-public spectrwm
932 (package
933 (name "spectrwm")
934 (version "3.2.0")
935 (source
936 (origin
937 (method url-fetch)
938 (uri (let ((version-with-underscores
939 (string-join (string-split version #\.) "_")))
940 (string-append "https://github.com/conformal/spectrwm/archive/"
941 "SPECTRWM_" version-with-underscores ".tar.gz")))
942 (file-name (string-append name "-" version ".tar.gz"))
943 (sha256
944 (base32
945 "0z7gjmp1x6y8q3dnw6swvbv8x2wd4ykzjvi3ibk2sxhgc910907v"))))
946 (build-system gnu-build-system)
947 (arguments
948 `(#:make-flags (let ((pkg-config (lambda (flag)
949 (string-append
950 "$(shell pkg-config " flag " "
951 "xft fontconfig x11 libpng)"))))
952 (list
953 "CC=gcc"
954 (string-append "PREFIX=" %output)
955 (string-append "INCS=-I. " (pkg-config "--cflags"))
956 (string-append "LIBS=" (pkg-config "--libs") " -lm")))
957 #:tests? #f ;no test suite
958 #:phases
959 (modify-phases %standard-phases
960 (add-before 'build 'change-dir
961 (lambda _
962 (chdir "linux") #t))
963 (add-after 'change-dir 'patch-makefile
964 (lambda _
965 (substitute* "Makefile"
966 (("-g") ""))))
967 (delete 'configure)))) ;no 'configure' exists
968 (inputs
969 `(("freetype" ,freetype)
970 ("fontconfig" ,fontconfig)
971 ("libx11" ,libx11)
972 ("libxcursor" ,libxcursor)
973 ("libxrandr" ,libxrandr)
974 ("libxtst" ,libxtst)
975 ("libxft" ,libxft)
976 ("xcb-util" ,xcb-util)
977 ("xcb-util-wm" ,xcb-util-wm)
978 ("xcb-util-keysyms" ,xcb-util-keysyms)))
979 (native-inputs
980 `(("libxt" ,libxt)
981 ("pkg-config" ,pkg-config)))
982 (synopsis "Minimalistic automatic tiling window manager")
983 (description
984 "Spectrwm is a small dynamic tiling and reparenting window manager for X11.
985 It is inspired by Xmonad and dwm. Its major features include:
986
987 @itemize
988 @item Navigation anywhere on all screens with either the keyboard or mouse
989 @item Customizable status bar
990 @item Restartable without losing state
991 @item Quick launch menu
992 @item Many screen layouts possible with a few simple key strokes
993 @item Move/resize floating windows
994 @item Extended Window Manager Hints (@dfn{EWMH}) support
995 @item Configurable tiling
996 @item Adjustable tile gap allows for a true one pixel border
997 @item Customizable colors and border width
998 @end itemize\n")
999 (home-page "https://github.com/conformal/spectrwm")
1000 (license license:isc)))
1001
1002 (define-public cwm
1003 (package
1004 (name "cwm")
1005 (version "6.3")
1006 (source
1007 (origin
1008 (method url-fetch)
1009 (uri (string-append "http://chneukirchen.org/releases/cwm-"
1010 version ".tar.gz"))
1011 (sha256
1012 (base32
1013 "17pdp9cfgh2n3n3905l4rl9qk7b722i8psnarhlc2h98qzx7zmac"))))
1014 (build-system gnu-build-system)
1015 (arguments
1016 `(#:make-flags (list "CC=gcc"
1017 (string-append "PREFIX=" %output))
1018 #:tests? #f
1019 #:phases
1020 (modify-phases %standard-phases
1021 (delete 'configure)
1022 (add-after 'build 'install-xsession
1023 (lambda* (#:key outputs #:allow-other-keys)
1024 ;; Add a .desktop file to xsessions.
1025 (let* ((output (assoc-ref outputs "out"))
1026 (xsessions (string-append output "/share/xsessions")))
1027 (mkdir-p xsessions)
1028 (with-output-to-file
1029 (string-append xsessions "/cwm.desktop")
1030 (lambda _
1031 (format #t
1032 "[Desktop Entry]~@
1033 Name=cwm~@
1034 Comment=OpenBSD Calm Window Manager fork~@
1035 Exec=~a/bin/cwm~@
1036 TryExec=~@*~a/bin/cwm~@
1037 Icon=~@
1038 Type=Application~%"
1039 output)))
1040 #t))))))
1041 (inputs
1042 `(("libxft" ,libxft)
1043 ("libxrandr" ,libxrandr)
1044 ("libxinerama" ,libxinerama)))
1045 (native-inputs
1046 `(("pkg-config" ,pkg-config)
1047 ("bison" ,bison)))
1048 (home-page "https://github.com/chneukirchen/cwm")
1049 (synopsis "OpenBSD fork of the calmwm window manager")
1050 (description "Cwm is a stacking window manager for X11. It is an OpenBSD
1051 project derived from the original Calm Window Manager.")
1052 (license license:isc)))
1053
1054 (define-public nitrogen
1055 (package
1056 (name "nitrogen")
1057 (version "1.6.1")
1058 (source (origin
1059 (method url-fetch)
1060 (uri (string-append "http://github.com/l3ib/nitrogen/"
1061 "releases/download/" version "/"
1062 name "-" version ".tar.gz"))
1063 (sha256
1064 (base32
1065 "0zc3fl1mbhq0iyndy4ysmy8vv5c7xwf54rbgamzfhfvsgdq160pl"))))
1066 (build-system gnu-build-system)
1067 (inputs
1068 `(("gtk+" ,gtk+-2)
1069 ("gtkmm" ,gtkmm-2)
1070 ("glib" ,glib)
1071 ("glibmm" ,glibmm)))
1072 (native-inputs
1073 `(("pkg-config" ,pkg-config)))
1074 (arguments
1075 `(#:configure-flags (list
1076 (string-append "--prefix=" %output)
1077 "CXXFLAGS=-std=c++11")))
1078 (home-page "http://projects.l3ib.org/nitrogen/")
1079 (synopsis "Background browser and setter for X windows")
1080 (description
1081 "This package is a background browser and setter for X windows. It's
1082 features are:
1083
1084 @itemize
1085 @item Multihead and Xinerama aware
1086 @item Recall mode to used via startup script
1087 @item Uses freedesktop.org standard for thumbnails
1088 @item Can set GNOME background
1089 @item Command lie set modes for script use
1090 @item Inotify monitoring of browse directory
1091 @item Lazy loading of thumbnails - conserves memory
1092 @item \"Automatic\" set mode - determines best mode to set an image based on
1093 its size
1094 @item Display preview images in a tiled icon layout
1095 @end itemize")
1096 (license license:gpl2+)))
1097
1098 (define-public polybar
1099 (package
1100 (name "polybar")
1101 (version "3.3.1")
1102 (source
1103 (origin
1104 (method url-fetch)
1105 (uri (string-append "https://github.com/jaagr/polybar/releases/"
1106 "download/" version "/polybar-" version ".tar"))
1107 (sha256
1108 (base32 "0758na059vpgnsrcdrxmh9wsahs80wnmizb9g7bmixlrkxr2m65h"))
1109 (file-name (string-append name "-" version ".tar"))))
1110 (build-system cmake-build-system)
1111 (arguments
1112 ;; Test is disabled because it requires downloading googletest from the
1113 ;; Internet.
1114 '(#:tests? #f))
1115 (inputs
1116 `(("alsa-lib" ,alsa-lib)
1117 ("cairo" ,cairo)
1118 ("i3-wm" ,i3-wm)
1119 ("libmpdclient" ,libmpdclient)
1120 ("libnl" ,libnl)
1121 ("libxcb" ,libxcb)
1122 ("pulseaudio" ,pulseaudio)
1123 ("xcb-proto" ,xcb-proto)
1124 ("xcb-util" ,xcb-util)
1125 ("xcb-util-cursor" ,xcb-util-cursor)
1126 ("xcb-util-image" ,xcb-util-image)
1127 ("xcb-util-wm" ,xcb-util-wm)
1128 ("xcb-util-xrm" ,xcb-util-xrm)))
1129 (native-inputs
1130 `(("pkg-config" ,pkg-config)
1131 ("python-2" ,python-2) ; lib/xpp depends on python 2
1132 ("python" ,python))) ; xcb-proto depends on python 3
1133 (home-page "https://polybar.github.io/")
1134 (synopsis "Fast and easy-to-use status bar")
1135 (description "Polybar aims to help users build beautiful and highly
1136 customizable status bars for their desktop environment. It has built-in
1137 functionality to display information about the most commonly used services.")
1138 (license license:expat)))
1139
1140 (define-public wlroots
1141 (package
1142 (name "wlroots")
1143 (version "0.5.0")
1144 (source
1145 (origin
1146 (method git-fetch)
1147 (uri (git-reference
1148 (url "https://github.com/swaywm/wlroots.git")
1149 (commit version)))
1150 (file-name (git-file-name name version))
1151 (sha256
1152 (base32 "1phiidyddzgaxy4gbqwmykxn0y8za6y5mp66l9dpd9i6fml153yq"))))
1153 (build-system meson-build-system)
1154 (arguments
1155 `(#:configure-flags '("-Dlogind-provider=elogind")
1156 #:phases
1157 (modify-phases %standard-phases
1158 (add-before 'configure 'hardcode-paths
1159 (lambda* (#:key inputs #:allow-other-keys)
1160 (substitute* "xwayland/xwayland.c"
1161 (("Xwayland") (string-append (assoc-ref inputs
1162 "xorg-server-xwayland")
1163 "/bin/Xwayland")))
1164 #t)))))
1165 (inputs `(("elogind" ,elogind)
1166 ("eudev" ,eudev)
1167 ("libinput" ,libinput)
1168 ("libxkbcommon" ,libxkbcommon)
1169 ("mesa" ,mesa)
1170 ("pixman" ,pixman)
1171 ("wayland" ,wayland)
1172 ("xorg-server-xwayland" ,xorg-server-xwayland)))
1173 (native-inputs `(("ffmpeg" ,ffmpeg)
1174 ("libcap" ,libcap)
1175 ("libpng" ,libpng)
1176 ("pkg-config" ,pkg-config)
1177 ("wayland-protocols" ,wayland-protocols)))
1178 (home-page "https://github.com/swaywm/wlroots")
1179 (synopsis "Pluggable, composable, unopinionated modules for building a
1180 Wayland compositor")
1181 (description "wlroots is a set of pluggable, composable, unopinionated
1182 modules for building a Wayland compositor.")
1183 (license license:expat))) ; MIT license
1184
1185 (define-public sway
1186 (package
1187 (name "sway")
1188 (version "1.0")
1189 (source
1190 (origin
1191 (method git-fetch)
1192 (uri (git-reference
1193 (url "https://github.com/swaywm/sway.git")
1194 (commit version)))
1195 (file-name (git-file-name name version))
1196 (sha256
1197 (base32 "09cndc2nl39d3l7g5634xp0pxcz60pvc5277mfw89r22mh0j78rx"))))
1198 (build-system meson-build-system)
1199 (arguments
1200 `(#:phases
1201 (modify-phases %standard-phases
1202 (add-before 'configure 'hardcode-paths
1203 (lambda* (#:key inputs #:allow-other-keys)
1204 (substitute* "meson.build"
1205 (("scdoc.get_pkgconfig_variable..scdoc..")
1206 (string-append "'" (assoc-ref inputs "scdoc")
1207 "/bin/scdoc'")))
1208 #t)))))
1209 (inputs `(("cairo" ,cairo)
1210 ("elogind" ,elogind)
1211 ("gdk-pixbuf" ,gdk-pixbuf)
1212 ("json-c" ,json-c)
1213 ("libevdev" ,libevdev)
1214 ("libinput" ,libinput)
1215 ("libxkbcommon" ,libxkbcommon)
1216 ("pango" ,pango)
1217 ("wayland" ,wayland)
1218 ("wlroots" ,wlroots)))
1219 (native-inputs `(("git" ,git)
1220 ("libcap" ,libcap)
1221 ("linux-pam" ,linux-pam)
1222 ("mesa" ,mesa)
1223 ("pkg-config" ,pkg-config)
1224 ("scdoc" ,scdoc)
1225 ("wayland-protocols" ,wayland-protocols)))
1226 (home-page "https://github.com/swaywm/sway")
1227 (synopsis "Wayland compositor compatible with i3")
1228 (description "Sway is a i3-compatible Wayland compositor.")
1229 (license license:expat))) ; MIT license
1230
1231 (define-public swayidle
1232 (package
1233 (name "swayidle")
1234 (version "1.2")
1235 (source
1236 (origin
1237 (method git-fetch)
1238 (uri (git-reference
1239 (url "https://github.com/swaywm/swayidle.git")
1240 (commit version)))
1241 (file-name (git-file-name name version))
1242 (sha256
1243 (base32 "0b65flajwn2i6k2kdxxgw25w7ikzzmm595f4j5x1wac1rb0yah9w"))))
1244 (build-system meson-build-system)
1245 (inputs `(("wayland" ,wayland)))
1246 (native-inputs `(("pkg-config" ,pkg-config)
1247 ("scdoc" ,scdoc)
1248 ("wayland-protocols" ,wayland-protocols)))
1249 (home-page "https://github.com/swaywm/sway")
1250 (synopsis "Idle management daemon for Wayland compositors")
1251 (description "Swayidle is a idle management daemon for Wayland compositors.")
1252 (license license:expat))) ; MIT license
1253
1254 (define-public swaylock
1255 (package
1256 (name "swaylock")
1257 (version "1.3")
1258 (source
1259 (origin
1260 (method git-fetch)
1261 (uri (git-reference
1262 (url "https://github.com/swaywm/swaylock.git")
1263 (commit version)))
1264 (file-name (git-file-name name version))
1265 (sha256
1266 (base32 "093nv1y9wyg48rfxhd36qdljjry57v1vkzrlc38mkf6zvsq8j7wb"))))
1267 (build-system meson-build-system)
1268 (inputs `(("cairo" ,cairo)
1269 ("gdk-pixbuf" ,gdk-pixbuf)
1270 ("libxkbcommon" ,libxkbcommon)
1271 ;("linux-pam" ,linux-pam) ; FIXME: Doesn't work.
1272 ("wayland" ,wayland)))
1273 (native-inputs `(("git" ,git)
1274 ("pango" ,pango)
1275 ("pkg-config" ,pkg-config)
1276 ("scdoc" ,scdoc)
1277 ("wayland-protocols" ,wayland-protocols)))
1278 (home-page "https://github.com/swaywm/sway")
1279 (synopsis "Screen locking utility for Wayland compositors")
1280 (description "Swaylock is a screen locking utility for Wayland compositors.")
1281 (license license:expat))) ; MIT license