gnu: Add emacs-restclient.
[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")
631ced1b 75 (version "3.1")
5c37126f
ED
76 (source (origin
77 (method url-fetch)
631ced1b
TGR
78 (uri (string-append "https://github.com/martinh/libconfuse/"
79 "releases/download/v" version
80 "/confuse-" version ".tar.xz"))
5c37126f
ED
81 (sha256
82 (base32
631ced1b 83 "0rnacgfkd88qyxrfdfzn9cxz533l9s5wrzb9093f9mbi00gg6wc1"))))
5c37126f 84 (build-system gnu-build-system)
631ced1b 85 (home-page "https://github.com/martinh/libconfuse")
5c37126f
ED
86 (synopsis "Configuration file parser library")
87 (description "libconfuse is a configuration file parser library. It
88supports sections and (lists of) values (strings, integers, floats, booleans
89or other sections), as well as some other features (such as
90single/double-quoted strings, environment variable expansion, functions and
91nested include statements).")
0ede252b 92 (license license:isc)))
5c37126f 93
1268e52d 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
124the leaves of a full binary tree.")
0ede252b 125 (license license:bsd-2)))
1268e52d 126
63b1bdbc
ED
127(define-public i3status
128 (package
129 (name "i3status")
358dae16 130 (version "2.11")
63b1bdbc
ED
131 (source (origin
132 (method url-fetch)
fdad1f3c 133 (uri (string-append "https://i3wm.org/i3status/i3status-"
63b1bdbc
ED
134 version ".tar.bz2"))
135 (sha256
136 (base32
358dae16 137 "0pwcy599fw8by1a1sf91crkqba7679qhvhbacpmhis8c1xrpxnwq"))))
63b1bdbc
ED
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)
766a22fb
AM
150 ("pulseaudio" ,pulseaudio)
151 ("libnl" ,libnl)
63b1bdbc
ED
152 ("libcap" ,libcap)
153 ("asciidoc" ,asciidoc)))
766a22fb
AM
154 (native-inputs
155 `(("pkg-config" ,pkg-config)))
fdad1f3c 156 (home-page "https://i3wm.org/i3status/")
63b1bdbc
ED
157 (synopsis "Status bar for i3bar, dzen2, xmobar or similar programs")
158 (description "i3status is a small program for generating a status bar for
159i3bar, dzen2, xmobar or similar programs. It is designed to be very efficient
160by issuing a very small number of system calls, as one generally wants to
161update such a status line every second. This ensures that even under high
162load, your status bar is updated correctly. Also, it saves a bit of energy by
163not hogging your CPU as much as spawning the corresponding amount of shell
164commands would.")
0ede252b 165 (license license:bsd-3)))
63b1bdbc 166
bda2ded6
ED
167(define-public i3-wm
168 (package
169 (name "i3-wm")
4bd391f5 170 (version "4.13")
bda2ded6
ED
171 (source (origin
172 (method url-fetch)
8658d403 173 (uri (string-append "https://i3wm.org/downloads/i3-"
bda2ded6
ED
174 version ".tar.bz2"))
175 (sha256
176 (base32
4bd391f5 177 "12ngz32swh9n85xy0cz1lq16aqi9ys5hq19v589q9a97wn1k3hcl"))))
bda2ded6
ED
178 (build-system gnu-build-system)
179 (arguments
4bd391f5 180 `(#:make-flags
4b0e6367
KK
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")
4bd391f5
LF
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))
bda2ded6
ED
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)
4bd391f5 198 ("xcb-util-xrm" ,xcb-util-xrm)
bda2ded6
ED
199 ("libxkbcommon" ,libxkbcommon)
200 ("libev" ,libev)
201 ("libyajl" ,libyajl)
202 ("asciidoc" ,asciidoc)
203 ("xmlto" ,xmlto)
204 ("perl-pod-simple" ,perl-pod-simple)
bda2ded6
ED
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)
4bd391f5
LF
213 ("pkg-config" ,pkg-config)
214 ;; For building the documentation.
4b0e6367 215 ("libxml2" ,libxml2)
4bd391f5 216 ("docbook-xsl" ,docbook-xsl)))
8658d403 217 (home-page "https://i3wm.org/")
bda2ded6 218 (synopsis "Improved tiling window manager")
a124bbd2 219 (description "A tiling window manager, completely written
bda2ded6
ED
220from scratch. i3 is primarily targeted at advanced users and
221developers.")
0ede252b 222 (license license:bsd-3)))
6e38c4be 223
3e7cb70a
MB
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
244based IPC interface it provides (if enabled in the configuration file).
245You can then subscribe to events or send messages and receive their replies.")
246 ;; Can be used with either license.
2f3108ad 247 (license (list license:gpl3+ license:perl-license))))
3e7cb70a 248
c165591d
IVB
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
283with the i3 window manager via its IPC socket. It can send commands and other
284kinds of messages to i3, select the affected containers, filter results and
285subscribe to events.")
286 (license license:gpl3+)))
287
288(define-public python2-i3-py
289 (package-with-python2 python-i3-py))
290
37356e0b
IVB
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
331and locate windows on all your workspaces, using an interactive dmenu
332prompt.")
333 (license (license:non-copyleft "http://www.wtfpl.net/txt/copying/")))))
334
6e38c4be
SB
335(define-public xmonad
336 (package
337 (name "xmonad")
174b091f 338 (version "0.12")
6e38c4be
SB
339 (synopsis "Tiling window manager")
340 (source (origin
341 (method url-fetch)
966a543b 342 (uri (string-append "mirror://hackage/package/xmonad/"
ca80b8ba 343 name "-" version ".tar.gz"))
6e38c4be
SB
344 (sha256
345 (base32
174b091f 346 "1mzx3p17ppgmi30q3phaj58x6kxn73pbbkn9v9gzgmd8skdlkxp8"))))
6e38c4be
SB
347 (build-system haskell-build-system)
348 (inputs
174b091f
MM
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)))
6e38c4be
SB
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
375automatically to tile the screen without gaps or overlap, maximising screen
376use. All features of the window manager are accessible from the keyboard: a
377mouse is strictly optional. Xmonad is written and extensible in Haskell.
378Custom layout algorithms, and other extensions, may be written by the user in
379config files. Layouts are applied dynamically, and different layouts may be
380used on each workspace. Xinerama is fully supported, allowing windows to be
381tiled on several screens.")
0ede252b 382 (license license:bsd-3)))
78edf44c
SB
383
384(define-public ghc-xmonad-contrib
385 (package
386 (name "ghc-xmonad-contrib")
174b091f 387 (version "0.12")
78edf44c
SB
388 (source
389 (origin
390 (method url-fetch)
966a543b 391 (uri (string-append "mirror://hackage/package/xmonad-contrib/"
78edf44c
SB
392 "xmonad-contrib-" version ".tar.gz"))
393 (sha256
394 (base32
174b091f 395 "04gk449dxwmimmb6y2d2hvvmv91r91xlj879qzlyq0mcf723278k"))))
78edf44c
SB
396 (build-system haskell-build-system)
397 (propagated-inputs
398 `(("ghc-mtl" ,ghc-mtl)
2687f7db 399 ("ghc-old-time" ,ghc-old-time)
78edf44c
SB
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
410tiling window manager for X.")
0ede252b 411 (license license:bsd-3)))
45e10968
EB
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
c595cd47 424 "0ak0yajzk3v4dg5wmaghv6acf7v02a4iw8qxmq5yw5ard8lrqn3r"))
fc1adab1 425 (patches (search-patches "evilwm-lost-focus-bug.patch"))))
45e10968
EB
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
452many keyboard controls with repositioning and maximize toggles, solid window
453drags, snap-to-border support, and virtual desktops.")
0ede252b
DM
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)
de67e922 463 (uri (string-append "mirror://sourceforge/fluxbox/fluxbox/"
0ede252b
DM
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
501and easy to handle yet full of features to make an easy and fast desktop
502experience.")
503 (home-page "http://fluxbox.org/")
504 (license license:expat)))
3d1240aa
CZ
505
506(define-public awesome
507 (package
508 (name "awesome")
91426243 509 (version "4.0")
3d1240aa
CZ
510 (source
511 (origin (method url-fetch)
512 (uri (string-append
91426243 513 "https://github.com/awesomeWM/awesome-releases/raw/"
514 "master/awesome-" version ".tar.xz"))
3d1240aa
CZ
515 (sha256
516 (base32
91426243 517 "0czkcz67sab63gf5m2p2pgg05yinjx60hfb9rfyzdkkg28q9f02w"))
3d1240aa
CZ
518 (modules '((guix build utils)
519 (srfi srfi-19)))
3d1240aa
CZ
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)
22037a32 544 ("gobject-introspection" ,gobject-introspection)
3d1240aa
CZ
545 ("imlib2" ,imlib2)
546 ("libev" ,libev)
547 ("libxcb" ,libxcb)
548 ("libxcursor" ,libxcursor)
549 ("libxdg-basedir" ,libxdg-basedir)
91426243 550 ("libxkbcommon" ,libxkbcommon)
22037a32 551 ("lua" ,lua)
552 ("lua-lgi",lua-lgi)
3d1240aa
CZ
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)
91426243 560 ("xcb-util-xrm" ,xcb-util-xrm)
3d1240aa
CZ
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
22037a32 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"))))))))))
3d1240aa
CZ
607 (synopsis "Highly configurable window manager")
608 (description
c4dd0def 609 "Awesome has been designed as a framework window manager. It is fast, small,
610dynamic and extensible using the Lua programming language.")
3d1240aa
CZ
611 (license license:gpl2+)
612 (home-page "https://awesome.naquadah.org/")))
395751c0 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
632managers and desktop environments. It is capable of finding lots of
633installed programs and generating a root menu consistent across all
634supported window managers, so one will get (almost) the same menu in
635all 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)))
dbf544f9 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.
675Keybinder works with GTK-based applications using the X Window System.")
676 (home-page "https://github.com/engla/keybinder")
677 (license license:gpl2+)))