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