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