gnu: xmenu: Update to 4.4.1.
[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")
16634798 1209 (version "6.7")
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
16634798 1216 (base32 "022zld29qawd8gl700g4m24qa89il3aks397zkhh66wvzssdblzx"))))
b4cb9308 1217 (build-system gnu-build-system)
1218 (arguments
fa50a8bc 1219 `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
b4cb9308 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")
f5fb52f1 1345 (version "0.12.0")
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
f5fb52f1 1354 (base32 "01j38lmgs2c6fq68v8b75pkilia2wsgzgp46ivfbi9hhx47kgcfn"))))
eea969cf
RH
1355 (build-system meson-build-system)
1356 (arguments
1357 `(#:configure-flags '("-Dlogind-provider=elogind")
f5fb52f1 1358 #:meson ,meson-0.55
eea969cf
RH
1359 #:phases
1360 (modify-phases %standard-phases
1361 (add-before 'configure 'hardcode-paths
1362 (lambda* (#:key inputs #:allow-other-keys)
f5fb52f1 1363 (substitute* "xwayland/server.c"
eea969cf
RH
1364 (("Xwayland") (string-append (assoc-ref inputs
1365 "xorg-server-xwayland")
1366 "/bin/Xwayland")))
1367 #t)))))
f5fb52f1
MB
1368 (propagated-inputs
1369 `(;; As required by wlroots.pc.
1370 ("elogind" ,elogind)
1371 ("eudev" ,eudev)
1372 ("libinput" ,libinput)
1373 ("libxkbcommon" ,libxkbcommon)
1374 ("mesa" ,mesa)
1375 ("pixman" ,pixman)
1376 ("wayland" ,wayland)
1377 ("xcb-util-errors" ,xcb-util-errors)
1378 ("xcb-util-wm" ,xcb-util-wm)
1379 ("xorg-server-xwayland" ,xorg-server-xwayland)))
1380 (native-inputs
1381 `(("pkg-config" ,pkg-config)
1382 ("wayland-protocols" ,wayland-protocols)))
eea969cf
RH
1383 (home-page "https://github.com/swaywm/wlroots")
1384 (synopsis "Pluggable, composable, unopinionated modules for building a
1385Wayland compositor")
1386 (description "wlroots is a set of pluggable, composable, unopinionated
1387modules for building a Wayland compositor.")
1388 (license license:expat))) ; MIT license
2ff844f0
RH
1389
1390(define-public sway
1391 (package
1392 (name "sway")
7fc378aa 1393 (version "1.5.1")
2ff844f0
RH
1394 (source
1395 (origin
1396 (method git-fetch)
1397 (uri (git-reference
b0e7b699 1398 (url "https://github.com/swaywm/sway")
2ff844f0
RH
1399 (commit version)))
1400 (file-name (git-file-name name version))
1401 (sha256
7fc378aa 1402 (base32 "1xsa3h8zhf29p0mi90baxpr76jkd9pd1gr97ky8cnjbcs4isj9j0"))))
2ff844f0
RH
1403 (build-system meson-build-system)
1404 (arguments
1405 `(#:phases
1406 (modify-phases %standard-phases
1407 (add-before 'configure 'hardcode-paths
1408 (lambda* (#:key inputs #:allow-other-keys)
e23b6a68
MP
1409 ;; Hardcode path to swaybg.
1410 (substitute* "sway/config.c"
1411 (("strdup..swaybg..")
1412 (string-append "strdup(\"" (assoc-ref inputs "swaybg")
1413 "/bin/swaybg\")")))
1414 ;; Hardcode path to scdoc.
2ff844f0
RH
1415 (substitute* "meson.build"
1416 (("scdoc.get_pkgconfig_variable..scdoc..")
1417 (string-append "'" (assoc-ref inputs "scdoc")
1418 "/bin/scdoc'")))
1419 #t)))))
1420 (inputs `(("cairo" ,cairo)
1421 ("elogind" ,elogind)
1422 ("gdk-pixbuf" ,gdk-pixbuf)
1423 ("json-c" ,json-c)
aa07299f 1424 ("libevdev" ,libevdev)
2ff844f0
RH
1425 ("libinput" ,libinput)
1426 ("libxkbcommon" ,libxkbcommon)
1427 ("pango" ,pango)
e23b6a68 1428 ("swaybg" ,swaybg)
2ff844f0
RH
1429 ("wayland" ,wayland)
1430 ("wlroots" ,wlroots)))
7fc378aa
MB
1431 (native-inputs
1432 `(("linux-pam" ,linux-pam)
1433 ("mesa" ,mesa)
1434 ("pkg-config" ,pkg-config)
1435 ("scdoc" ,scdoc)
1436 ("wayland-protocols" ,wayland-protocols)))
2ff844f0
RH
1437 (home-page "https://github.com/swaywm/sway")
1438 (synopsis "Wayland compositor compatible with i3")
1439 (description "Sway is a i3-compatible Wayland compositor.")
7fc378aa 1440 (license license:expat)))
06ae5efc
RH
1441
1442(define-public swayidle
1443 (package
1444 (name "swayidle")
53d8e2c6 1445 (version "1.6")
06ae5efc
RH
1446 (source
1447 (origin
1448 (method git-fetch)
1449 (uri (git-reference
b0e7b699 1450 (url "https://github.com/swaywm/swayidle")
06ae5efc
RH
1451 (commit version)))
1452 (file-name (git-file-name name version))
1453 (sha256
53d8e2c6 1454 (base32 "1nd3v8r9549lykdwh4krldfl59lzaspmmai5k1icy7dvi6kkr18r"))))
06ae5efc 1455 (build-system meson-build-system)
ddd401d2
MP
1456 (arguments
1457 `(#:configure-flags '("-Dlogind-provider=elogind")))
1458 (inputs `(("elogind" ,elogind)
1459 ("wayland" ,wayland)))
06ae5efc
RH
1460 (native-inputs `(("pkg-config" ,pkg-config)
1461 ("scdoc" ,scdoc)
1462 ("wayland-protocols" ,wayland-protocols)))
1463 (home-page "https://github.com/swaywm/sway")
1464 (synopsis "Idle management daemon for Wayland compositors")
1465 (description "Swayidle is a idle management daemon for Wayland compositors.")
1466 (license license:expat))) ; MIT license
b0805973
RH
1467
1468(define-public swaylock
1469 (package
1470 (name "swaylock")
75d31a4c 1471 (version "1.5")
b0805973
RH
1472 (source
1473 (origin
1474 (method git-fetch)
1475 (uri (git-reference
b0e7b699 1476 (url "https://github.com/swaywm/swaylock")
b0805973
RH
1477 (commit version)))
1478 (file-name (git-file-name name version))
1479 (sha256
75d31a4c 1480 (base32 "0r95p4w11dwm5ra614vddz83r8j7z6gd120z2vcchy7m9b0f15kf"))))
b0805973
RH
1481 (build-system meson-build-system)
1482 (inputs `(("cairo" ,cairo)
1483 ("gdk-pixbuf" ,gdk-pixbuf)
1484 ("libxkbcommon" ,libxkbcommon)
1485 ;("linux-pam" ,linux-pam) ; FIXME: Doesn't work.
1486 ("wayland" ,wayland)))
bc552a0c 1487 (native-inputs `(("pango" ,pango)
b0805973
RH
1488 ("pkg-config" ,pkg-config)
1489 ("scdoc" ,scdoc)
1490 ("wayland-protocols" ,wayland-protocols)))
1491 (home-page "https://github.com/swaywm/sway")
1492 (synopsis "Screen locking utility for Wayland compositors")
1493 (description "Swaylock is a screen locking utility for Wayland compositors.")
1494 (license license:expat))) ; MIT license
bedb3457
SS
1495
1496(define-public swaybg
1497 (package
1498 (name "swaybg")
1499 (version "1.0")
1500 (source
1501 (origin
1502 (method git-fetch)
1503 (uri (git-reference
b0e7b699 1504 (url "https://github.com/swaywm/swaybg")
bedb3457
SS
1505 (commit version)))
1506 (file-name (git-file-name name version))
1507 (sha256
1508 (base32 "1lmqz5bmig90gq2m7lwf02d2g7z4hzf8fhqz78c8vk92c6p4xwbc"))))
1509 (build-system meson-build-system)
1510 (inputs `(("cairo" ,cairo)
1511 ("gdk-pixbuf" ,gdk-pixbuf)
1512 ("wayland" ,wayland)))
3e295e8d 1513 (native-inputs `(("pkg-config" ,pkg-config)
bedb3457
SS
1514 ("scdoc" ,scdoc)
1515 ("wayland-protocols" ,wayland-protocols)))
1516 (home-page "https://github.com/swaywm/sway")
1517 (synopsis "Screen wallpaper utility for Wayland compositors")
1518 (description "Swaybg is a wallpaper utility for Wayland compositors.")
1519 (license license:expat))) ; MIT license
7a1d6a77
GB
1520
1521(define-public waybar
1522 (package
1523 (name "waybar")
08014aed 1524 (version "0.9.4")
7a1d6a77
GB
1525 (source
1526 (origin
1527 (method git-fetch)
1528 (uri (git-reference
b0e7b699 1529 (url "https://github.com/Alexays/Waybar")
7a1d6a77
GB
1530 (commit version)))
1531 (file-name (git-file-name name version))
1532 (sha256
08014aed 1533 (base32 "038vnma7y7z81caywp45yr364bc1aq8d01j5vycyiyfv33nm76fy"))))
7a1d6a77 1534 (build-system meson-build-system)
5e78a87b 1535 (inputs `(("date" ,date)
a8360892 1536 ("fmt" ,fmt-6)
5e78a87b 1537 ("gtk-layer-shell" ,gtk-layer-shell)
7a1d6a77
GB
1538 ("gtkmm" ,gtkmm)
1539 ("jsoncpp" ,jsoncpp)
de2d14f2 1540 ("libdbusmenu" ,libdbusmenu)
7a1d6a77 1541 ("libinput" ,libinput)
de2d14f2
GB
1542 ("libmpdclent" ,libmpdclient)
1543 ("libnl" ,libnl)
1544 ("pulseaudio" ,pulseaudio)
7a1d6a77
GB
1545 ("spdlog" ,spdlog)
1546 ("wayland" ,wayland)))
80817888
TGR
1547 (native-inputs
1548 `(("gcc" ,gcc-8) ; for #include <filesystem>
1549 ("glib:bin" ,glib "bin")
1550 ("pkg-config" ,pkg-config)
56c39a07 1551 ("scdoc" ,scdoc)
80817888 1552 ("wayland-protocols" ,wayland-protocols)))
7a1d6a77 1553 (home-page "https://github.com/Alexays/Waybar")
5e78a87b 1554 (synopsis "Wayland bar for Sway and Wlroots based compositors")
7a1d6a77
GB
1555 (description "Waybar is a highly customisable Wayland bar for Sway and
1556Wlroots based compositors.")
1557 (license license:expat))) ; MIT license
46dc940c
GB
1558
1559(define-public mako
1560 (package
1561 (name "mako")
9ca38df7 1562 (version "1.4.1")
46dc940c
GB
1563 (source
1564 (origin
1565 (method git-fetch)
1566 (uri (git-reference
b0e7b699 1567 (url "https://github.com/emersion/mako")
46dc940c
GB
1568 (commit (string-append "v" version))))
1569 (file-name (git-file-name name version))
1570 (sha256
9ca38df7 1571 (base32 "0hwvibpnrximb628w9dsfjpi30b5jy7nfkm4d94z5vhp78p43vxh"))))
46dc940c
GB
1572 (build-system meson-build-system)
1573 (inputs `(("cairo" ,cairo)
1574 ("elogind" ,elogind)
1575 ("gdk-pixbuf" ,gdk-pixbuf)
1576 ("pango" ,pango)
1577 ("wayland" ,wayland)))
1578 (native-inputs `(("pkg-config" ,pkg-config)
1579 ("scdoc" ,scdoc)
1580 ("wayland-protocols" ,wayland-protocols)))
1581 (home-page "https://wayland.emersion.fr/mako")
1582 (synopsis "Lightweight Wayland notification daemon")
1583 (description "Mako is a lightweight notification daemon for Wayland
1584compositors that support the layer-shell protocol.")
1585 (license license:expat))) ; MIT license
88f06fd0
PN
1586
1587(define-public stumpwm
1588 (package
1589 (name "stumpwm")
59198ba1 1590 (version "19.11")
88f06fd0
PN
1591 (source
1592 (origin
1593 (method git-fetch)
1594 (uri (git-reference
b0e7b699 1595 (url "https://github.com/stumpwm/stumpwm")
88f06fd0
PN
1596 (commit version)))
1597 (file-name (git-file-name "stumpwm" version))
1598 (sha256
59198ba1 1599 (base32 "1ha8803ll7472kqxsy2xz0v5d4sv8apmc9z631d67m31q0z1m9rz"))))
88f06fd0
PN
1600 (build-system asdf-build-system/sbcl)
1601 (native-inputs `(("fiasco" ,sbcl-fiasco)
afed1b94
TGR
1602 ("texinfo" ,texinfo)
1603
1604 ;; To build the manual.
1605 ("autoconf" ,autoconf)
1606 ("automake" ,automake)))
88f06fd0
PN
1607 (inputs `(("cl-ppcre" ,sbcl-cl-ppcre)
1608 ("clx" ,sbcl-clx)
1609 ("alexandria" ,sbcl-alexandria)))
1610 (outputs '("out" "lib"))
1611 (arguments
2ff8b5ba 1612 '(#:asd-systems '("stumpwm")
88f06fd0
PN
1613 #:phases
1614 (modify-phases %standard-phases
2ff8b5ba 1615 (add-after 'create-asdf-configuration 'build-program
88f06fd0
PN
1616 (lambda* (#:key outputs #:allow-other-keys)
1617 (build-program
1618 (string-append (assoc-ref outputs "out") "/bin/stumpwm")
1619 outputs
1620 #:entry-program '((stumpwm:stumpwm) 0))))
1621 (add-after 'build-program 'create-desktop-file
1622 (lambda* (#:key outputs #:allow-other-keys)
1623 (let* ((out (assoc-ref outputs "out"))
1624 (xsessions (string-append out "/share/xsessions")))
1625 (mkdir-p xsessions)
1626 (call-with-output-file
1627 (string-append xsessions "/stumpwm.desktop")
1628 (lambda (file)
1629 (format file
1630 "[Desktop Entry]~@
1631 Name=stumpwm~@
1632 Comment=The Stump Window Manager~@
1633 Exec=~a/bin/stumpwm~@
1634 TryExec=~@*~a/bin/stumpwm~@
1635 Icon=~@
1636 Type=Application~%"
1637 out)))
1638 #t)))
1639 (add-after 'install 'install-manual
afed1b94 1640 (lambda* (#:key (make-flags '()) outputs #:allow-other-keys)
88f06fd0
PN
1641 (let* ((out (assoc-ref outputs "out"))
1642 (info (string-append out "/share/info")))
afed1b94
TGR
1643 (invoke "./autogen.sh")
1644 (invoke "sh" "./configure" "SHELL=sh")
1645 (apply invoke "make" "stumpwm.info" make-flags)
88f06fd0
PN
1646 (install-file "stumpwm.info" info)
1647 #t))))))
1648 (synopsis "Window manager written in Common Lisp")
1649 (description "Stumpwm is a window manager written entirely in Common Lisp.
1650It attempts to be highly customizable while relying entirely on the keyboard
1651for input. These design decisions reflect the growing popularity of
1652productive, customizable lisp based systems.")
1653 (home-page "https://github.com/stumpwm/stumpwm")
1654 (license license:gpl2+)
1655 (properties `((cl-source-variant . ,(delay cl-stumpwm))))))
1656
1657(define-public sbcl-stumpwm
1658 (deprecated-package "sbcl-stumpwm" stumpwm))
1659
1660(define-public cl-stumpwm
1661 (package
1662 (inherit (sbcl-package->cl-source-package stumpwm))
1663 (name "cl-stumpwm")))
1664
1665(define-public stumpwm+slynk
1666 (package
1667 (inherit stumpwm)
1668 (name "stumpwm-with-slynk")
1669 (outputs '("out"))
1670 (inputs
1671 `(("stumpwm" ,stumpwm "lib")
1672 ("slynk" ,sbcl-slynk)))
1673 (arguments
1674 (substitute-keyword-arguments (package-arguments stumpwm)
1675 ((#:phases phases)
1676 `(modify-phases ,phases
1677 (replace 'build-program
1678 (lambda* (#:key inputs outputs #:allow-other-keys)
1679 (let* ((out (assoc-ref outputs "out"))
1680 (program (string-append out "/bin/stumpwm")))
1681 (build-program program outputs
1682 #:entry-program '((stumpwm:stumpwm) 0)
2ff8b5ba 1683 #:dependencies '("stumpwm" "slynk")
88f06fd0
PN
1684 #:dependency-prefixes
1685 (map (lambda (input) (assoc-ref inputs input))
1686 '("stumpwm" "slynk")))
88f06fd0
PN
1687 #t)))
1688 (delete 'copy-source)
1689 (delete 'build)
1690 (delete 'check)
2ff8b5ba 1691 (delete 'cleanup)))))))
88f06fd0 1692
81b045e1
KCB
1693(define stumpwm-contrib
1694 (let ((commit "920f8fc1488f7953f205e1dda4c2ecbbbda56d63")
8b2a637d 1695 (revision "2"))
9a12243c 1696 (package
81b045e1 1697 (name "stumpwm-contrib")
9a12243c
OP
1698 (version (git-version "0.0.1" revision commit)) ;no upstream release
1699 (source
1700 (origin
1701 (method git-fetch)
1702 (uri (git-reference
b0e7b699 1703 (url "https://github.com/stumpwm/stumpwm-contrib")
9a12243c 1704 (commit commit)))
b9e1fc2f 1705 (file-name (git-file-name name version))
9a12243c 1706 (sha256
8b2a637d 1707 (base32 "0giac390bq95ag41xkxqp8jjrhfx1wpgglz7jg5rkm0wjhcwmyml"))))
81b045e1 1708 (build-system asdf-build-system/sbcl)
9a12243c 1709 (inputs
81b045e1 1710 `(("stumpwm" ,stumpwm "lib")))
9a12243c
OP
1711 (home-page "https://github.com/stumpwm/stumpwm-contrib")
1712 (synopsis "StumpWM interactive shell")
1713 (description "This package provides a StumpWM interactive shell.")
1714 (license (list license:gpl2+ license:gpl3+ license:bsd-2)))))
1715
81b045e1
KCB
1716(define-public stumpish
1717 (package
1718 (inherit stumpwm-contrib)
1719 (name "stumpish")
1720 (inputs
1721 `(("bash" ,bash)
48b00a4c
MR
1722 ("rlwrap" ,rlwrap)
1723 ("xprop" ,xprop)))
81b045e1
KCB
1724 (build-system trivial-build-system)
1725 (arguments
1726 '(#:modules ((guix build utils))
81b045e1
KCB
1727 #:builder
1728 (begin
1729 (use-modules (guix build utils))
1730 (copy-recursively (assoc-ref %build-inputs "source") ".")
1731 (chdir "util/stumpish")
1732 (substitute* "stumpish"
1733 (("rlwrap") (string-append (assoc-ref %build-inputs "rlwrap")
1734 "/bin/rlwrap"))
48b00a4c
MR
1735 (("xprop") (string-append (assoc-ref %build-inputs "xprop")
1736 "/bin/xprop"))
81b045e1
KCB
1737 (("/bin/sh") (string-append (assoc-ref %build-inputs "bash")
1738 "/bin/bash")))
1739 (install-file "stumpish" (string-append %output "/bin")))))
1740 (home-page "https://github.com/stumpwm/stumpwm-contrib")
1741 (synopsis "StumpWM interactive shell")
1742 (description "This package provides a StumpWM interactive shell.")
1743 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
1744
88f06fd0
PN
1745(define-public sbcl-stumpwm+slynk
1746 (deprecated-package "sbcl-stumpwm-with-slynk" stumpwm+slynk))
d4145638 1747
65051fdc 1748(define-public sbcl-stumpwm-ttf-fonts
81b045e1
KCB
1749 (package
1750 (inherit stumpwm-contrib)
1751 (name "sbcl-stumpwm-ttf-fonts")
1752 (inputs
1753 `(("stumpwm" ,stumpwm "lib")
1754 ("clx-truetype" ,sbcl-clx-truetype)))
1755 (arguments
2ff8b5ba 1756 '(#:asd-systems '("ttf-fonts")
81b045e1
KCB
1757 #:tests? #f
1758 #:phases
1759 (modify-phases %standard-phases
1760 (add-after 'unpack 'chdir
1761 (lambda _ (chdir "util/ttf-fonts") #t)))))
1762 (home-page "https://github.com/stumpwm/stumpwm-contrib")
1763 (synopsis "Implementation of TTF font rendering for Lisp")
1764 (description "This package provides a Lisp implementation of TTF font
65051fdc 1765rendering.")
81b045e1 1766 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
65051fdc 1767
fd65311c 1768(define-public sbcl-stumpwm-pass
81b045e1
KCB
1769 (package
1770 (inherit stumpwm-contrib)
1771 (name "sbcl-stumpwm-pass")
1772 (arguments
2ff8b5ba 1773 '(#:asd-systems '("pass")
81b045e1
KCB
1774 #:tests? #f
1775 #:phases
1776 (modify-phases %standard-phases
1777 (add-after 'unpack 'chdir
1778 (lambda _ (chdir "util/pass") #t)))))
1779 (home-page "https://github.com/stumpwm/stumpwm-contrib")
4a1e3610 1780 (synopsis "Integrate @code{pass} with StumpWM")
81b045e1 1781 (description "This package provides an interface which integrates
fd65311c 1782password-store into StumpWM.")
81b045e1 1783 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
fd65311c 1784
396eb9e1 1785(define-public sbcl-stumpwm-globalwindows
81b045e1
KCB
1786 (package
1787 (inherit stumpwm-contrib)
1788 (name "sbcl-stumpwm-globalwindows")
1789 (arguments
2ff8b5ba 1790 '(#:asd-systems '("globalwindows")
81b045e1
KCB
1791 #:tests? #f
1792 #:phases
1793 (modify-phases %standard-phases
1794 (add-after 'unpack 'chdir
1795 (lambda _ (chdir "util/globalwindows") #t)))))
1796 (home-page "https://github.com/stumpwm/stumpwm-contrib")
1797 (synopsis "Manipulate all windows in the current X session")
1798 (description "This package provides a StumpWM module to manipulate all
396eb9e1 1799windows in the current X session.")
81b045e1 1800 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
396eb9e1 1801
693d0fff 1802(define-public sbcl-stumpwm-swm-gaps
81b045e1
KCB
1803 (package
1804 (inherit stumpwm-contrib)
1805 (name "sbcl-stumpwm-swm-gaps")
1806 (arguments
2ff8b5ba 1807 '(#:asd-systems '("swm-gaps")
81b045e1
KCB
1808 #:tests? #f
1809 #:phases
1810 (modify-phases %standard-phases
1811 (add-after 'unpack 'chdir
1812 (lambda _ (chdir "util/swm-gaps") #t)))))
1813 (home-page "https://github.com/stumpwm/stumpwm-contrib")
1814 (synopsis "Gaps between windows for StumpWM")
1815 (description "This package provides a StumpWM module which adds gaps
693d0fff 1816between windows.")
81b045e1 1817 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
693d0fff 1818
ea94e4d3
KCB
1819(define-public sbcl-stumpwm-net
1820 (package
1821 (inherit stumpwm-contrib)
1822 (name "sbcl-stumpwm-net")
1823 (arguments
2ff8b5ba 1824 '(#:asd-systems '("net")
ea94e4d3
KCB
1825 #:tests? #f
1826 #:phases
1827 (modify-phases %standard-phases
1828 (add-after 'unpack 'chdir (lambda _ (chdir "modeline/net") #t)))))
1829 (home-page
1830 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/net")
1831 (synopsis "Modeline support for network connectivity")
1832 (description "Modeline support for network connectivity.")
1833 (supported-systems
1834 (filter (lambda (a) (string-contains a "linux")) %supported-systems))
1835 (license license:gpl3+)))
1836
86ee8d15
KCB
1837(define-public sbcl-stumpwm-wifi
1838 (package
1839 (inherit stumpwm-contrib)
1840 (name "sbcl-stumpwm-wifi")
1841 (arguments
2ff8b5ba 1842 '(#:asd-systems '("wifi")
86ee8d15
KCB
1843 #:tests? #f
1844 #:phases
1845 (modify-phases %standard-phases
1846 (add-after 'unpack 'chdir (lambda _ (chdir "modeline/wifi") #t)))))
1847 (home-page
1848 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/wifi")
1849 (synopsis "Modeline support for wifi connectivity")
1850 (description "Modeline support for wifi connectivity.")
1851 (supported-systems
1852 (filter (lambda (a) (string-contains a "linux")) %supported-systems))
1853 (license license:gpl3+)))
1854
1afe58e4
KCB
1855(define-public sbcl-stumpwm-stumptray
1856 (package
1857 (inherit stumpwm-contrib)
1858 (name "sbcl-stumpwm-stumptray")
1859 (arguments
2ff8b5ba 1860 '(#:asd-systems '("stumptray")
1afe58e4
KCB
1861 #:tests? #f
1862 #:phases
1863 (modify-phases %standard-phases
1864 (add-after 'unpack 'chdir (lambda _ (chdir "modeline/stumptray") #t)))))
1865 (inputs
1866 `(("stumpwm" ,stumpwm "lib")
1867 ("xembed" ,sbcl-clx-xembed)
1868 ("alexandria" ,sbcl-alexandria)))
1869 (home-page
1870 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/stumptray")
1871 (synopsis "Modeline support for stumptray connectivity")
1872 (description "Modeline support for stumptray connectivity.")
1873 (supported-systems
1874 (filter (lambda (a) (string-contains a "linux")) %supported-systems))
1875 (license license:gpl3+)))
1876
b70e612b
KCB
1877(define-public sbcl-stumpwm-kbd-layouts
1878 (package
1879 (inherit stumpwm-contrib)
1880 (name "sbcl-stumpwm-kbd-layouts")
1881 (arguments
2ff8b5ba 1882 '(#:asd-systems '("kbd-layouts")
b70e612b
KCB
1883 #:tests? #f
1884 #:phases
1885 (modify-phases %standard-phases
1886 (add-after 'unpack 'chdir (lambda _ (chdir "util/kbd-layouts") #t)))))
1887 (home-page
1888 "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/kbd-layouts")
1889 (synopsis "Keyboard layout switcher for StumpWM")
1890 (description "Keyboard layout switcher for StumpWM")
1891 (license license:gpl3+)))
1892
d4145638
N
1893(define-public lemonbar
1894 (let ((commit "35183ab81d2128dbb7b6d8e119cc57846bcefdb4")
1895 (revision "1"))
1896 (package
1897 (name "lemonbar")
1898 (version (git-version "1.3" revision commit))
1899 (source (origin
1900 (method git-fetch)
1901 (uri (git-reference
1902 (url "https://github.com/LemonBoy/bar")
1903 (commit commit)))
1904 (file-name (git-file-name name version))
1905 (sha256
1906 (base32
1907 "1wwqbph392iwz8skaqxb0xpklb1l6yganqz80g4x1fhrnz7idmlh"))))
1908 (build-system gnu-build-system)
1909 (arguments
6978cb28
TGR
1910 `(#:tests? #f ; no test suite
1911 #:make-flags
1912 (list ,(string-append "CC=" (cc-for-target))
1913 (string-append "PREFIX=" %output))
d4145638
N
1914 #:phases
1915 (modify-phases %standard-phases
1916 (delete 'configure))))
1917 (inputs
1918 `(("libxcb" ,libxcb)))
1919 (native-inputs
1920 `(("perl" ,perl)))
1921 (home-page "https://github.com/LemonBoy/bar")
1922 (synopsis "Featherweight status bar")
1923 (description
1924 "@code{lemonbar} (formerly known as @code{bar}) is a lightweight
1925bar entirely based on XCB. Provides full UTF-8 support, basic
1926formatting, RandR and Xinerama support and EWMH compliance without
1927wasting your precious memory.")
1928 (license license:x11))))
ab751d53
OP
1929
1930(define-public xclickroot
8ff16233
OP
1931 (package
1932 (name "xclickroot")
1933 (version "1.2")
1934 (source (origin
1935 (method git-fetch)
1936 (uri (git-reference
1937 (url "https://github.com/phillbush/xclickroot")
1938 (commit (string-append "v" version))))
1939 (file-name (git-file-name name version))
1940 (sha256
1941 (base32
1942 "1nd5qz0qz5j7gx2jsbcp234giwaa0xmg42vrcjrcf587q9ivakfl"))))
1943 (build-system gnu-build-system)
1944 (inputs
1945 `(("libx11" ,libx11)))
1946 (arguments
1947 `(#:tests? #f ;no test suite
1948 #:make-flags
1949 (list ,(string-append "CC=" (cc-for-target))
1950 (string-append "PREFIX=" %output))
1951 #:phases
1952 (modify-phases %standard-phases
1953 (delete 'configure))))
1954 (home-page "https://github.com/phillbush/xclickroot")
1955 (synopsis "Run a command when a mouse button is pressed on the root window")
1956 (description "@code{xclickroot} runs a command every time a given mouse
ab751d53 1957button is pressed on the root window.")
8ff16233 1958 (license license:public-domain)))
6bd6b123
OP
1959
1960(define-public xmenu
1961 (package
1962 (name "xmenu")
bf822521 1963 (version "4.4.1")
6bd6b123
OP
1964 (source (origin
1965 (method git-fetch)
1966 (uri (git-reference
1967 (url "https://github.com/phillbush/xmenu")
1968 (commit (string-append "v" version))))
1969 (file-name (git-file-name name version))
1970 (sha256
1971 (base32
bf822521 1972 "1s70zvsaqnsjqs298vw3py0vcvia68xlks1wcz37pb88bwligz1x"))))
6bd6b123
OP
1973 (build-system gnu-build-system)
1974 (inputs
1975 `(("libx11" ,libx11)
bf822521 1976 ("libxinerama" ,libxinerama)
6bd6b123
OP
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)))