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