Merge branch 'master' into staging
[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 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 Ludovic Courtès <ludo@gnu.org>
12 ;;; Copyright © 2016, 2017 ng0 <contact.ng0@cryptolab.net>
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 Marius Bakke <mbakke@fastmail.com>
17 ;;;
18 ;;; This file is part of GNU Guix.
19 ;;;
20 ;;; GNU Guix is free software; you can redistribute it and/or modify it
21 ;;; under the terms of the GNU General Public License as published by
22 ;;; the Free Software Foundation; either version 3 of the License, or (at
23 ;;; your option) any later version.
24 ;;;
25 ;;; GNU Guix is distributed in the hope that it will be useful, but
26 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
27 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28 ;;; GNU General Public License for more details.
29 ;;;
30 ;;; You should have received a copy of the GNU General Public License
31 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
32
33 (define-module (gnu packages wm)
34 #:use-module ((guix licenses) #:prefix license:)
35 #:use-module (guix packages)
36 #:use-module (gnu packages)
37 #:use-module (gnu packages linux)
38 #:use-module (guix build-system cmake)
39 #:use-module (guix build-system gnu)
40 #:use-module (guix build-system haskell)
41 #:use-module (guix build-system perl)
42 #:use-module (guix build-system python)
43 #:use-module (gnu packages haskell)
44 #:use-module (gnu packages base)
45 #:use-module (gnu packages pkg-config)
46 #:use-module (gnu packages perl)
47 #:use-module (gnu packages pulseaudio)
48 #:use-module (gnu packages xorg)
49 #:use-module (gnu packages xdisorg)
50 #:use-module (gnu packages documentation)
51 #:use-module (gnu packages xml)
52 #:use-module (gnu packages m4)
53 #:use-module (gnu packages docbook)
54 #:use-module (gnu packages image)
55 #:use-module (gnu packages pcre)
56 #:use-module (gnu packages python)
57 #:use-module (gnu packages gtk)
58 #:use-module (gnu packages libevent)
59 #:use-module (gnu packages fribidi)
60 #:use-module (gnu packages maths)
61 #:use-module (gnu packages web)
62 #:use-module (gnu packages fontutils)
63 #:use-module (gnu packages freedesktop)
64 #:use-module (gnu packages glib)
65 #:use-module (gnu packages gperf)
66 #:use-module (gnu packages imagemagick)
67 #:use-module (gnu packages lua)
68 #:use-module (gnu packages suckless)
69 #:use-module (guix download)
70 #:use-module (guix git-download))
71
72 (define-public libconfuse
73 (package
74 (name "libconfuse")
75 (version "3.1")
76 (source (origin
77 (method url-fetch)
78 (uri (string-append "https://github.com/martinh/libconfuse/"
79 "releases/download/v" version
80 "/confuse-" version ".tar.xz"))
81 (sha256
82 (base32
83 "0rnacgfkd88qyxrfdfzn9cxz533l9s5wrzb9093f9mbi00gg6wc1"))))
84 (build-system gnu-build-system)
85 (home-page "https://github.com/martinh/libconfuse")
86 (synopsis "Configuration file parser library")
87 (description "libconfuse is a configuration file parser library. It
88 supports sections and (lists of) values (strings, integers, floats, booleans
89 or other sections), as well as some other features (such as
90 single/double-quoted strings, environment variable expansion, functions and
91 nested include statements).")
92 (license license:isc)))
93
94 (define-public bspwm
95 (package
96 (name "bspwm")
97 (version "0.9")
98 (source
99 (origin
100 (file-name (string-append name "-" version ".tar.gz"))
101 (method url-fetch)
102 (uri (string-append
103 "https://github.com/baskerville/bspwm/archive/"
104 version ".tar.gz"))
105 (sha256
106 (base32
107 "1pig0h2jk8wipyz90j69c4bk37bfyq60asnn0v0bqld2p2vjvyqy"))))
108 (build-system gnu-build-system)
109 (inputs
110 `(("libxcb" ,libxcb)
111 ("libxinerama" ,libxinerama)
112 ("sxhkd" ,sxhkd)
113 ("xcb-util" ,xcb-util)
114 ("xcb-util-keysyms" ,xcb-util-keysyms)
115 ("xcb-util-wm" ,xcb-util-wm)))
116 (arguments
117 '(#:phases (alist-delete 'configure %standard-phases)
118 #:tests? #f ; no check target
119 #:make-flags (list "CC=gcc"
120 (string-append "PREFIX=" %output))))
121 (home-page "https://github.com/baskerville/bspwm")
122 (synopsis "Tiling window manager based on binary space partitioning")
123 (description "bspwm is a tiling window manager that represents windows as
124 the leaves of a full binary tree.")
125 (license license:bsd-2)))
126
127 (define-public i3status
128 (package
129 (name "i3status")
130 (version "2.11")
131 (source (origin
132 (method url-fetch)
133 (uri (string-append "https://i3wm.org/i3status/i3status-"
134 version ".tar.bz2"))
135 (sha256
136 (base32
137 "0pwcy599fw8by1a1sf91crkqba7679qhvhbacpmhis8c1xrpxnwq"))))
138 (build-system gnu-build-system)
139 (arguments
140 `(#:make-flags (list "CC=gcc" (string-append "PREFIX=" %output))
141 #:phases
142 (modify-phases %standard-phases
143 (delete 'configure))
144 #:tests? #f)) ; no test suite
145 (inputs
146 `(("openlibm" ,openlibm)
147 ("libconfuse" ,libconfuse)
148 ("libyajl" ,libyajl)
149 ("alsa-lib" ,alsa-lib)
150 ("pulseaudio" ,pulseaudio)
151 ("libnl" ,libnl)
152 ("libcap" ,libcap)
153 ("asciidoc" ,asciidoc)))
154 (native-inputs
155 `(("pkg-config" ,pkg-config)))
156 (home-page "https://i3wm.org/i3status/")
157 (synopsis "Status bar for i3bar, dzen2, xmobar or similar programs")
158 (description "i3status is a small program for generating a status bar for
159 i3bar, dzen2, xmobar or similar programs. It is designed to be very efficient
160 by issuing a very small number of system calls, as one generally wants to
161 update such a status line every second. This ensures that even under high
162 load, your status bar is updated correctly. Also, it saves a bit of energy by
163 not hogging your CPU as much as spawning the corresponding amount of shell
164 commands would.")
165 (license license:bsd-3)))
166
167 (define-public i3-wm
168 (package
169 (name "i3-wm")
170 (version "4.13")
171 (source (origin
172 (method url-fetch)
173 (uri (string-append "https://i3wm.org/downloads/i3-"
174 version ".tar.bz2"))
175 (sha256
176 (base32
177 "12ngz32swh9n85xy0cz1lq16aqi9ys5hq19v589q9a97wn1k3hcl"))))
178 (build-system gnu-build-system)
179 (arguments
180 `(#:make-flags
181 (list "CC=gcc"
182 (string-append "PREFIX=" %output)
183 ;; This works around the following error:
184 ;; 'error: ‘for’ loop initial declarations are only allowed in C99
185 ;; or C11 mode'
186 "CFLAGS=-std=c11")
187 ;; The build system tries to build in a separate directory, but that
188 ;; seems to be unnecessary.
189 #:configure-flags '("--disable-builddir")
190 ;; The test suite appears to require the unpackaged Perl module AnyEvent.
191 #:tests? #f))
192 (inputs
193 `(("libxcb" ,libxcb)
194 ("xcb-util" ,xcb-util)
195 ("xcb-util-cursor" ,xcb-util-cursor)
196 ("xcb-util-keysyms" ,xcb-util-keysyms)
197 ("xcb-util-wm" ,xcb-util-wm)
198 ("xcb-util-xrm" ,xcb-util-xrm)
199 ("libxkbcommon" ,libxkbcommon)
200 ("libev" ,libev)
201 ("libyajl" ,libyajl)
202 ("asciidoc" ,asciidoc)
203 ("xmlto" ,xmlto)
204 ("perl-pod-simple" ,perl-pod-simple)
205 ("libx11" ,libx11)
206 ("pcre" ,pcre)
207 ("startup-notification" ,startup-notification)
208 ("pango" ,pango)
209 ("cairo" ,cairo)))
210 (native-inputs
211 `(("which" ,which)
212 ("perl" ,perl)
213 ("pkg-config" ,pkg-config)
214 ;; For building the documentation.
215 ("libxml2" ,libxml2)
216 ("docbook-xsl" ,docbook-xsl)))
217 (home-page "https://i3wm.org/")
218 (synopsis "Improved tiling window manager")
219 (description "A tiling window manager, completely written
220 from scratch. i3 is primarily targeted at advanced users and
221 developers.")
222 (license license:bsd-3)))
223
224 (define-public perl-anyevent-i3
225 (package
226 (name "perl-anyevent-i3")
227 (version "0.16")
228 (source (origin
229 (method url-fetch)
230 (uri (string-append "mirror://cpan/authors/id/M/MS/MSTPLBG/"
231 "AnyEvent-I3-" version ".tar.gz"))
232 (sha256
233 (base32
234 "1qwva5vmmn929l6k9wzhp4h80ad4qm4m1g2dyv4nlas624003hig"))))
235 (build-system perl-build-system)
236 (propagated-inputs
237 `(("perl-anyevent" ,perl-anyevent)
238 ("perl-json-xs" ,perl-json-xs)))
239 (home-page "http://search.cpan.org/dist/AnyEvent-I3")
240 (synopsis
241 "Communicate with the i3 window manager through perl")
242 (description
243 "This module connects to the i3 window manager using the UNIX socket
244 based IPC interface it provides (if enabled in the configuration file).
245 You can then subscribe to events or send messages and receive their replies.")
246 ;; Can be used with either license.
247 (license (list license:gpl3+ license:perl-license))))
248
249 (define-public python-i3-py
250 (package
251 (name "python-i3-py")
252 (version "0.6.5")
253 (source
254 (origin
255 ;; The latest release is not tagged in Git nor has an entry in PyPi,
256 ;; but there is still a clear commit for it, and it's been the last one
257 ;; for years.
258 (method git-fetch)
259 (uri (git-reference
260 (url "https://github.com/ziberna/i3-py.git")
261 (commit "27f88a616e9ecc340e7d041d3d00782f8a1964c1")))
262 (sha256
263 (base32
264 "1nm719dc2xqlll7vj4c4m7mpjb27lpn3bg3c66gajvnrz2x1nmxs"))
265 (file-name (string-append name "-" version "-checkout"))))
266 (build-system python-build-system)
267 (arguments
268 `(#:tests? #f ; no tests yet
269 #:phases (modify-phases %standard-phases
270 (add-after 'install 'install-doc
271 ;; Copy readme file to documentation directory.
272 (lambda* (#:key outputs #:allow-other-keys)
273 (let ((doc (string-append (assoc-ref outputs "out")
274 "/share/doc/" ,name)))
275 (install-file "README.md" doc)
276 ;; Avoid unspecified return value.
277 #t))))))
278 (propagated-inputs
279 `(("i3-wm" ,i3-wm)))
280 (home-page "https://github.com/ziberna/i3-py")
281 (synopsis "Python interface to the i3 window manager")
282 (description "This package allows you to interact from a Python program
283 with the i3 window manager via its IPC socket. It can send commands and other
284 kinds of messages to i3, select the affected containers, filter results and
285 subscribe to events.")
286 (license license:gpl3+)))
287
288 (define-public python2-i3-py
289 (package-with-python2 python-i3-py))
290
291 (define-public quickswitch-i3
292 (let ((commit "ed692b1e8f43b95bd907ced26238ce8ccb2ed28f")
293 (revision "1")) ; Guix package revision
294 (package
295 (name "quickswitch-i3")
296 (version (string-append "2.2-" revision "."
297 (string-take commit 7)))
298 (source
299 (origin
300 ;; The latest commit is a few years old and just a couple commits
301 ;; after the last tagged release, so we use that latest commit
302 ;; instead of the release.
303 (method git-fetch)
304 (uri (git-reference
305 (url "https://github.com/proxypoke/quickswitch-for-i3.git")
306 (commit commit)))
307 (sha256
308 (base32
309 "0447077sama80jcdg5p64zjsvafmz5rbdrirhm1adcdjhkh6iqc5"))
310 (patches (search-patches "quickswitch-fix-dmenu-check.patch"))
311 (file-name (string-append name "-" version "-checkout"))))
312 (build-system python-build-system)
313 (arguments
314 `(#:tests? #f ; no tests yet
315 #:phases (modify-phases %standard-phases
316 (add-after 'install 'install-doc
317 ;; Copy readme file to documentation directory.
318 (lambda* (#:key outputs #:allow-other-keys)
319 (let ((doc (string-append (assoc-ref outputs "out")
320 "/share/doc/" ,name)))
321 (install-file "README.rst" doc)
322 ;; Avoid unspecified return value.
323 #t))))))
324 (inputs
325 `(("python-i3-py" ,python-i3-py)
326 ("dmenu" ,dmenu)))
327 (home-page "https://github.com/proxypoke/quickswitch-for-i3")
328 (synopsis "Quickly change to and locate windows in the i3 window manager")
329 (description
330 "This utility for the i3 window manager allows you to quickly switch to
331 and locate windows on all your workspaces, using an interactive dmenu
332 prompt.")
333 (license (license:non-copyleft "http://www.wtfpl.net/txt/copying/")))))
334
335 (define-public xmonad
336 (package
337 (name "xmonad")
338 (version "0.12")
339 (synopsis "Tiling window manager")
340 (source (origin
341 (method url-fetch)
342 (uri (string-append "mirror://hackage/package/xmonad/"
343 name "-" version ".tar.gz"))
344 (sha256
345 (base32
346 "1mzx3p17ppgmi30q3phaj58x6kxn73pbbkn9v9gzgmd8skdlkxp8"))))
347 (build-system haskell-build-system)
348 (inputs
349 `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
350 ("ghc-mtl" ,ghc-mtl)
351 ("ghc-quickcheck" ,ghc-quickcheck)
352 ("ghc-setlocale" ,ghc-setlocale)
353 ("ghc-utf8-string" ,ghc-utf8-string)
354 ("ghc-x11" ,ghc-x11)))
355 (arguments
356 `(#:phases
357 (modify-phases %standard-phases
358 (add-after
359 'install 'install-xsession
360 (lambda _
361 (let* ((xsessions (string-append %output "/share/xsessions")))
362 (mkdir-p xsessions)
363 (call-with-output-file
364 (string-append xsessions "/xmonad.desktop")
365 (lambda (port)
366 (format port "~
367 [Desktop Entry]~@
368 Name=~a~@
369 Comment=~a~@
370 Exec=~a/bin/xmonad~@
371 Type=Application~%" ,name ,synopsis %output)))))))))
372 (home-page "http://xmonad.org")
373 (description
374 "Xmonad is a tiling window manager for X. Windows are arranged
375 automatically to tile the screen without gaps or overlap, maximising screen
376 use. All features of the window manager are accessible from the keyboard: a
377 mouse is strictly optional. Xmonad is written and extensible in Haskell.
378 Custom layout algorithms, and other extensions, may be written by the user in
379 config files. Layouts are applied dynamically, and different layouts may be
380 used on each workspace. Xinerama is fully supported, allowing windows to be
381 tiled on several screens.")
382 (license license:bsd-3)))
383
384 (define-public ghc-xmonad-contrib
385 (package
386 (name "ghc-xmonad-contrib")
387 (version "0.12")
388 (source
389 (origin
390 (method url-fetch)
391 (uri (string-append "mirror://hackage/package/xmonad-contrib/"
392 "xmonad-contrib-" version ".tar.gz"))
393 (sha256
394 (base32
395 "04gk449dxwmimmb6y2d2hvvmv91r91xlj879qzlyq0mcf723278k"))))
396 (build-system haskell-build-system)
397 (propagated-inputs
398 `(("ghc-mtl" ,ghc-mtl)
399 ("ghc-old-time" ,ghc-old-time)
400 ("ghc-random" ,ghc-random)
401 ("ghc-utf8-string" ,ghc-utf8-string)
402 ("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
403 ("ghc-x11" ,ghc-x11)
404 ("ghc-x11-xft" ,ghc-x11-xft)
405 ("xmonad" ,xmonad)))
406 (home-page "http://xmonad.org")
407 (synopsis "Third party extensions for xmonad")
408 (description
409 "Third party tiling algorithms, configurations, and scripts to Xmonad, a
410 tiling window manager for X.")
411 (license license:bsd-3)))
412
413 (define-public evilwm
414 (package
415 (name "evilwm")
416 (version "1.1.1")
417 (source
418 (origin
419 (method url-fetch)
420 (uri (string-append "http://www.6809.org.uk/evilwm/evilwm-"
421 version ".tar.gz"))
422 (sha256
423 (base32
424 "0ak0yajzk3v4dg5wmaghv6acf7v02a4iw8qxmq5yw5ard8lrqn3r"))
425 (patches (search-patches "evilwm-lost-focus-bug.patch"))))
426 (build-system gnu-build-system)
427 (inputs
428 `(("libx11" ,libx11)
429 ("libxext" ,libxext)
430 ("libxrandr" ,libxrandr)))
431 (arguments
432 `(#:modules ((srfi srfi-26)
433 (guix build utils)
434 (guix build gnu-build-system))
435 #:make-flags (let ((inputs (map (cut assoc-ref %build-inputs <>)
436 '("libx11" "libxext" "libxrandr")))
437 (join (lambda (proc strs)
438 (string-join (map proc strs) " ")))
439 (dash-I (cut string-append "-I" <> "/include"))
440 (dash-L (cut string-append "-L" <> "/lib")))
441 `("desktopfilesdir=$(prefix)/share/xsessions"
442 ,(string-append "prefix=" (assoc-ref %outputs "out"))
443 ,(string-append "CPPFLAGS=" (join dash-I inputs))
444 ,(string-append "LDFLAGS=" (join dash-L inputs))))
445 #:tests? #f ;no tests
446 #:phases (modify-phases %standard-phases
447 (delete 'configure)))) ;no configure script
448 (home-page "http://www.6809.org.uk/evilwm/")
449 (synopsis "Minimalist window manager for the X Window System")
450 (description
451 "evilwm is a minimalist window manager based on aewm, extended to feature
452 many keyboard controls with repositioning and maximize toggles, solid window
453 drags, snap-to-border support, and virtual desktops.")
454 (license (license:x11-style "file:///README"))))
455
456 (define-public fluxbox
457 (package
458 (name "fluxbox")
459 (version "1.3.7")
460 (synopsis "Small and fast window manager")
461 (source (origin
462 (method url-fetch)
463 (uri (string-append "mirror://sourceforge/fluxbox/fluxbox/"
464 version "/fluxbox-" version ".tar.xz"))
465 (sha256
466 (base32
467 "1h1f70y40qd225dqx937vzb4k2cz219agm1zvnjxakn5jkz7b37w"))))
468 (build-system gnu-build-system)
469 (arguments
470 `(#:make-flags '("CPPFLAGS=-U__TIME__") ;ugly, but for reproducibility
471 #:phases
472 (modify-phases %standard-phases
473 (add-after
474 'install 'install-xsession
475 (lambda _
476 (let ((xsessions (string-append %output "/share/xsessions")))
477 (mkdir-p xsessions)
478 (call-with-output-file
479 (string-append xsessions "/fluxbox.desktop")
480 (lambda (port)
481 (format port "~
482 [Desktop Entry]~@
483 Name=~a~@
484 Comment=~a~@
485 Exec=~a/bin/startfluxbox~@
486 Type=Application~%" ,name ,synopsis %output)))))))))
487 (native-inputs
488 `(("pkg-config" ,pkg-config)))
489 (inputs
490 `(("freetype" ,freetype)
491 ("fribidi" ,fribidi)
492 ("imlib2" ,imlib2)
493 ("libx11" ,libx11)
494 ("libxext" ,libxext)
495 ("libxft" ,libxft)
496 ("libxinerama" ,libxinerama)
497 ("libxpm" ,libxpm)
498 ("libxrandr" ,libxrandr)
499 ("libxrender" ,libxrender)))
500 (description "Fluxbox is a window manager. It is light on resources
501 and easy to handle yet full of features to make an easy and fast desktop
502 experience.")
503 (home-page "http://fluxbox.org/")
504 (license license:expat)))
505
506 (define-public awesome
507 (package
508 (name "awesome")
509 (version "4.0")
510 (source
511 (origin (method url-fetch)
512 (uri (string-append
513 "https://github.com/awesomeWM/awesome-releases/raw/"
514 "master/awesome-" version ".tar.xz"))
515 (sha256
516 (base32
517 "0czkcz67sab63gf5m2p2pgg05yinjx60hfb9rfyzdkkg28q9f02w"))
518 (modules '((guix build utils)
519 (srfi srfi-19)))
520 (snippet
521 ;; Remove non-reproducible timestamp and use the date of the
522 ;; source file instead.
523 '(substitute* "common/version.c"
524 (("__DATE__ \" \" __TIME__")
525 (date->string
526 (time-utc->date
527 (make-time time-utc 0
528 (stat:mtime (stat "awesome.c"))))
529 "\"~c\""))))
530 (patches (search-patches "awesome-reproducible-png.patch"))))
531 (build-system cmake-build-system)
532 (native-inputs `(("asciidoc" ,asciidoc)
533 ("docbook-xsl" ,docbook-xsl)
534 ("doxygen" ,doxygen)
535 ("gperf" ,gperf)
536 ("imagemagick" ,imagemagick)
537 ("libxml2" ,libxml2) ;for XML_CATALOG_FILES
538 ("pkg-config" ,pkg-config)
539 ("xmlto" ,xmlto)))
540 (inputs `(("cairo" ,cairo)
541 ("dbus" ,dbus)
542 ("gdk-pixbuf" ,gdk-pixbuf)
543 ("glib" ,glib)
544 ("gobject-introspection" ,gobject-introspection)
545 ("imlib2" ,imlib2)
546 ("libev" ,libev)
547 ("libxcb" ,libxcb)
548 ("libxcursor" ,libxcursor)
549 ("libxdg-basedir" ,libxdg-basedir)
550 ("libxkbcommon" ,libxkbcommon)
551 ("lua" ,lua)
552 ("lua-lgi",lua-lgi)
553 ("pango" ,pango)
554 ("startup-notification" ,startup-notification)
555 ("xcb-util" ,xcb-util)
556 ("xcb-util-cursor" ,xcb-util-cursor)
557 ("xcb-util-image" ,xcb-util-image)
558 ("xcb-util-keysyms" ,xcb-util-keysyms)
559 ("xcb-util-renderutil" ,xcb-util-renderutil)
560 ("xcb-util-xrm" ,xcb-util-xrm)
561 ("xcb-util-wm" ,xcb-util-wm)))
562 (arguments
563 `(;; Let compression happen in our 'compress-documentation' phase so that
564 ;; '--no-name' is used, which removes timestamps from gzip output.
565 #:configure-flags '("-DCOMPRESS_MANPAGES=off")
566
567 #:phases
568 (modify-phases %standard-phases
569 (add-before 'build 'xmlto-skip-validation
570 (lambda _
571 ;; We can't download the necessary schema, so so skip
572 ;; validation and assume they're valid.
573 (substitute* "../build/CMakeFiles/man.dir/build.make"
574 (("/xmlto")
575 (string-append "/xmlto --skip-validation")))
576 #t))
577 (add-before 'configure 'set-lua-paths
578 (lambda* (#:key inputs #:allow-other-keys)
579 ;; The build process needs to load cairo dynamically.
580 (let* ((cairo (string-append
581 (assoc-ref inputs "cairo") "/lib" ))
582 (lua-lgi (assoc-ref inputs "lua-lgi") ))
583 (setenv "LD_LIBRARY_PATH" cairo )
584 (setenv "LUA_PATH" (string-append lua-lgi
585 "/share/lua/5.2/?.lua"))
586 (setenv "LUA_CPATH" (string-append lua-lgi
587 "/lib/lua/5.2/?.so"))
588 #t)))
589 (replace 'check
590 (lambda _
591 ;; There aren't any tests, so just make sure the binary
592 ;; gets built and can be run successfully.
593 (zero? (system* "../build/awesome" "-v"))))
594 (add-after 'install 'wrap
595 (lambda* (#:key inputs outputs #:allow-other-keys)
596 (let* ((awesome (assoc-ref outputs "out"))
597 (cairo (string-append
598 (assoc-ref inputs "cairo") "/lib" ))
599 (lua-lgi (assoc-ref inputs "lua-lgi") ))
600 (wrap-program (string-append awesome "/bin/awesome")
601 `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))
602 `("LD_LIBRARY_PATH" suffix (, cairo))
603 `("LUA_PATH" suffix (,(string-append lua-lgi
604 "/share/lua/5.2/?.lua")))
605 `("LUA_CPATH" suffix (,(string-append
606 lua-lgi "/lib/lua/5.2/?.so"))))))))))
607 (synopsis "Highly configurable window manager")
608 (description
609 "Awesome has been designed as a framework window manager. It is fast, small,
610 dynamic and extensible using the Lua programming language.")
611 (license license:gpl2+)
612 (home-page "https://awesome.naquadah.org/")))
613
614 (define-public menumaker
615 (package
616 (name "menumaker")
617 (version "0.99.10")
618 (source
619 (origin
620 (method url-fetch)
621 (uri (string-append "mirror://sourceforge/menumaker/"
622 "menumaker-" version ".tar.gz"))
623 (sha256
624 (base32
625 "1mm4cvg3kphkkd8nwrhcg6d9nm5ar7mgc0wf6fxk6zck1l7xn8ky"))))
626 (build-system gnu-build-system)
627 (inputs
628 `(("python" ,python)))
629 (synopsis "Heuristics-driven menu generator")
630 (description
631 "MenuMaker is a menu generation utility for a number of X window
632 managers and desktop environments. It is capable of finding lots of
633 installed programs and generating a root menu consistent across all
634 supported window managers, so one will get (almost) the same menu in
635 all of them. Currently supported window managers include:
636
637 @enumerate
638 @item BlackBox
639 @item Deskmenu
640 @item FluxBox
641 @item IceWM
642 @item OpenBox
643 @item PekWM
644 @item WindowMaker
645 @item XFCE
646 @end enumerate\n")
647 (home-page "http://menumaker.sourceforge.net/")
648 (license license:bsd-2)))
649
650 (define-public keybinder
651 (package
652 (name "keybinder")
653 (version "0.3.1")
654 (source
655 (origin
656 (method url-fetch)
657 (uri (string-append "https://github.com/engla/keybinder/releases/"
658 "download/v" version "/keybinder-"
659 version ".tar.gz"))
660 (file-name (string-append name "-" version ".tar.gz"))
661 (sha256
662 (base32
663 "0h52hj3ay8mfhwvmfxbxlfyq74hifdk8wxgxp7fr4iy6189hg7w7"))))
664 (build-system gnu-build-system)
665 (inputs
666 `(("python-2" ,python-2)
667 ("gtk+-2" ,gtk+-2)))
668 (native-inputs
669 `(("python2-pygtk" ,python2-pygtk)
670 ("gtk-doc" ,gtk-doc)
671 ("pkg-config" ,pkg-config)))
672 (synopsis "Library for registering global keyboard shortcuts")
673 (description
674 "Keybinder is a library for registering global keyboard shortcuts.
675 Keybinder works with GTK-based applications using the X Window System.")
676 (home-page "https://github.com/engla/keybinder")
677 (license license:gpl2+)))