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