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