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