gnu: pure: Update to 0.68.
[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 10;;; Copyright © 2016 Carlo Zancanaro <carlo@zancanaro.id.au>
4b563b34 11;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
4a78fd46 12;;; Copyright © 2016, 2017, 2018 Nils Gillmann <ng0@n0.is>
22037a32 13;;; Copyright © 2016 doncatnip <gnopap@gmail.com>
37356e0b 14;;; Copyright © 2016 Ivan Vilata i Balaguer <ivan@selidor.net>
174b091f 15;;; Copyright © 2017 Mekeor Melire <mekeor.melire@gmail.com>
3e7cb70a 16;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
6e864d00 17;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
d2ea8064 18;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
bda2ded6
ED
19;;;
20;;; This file is part of GNU Guix.
21;;;
22;;; GNU Guix is free software; you can redistribute it and/or modify it
23;;; under the terms of the GNU General Public License as published by
24;;; the Free Software Foundation; either version 3 of the License, or (at
25;;; your option) any later version.
26;;;
27;;; GNU Guix is distributed in the hope that it will be useful, but
28;;; WITHOUT ANY WARRANTY; without even the implied warranty of
29;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30;;; GNU General Public License for more details.
31;;;
32;;; You should have received a copy of the GNU General Public License
33;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
34
35(define-module (gnu packages wm)
0ede252b 36 #:use-module ((guix licenses) #:prefix license:)
bda2ded6 37 #:use-module (guix packages)
c595cd47 38 #:use-module (gnu packages)
bda2ded6 39 #:use-module (gnu packages linux)
3d1240aa 40 #:use-module (guix build-system cmake)
bda2ded6 41 #:use-module (guix build-system gnu)
6e38c4be 42 #:use-module (guix build-system haskell)
3e7cb70a 43 #:use-module (guix build-system perl)
c165591d 44 #:use-module (guix build-system python)
6e38c4be 45 #:use-module (gnu packages haskell)
a06b9b50 46 #:use-module (gnu packages haskell-check)
44b7374a 47 #:use-module (gnu packages haskell-web)
4b563b34 48 #:use-module (gnu packages autotools)
b4cb9308 49 #:use-module (gnu packages bison)
b0a2dc72 50 #:use-module (gnu packages gawk)
bda2ded6
ED
51 #:use-module (gnu packages base)
52 #:use-module (gnu packages pkg-config)
53 #:use-module (gnu packages perl)
766a22fb 54 #:use-module (gnu packages pulseaudio)
bda2ded6
ED
55 #:use-module (gnu packages xorg)
56 #:use-module (gnu packages xdisorg)
99828fa7 57 #:use-module (gnu packages documentation)
bda2ded6
ED
58 #:use-module (gnu packages xml)
59 #:use-module (gnu packages m4)
60 #:use-module (gnu packages docbook)
0ede252b 61 #:use-module (gnu packages image)
bda2ded6 62 #:use-module (gnu packages pcre)
395751c0 63 #:use-module (gnu packages python)
bda2ded6
ED
64 #:use-module (gnu packages gtk)
65 #:use-module (gnu packages libevent)
0ede252b 66 #:use-module (gnu packages fribidi)
bda2ded6
ED
67 #:use-module (gnu packages maths)
68 #:use-module (gnu packages web)
0ede252b 69 #:use-module (gnu packages fontutils)
3d1240aa
CZ
70 #:use-module (gnu packages freedesktop)
71 #:use-module (gnu packages glib)
72 #:use-module (gnu packages gperf)
73 #:use-module (gnu packages imagemagick)
74 #:use-module (gnu packages lua)
4b563b34 75 #:use-module (gnu packages linux)
37356e0b 76 #:use-module (gnu packages suckless)
bda2ded6
ED
77 #:use-module (guix download)
78 #:use-module (guix git-download))
79
5c37126f
ED
80(define-public libconfuse
81 (package
82 (name "libconfuse")
2c7321ea 83 (version "3.2.1")
5c37126f
ED
84 (source (origin
85 (method url-fetch)
631ced1b
TGR
86 (uri (string-append "https://github.com/martinh/libconfuse/"
87 "releases/download/v" version
88 "/confuse-" version ".tar.xz"))
5c37126f
ED
89 (sha256
90 (base32
2c7321ea 91 "0pnjmlj9i0alp407qd7c0vq83sz7gpsjrbdgpcn4xvzjp9r35ii3"))))
5c37126f 92 (build-system gnu-build-system)
631ced1b 93 (home-page "https://github.com/martinh/libconfuse")
5c37126f
ED
94 (synopsis "Configuration file parser library")
95 (description "libconfuse is a configuration file parser library. It
96supports sections and (lists of) values (strings, integers, floats, booleans
97or other sections), as well as some other features (such as
98single/double-quoted strings, environment variable expansion, functions and
99nested include statements).")
0ede252b 100 (license license:isc)))
5c37126f 101
1268e52d 102(define-public bspwm
103 (package
104 (name "bspwm")
f36685b0 105 (version "0.9.4")
1268e52d 106 (source
107 (origin
108 (file-name (string-append name "-" version ".tar.gz"))
109 (method url-fetch)
110 (uri (string-append
111 "https://github.com/baskerville/bspwm/archive/"
112 version ".tar.gz"))
113 (sha256
114 (base32
f36685b0 115 "0yjr0vzbj3ar8qfr6gvpvjd82ay8iy1sg2fkw2swghlqiy6ix4kw"))))
1268e52d 116 (build-system gnu-build-system)
117 (inputs
118 `(("libxcb" ,libxcb)
119 ("libxinerama" ,libxinerama)
120 ("sxhkd" ,sxhkd)
121 ("xcb-util" ,xcb-util)
122 ("xcb-util-keysyms" ,xcb-util-keysyms)
123 ("xcb-util-wm" ,xcb-util-wm)))
124 (arguments
dc1d3cde 125 '(#:phases (modify-phases %standard-phases (delete 'configure))
1268e52d 126 #:tests? #f ; no check target
127 #:make-flags (list "CC=gcc"
128 (string-append "PREFIX=" %output))))
129 (home-page "https://github.com/baskerville/bspwm")
130 (synopsis "Tiling window manager based on binary space partitioning")
131 (description "bspwm is a tiling window manager that represents windows as
132the leaves of a full binary tree.")
0ede252b 133 (license license:bsd-2)))
1268e52d 134
63b1bdbc
ED
135(define-public i3status
136 (package
137 (name "i3status")
358dae16 138 (version "2.11")
63b1bdbc
ED
139 (source (origin
140 (method url-fetch)
fdad1f3c 141 (uri (string-append "https://i3wm.org/i3status/i3status-"
63b1bdbc
ED
142 version ".tar.bz2"))
143 (sha256
144 (base32
358dae16 145 "0pwcy599fw8by1a1sf91crkqba7679qhvhbacpmhis8c1xrpxnwq"))))
63b1bdbc
ED
146 (build-system gnu-build-system)
147 (arguments
148 `(#:make-flags (list "CC=gcc" (string-append "PREFIX=" %output))
149 #:phases
150 (modify-phases %standard-phases
151 (delete 'configure))
152 #:tests? #f)) ; no test suite
153 (inputs
154 `(("openlibm" ,openlibm)
155 ("libconfuse" ,libconfuse)
156 ("libyajl" ,libyajl)
157 ("alsa-lib" ,alsa-lib)
766a22fb
AM
158 ("pulseaudio" ,pulseaudio)
159 ("libnl" ,libnl)
63b1bdbc
ED
160 ("libcap" ,libcap)
161 ("asciidoc" ,asciidoc)))
766a22fb
AM
162 (native-inputs
163 `(("pkg-config" ,pkg-config)))
fdad1f3c 164 (home-page "https://i3wm.org/i3status/")
63b1bdbc
ED
165 (synopsis "Status bar for i3bar, dzen2, xmobar or similar programs")
166 (description "i3status is a small program for generating a status bar for
167i3bar, dzen2, xmobar or similar programs. It is designed to be very efficient
168by issuing a very small number of system calls, as one generally wants to
169update such a status line every second. This ensures that even under high
170load, your status bar is updated correctly. Also, it saves a bit of energy by
171not hogging your CPU as much as spawning the corresponding amount of shell
172commands would.")
0ede252b 173 (license license:bsd-3)))
63b1bdbc 174
bda2ded6
ED
175(define-public i3-wm
176 (package
177 (name "i3-wm")
1a5459ca 178 (version "4.15")
bda2ded6
ED
179 (source (origin
180 (method url-fetch)
8658d403 181 (uri (string-append "https://i3wm.org/downloads/i3-"
bda2ded6
ED
182 version ".tar.bz2"))
183 (sha256
184 (base32
1a5459ca 185 "09jk70hsdxab24lqvj2f30ijrkbv3f6q9xi5dcsax1dw3x6m4z91"))))
bda2ded6
ED
186 (build-system gnu-build-system)
187 (arguments
4bd391f5 188 `(#:make-flags
4b0e6367
KK
189 (list "CC=gcc"
190 (string-append "PREFIX=" %output)
191 ;; This works around the following error:
192 ;; 'error: ‘for’ loop initial declarations are only allowed in C99
193 ;; or C11 mode'
194 "CFLAGS=-std=c11")
4bd391f5
LF
195 ;; The build system tries to build in a separate directory, but that
196 ;; seems to be unnecessary.
197 #:configure-flags '("--disable-builddir")
198 ;; The test suite appears to require the unpackaged Perl module AnyEvent.
199 #:tests? #f))
bda2ded6
ED
200 (inputs
201 `(("libxcb" ,libxcb)
202 ("xcb-util" ,xcb-util)
203 ("xcb-util-cursor" ,xcb-util-cursor)
204 ("xcb-util-keysyms" ,xcb-util-keysyms)
205 ("xcb-util-wm" ,xcb-util-wm)
4bd391f5 206 ("xcb-util-xrm" ,xcb-util-xrm)
bda2ded6
ED
207 ("libxkbcommon" ,libxkbcommon)
208 ("libev" ,libev)
209 ("libyajl" ,libyajl)
210 ("asciidoc" ,asciidoc)
211 ("xmlto" ,xmlto)
212 ("perl-pod-simple" ,perl-pod-simple)
bda2ded6
ED
213 ("libx11" ,libx11)
214 ("pcre" ,pcre)
215 ("startup-notification" ,startup-notification)
216 ("pango" ,pango)
217 ("cairo" ,cairo)))
218 (native-inputs
219 `(("which" ,which)
220 ("perl" ,perl)
4bd391f5
LF
221 ("pkg-config" ,pkg-config)
222 ;; For building the documentation.
4b0e6367 223 ("libxml2" ,libxml2)
4bd391f5 224 ("docbook-xsl" ,docbook-xsl)))
8658d403 225 (home-page "https://i3wm.org/")
bda2ded6 226 (synopsis "Improved tiling window manager")
a124bbd2 227 (description "A tiling window manager, completely written
bda2ded6
ED
228from scratch. i3 is primarily targeted at advanced users and
229developers.")
0ede252b 230 (license license:bsd-3)))
6e38c4be 231
3e7cb70a
MB
232(define-public perl-anyevent-i3
233 (package
234 (name "perl-anyevent-i3")
ec5c986e 235 (version "0.17")
3e7cb70a
MB
236 (source (origin
237 (method url-fetch)
238 (uri (string-append "mirror://cpan/authors/id/M/MS/MSTPLBG/"
239 "AnyEvent-I3-" version ".tar.gz"))
240 (sha256
241 (base32
ec5c986e 242 "0qvd9bq16jyy7v3ma82qcnvz9j503bw0mh7h55gkjf7ir62ck0jk"))))
3e7cb70a
MB
243 (build-system perl-build-system)
244 (propagated-inputs
245 `(("perl-anyevent" ,perl-anyevent)
246 ("perl-json-xs" ,perl-json-xs)))
247 (home-page "http://search.cpan.org/dist/AnyEvent-I3")
248 (synopsis
249 "Communicate with the i3 window manager through perl")
250 (description
251 "This module connects to the i3 window manager using the UNIX socket
252based IPC interface it provides (if enabled in the configuration file).
253You can then subscribe to events or send messages and receive their replies.")
254 ;; Can be used with either license.
2f3108ad 255 (license (list license:gpl3+ license:perl-license))))
3e7cb70a 256
c165591d
IVB
257(define-public python-i3-py
258 (package
259 (name "python-i3-py")
260 (version "0.6.5")
261 (source
262 (origin
263 ;; The latest release is not tagged in Git nor has an entry in PyPi,
264 ;; but there is still a clear commit for it, and it's been the last one
265 ;; for years.
266 (method git-fetch)
267 (uri (git-reference
268 (url "https://github.com/ziberna/i3-py.git")
269 (commit "27f88a616e9ecc340e7d041d3d00782f8a1964c1")))
270 (sha256
271 (base32
272 "1nm719dc2xqlll7vj4c4m7mpjb27lpn3bg3c66gajvnrz2x1nmxs"))
273 (file-name (string-append name "-" version "-checkout"))))
274 (build-system python-build-system)
275 (arguments
276 `(#:tests? #f ; no tests yet
277 #:phases (modify-phases %standard-phases
278 (add-after 'install 'install-doc
279 ;; Copy readme file to documentation directory.
280 (lambda* (#:key outputs #:allow-other-keys)
281 (let ((doc (string-append (assoc-ref outputs "out")
282 "/share/doc/" ,name)))
283 (install-file "README.md" doc)
284 ;; Avoid unspecified return value.
285 #t))))))
286 (propagated-inputs
287 `(("i3-wm" ,i3-wm)))
288 (home-page "https://github.com/ziberna/i3-py")
289 (synopsis "Python interface to the i3 window manager")
290 (description "This package allows you to interact from a Python program
291with the i3 window manager via its IPC socket. It can send commands and other
292kinds of messages to i3, select the affected containers, filter results and
293subscribe to events.")
294 (license license:gpl3+)))
295
296(define-public python2-i3-py
297 (package-with-python2 python-i3-py))
298
37356e0b
IVB
299(define-public quickswitch-i3
300 (let ((commit "ed692b1e8f43b95bd907ced26238ce8ccb2ed28f")
301 (revision "1")) ; Guix package revision
302 (package
303 (name "quickswitch-i3")
304 (version (string-append "2.2-" revision "."
305 (string-take commit 7)))
306 (source
307 (origin
308 ;; The latest commit is a few years old and just a couple commits
309 ;; after the last tagged release, so we use that latest commit
310 ;; instead of the release.
311 (method git-fetch)
312 (uri (git-reference
313 (url "https://github.com/proxypoke/quickswitch-for-i3.git")
314 (commit commit)))
315 (sha256
316 (base32
317 "0447077sama80jcdg5p64zjsvafmz5rbdrirhm1adcdjhkh6iqc5"))
318 (patches (search-patches "quickswitch-fix-dmenu-check.patch"))
319 (file-name (string-append name "-" version "-checkout"))))
320 (build-system python-build-system)
321 (arguments
322 `(#:tests? #f ; no tests yet
323 #:phases (modify-phases %standard-phases
324 (add-after 'install 'install-doc
325 ;; Copy readme file to documentation directory.
326 (lambda* (#:key outputs #:allow-other-keys)
327 (let ((doc (string-append (assoc-ref outputs "out")
328 "/share/doc/" ,name)))
329 (install-file "README.rst" doc)
330 ;; Avoid unspecified return value.
331 #t))))))
332 (inputs
333 `(("python-i3-py" ,python-i3-py)
334 ("dmenu" ,dmenu)))
335 (home-page "https://github.com/proxypoke/quickswitch-for-i3")
336 (synopsis "Quickly change to and locate windows in the i3 window manager")
337 (description
338 "This utility for the i3 window manager allows you to quickly switch to
339and locate windows on all your workspaces, using an interactive dmenu
340prompt.")
341 (license (license:non-copyleft "http://www.wtfpl.net/txt/copying/")))))
342
4b563b34 343(define-public i3lock-color
344 (package
345 (name "i3lock-color")
346 (version "2.10.1c")
347 (source
348 (origin
349 (method url-fetch)
350 (uri (string-append "https://github.com/PandorasFox/i3lock-color/"
351 "archive/" version ".tar.gz"))
352 (file-name (string-append name "-" version ".tar.gz"))
353 (sha256
354 (base32
355 "119xvdm4r6irqk0mar80hx6s8ydw26y35h7712rd7nbg7pb7i053"))))
356 (build-system gnu-build-system)
357 (arguments
358 `(#:tests? #f ;No tests included.
359 #:phases
360 (modify-phases %standard-phases
361 (add-after 'unpack 'bootstrap
362 (lambda _
363 (zero? (system* "autoreconf" "-vfi")))))))
364 (inputs
365 `(("xcb-util-image" ,xcb-util-image)
366 ("xcb-util" ,xcb-util)
367 ("libxcb" ,libxcb)
368 ("linux-pam" ,linux-pam)
369 ("libxkbcommon" ,libxkbcommon)
370 ("libev" ,libev)
371 ("cairo" ,cairo)))
372 (native-inputs
373 `(("pkg-config" ,pkg-config)
374 ("autoconf" ,autoconf)
375 ("automake" ,automake)))
376 (home-page "https://github.com/PandorasFox/i3lock-color")
377 (synopsis "Screen locker with color configuration support")
378 (description
379 "i3lock-color is a simpler X11 screen locker derived from i3lock.
380Features include:
381
382@enumerate
383@item forking process, the locked screen is preserved when you suspend to RAM;
384@item specify background color or image to be displayed in the lock screen;
385@item many additional color options.
386@end enumerate")
387 (license license:bsd-3)))
388
b0a2dc72 389(define-public i3lock-fancy
390 (package
391 (name "i3lock-fancy")
392 (version "0.2")
393 (source
394 (origin
395 (method url-fetch)
396 (uri (string-append "https://github.com/meskarune/i3lock-fancy/archive/"
397 version ".tar.gz"))
398 (file-name (string-append name "-" version ".tar.gz"))
399 (sha256
400 (base32
401 "020m7mnfq5cvir7p9v3hkb7cvb4cai33wppxl2zdwscwwjnchc5y"))))
402 (build-system gnu-build-system)
403 (arguments
404 `(#:tests? #f ;No tests included
405 #:phases
406 (modify-phases %standard-phases
407 (replace 'configure
408 (lambda* (#:key inputs outputs #:allow-other-keys)
409 (let* ((out (assoc-ref outputs "out"))
410 (icons (string-append out "/share/i3lock-fancy/icons/"))
411 (wmctrl (string-append (assoc-ref inputs "wmctrl")
412 "/bin/wmctrl"))
413 (mconvert (string-append (assoc-ref inputs "imagemagick")
414 "/bin/convert"))
415 (mimport (string-append (assoc-ref inputs "imagemagick")
416 "/bin/import"))
417 (awk (string-append (assoc-ref inputs "gawk")
418 "/bin/gawk")))
419
420 (substitute* "lock"
421 (("$(which wmctrl)") wmctrl)
422 (("convert") mconvert)
423 (("shot=\\(import") (string-append "shot=\(" mimport))
424 (("awk -F") (string-append awk " -F"))
425 ((" awk") awk)
426 (("\\$scriptpath/icons/") icons))
427 #t)))
428 (delete 'build)
429 (replace 'install
430 (lambda* (#:key inputs outputs #:allow-other-keys)
431 (let* ((out (assoc-ref outputs "out"))
432 (bin (string-append out "/bin"))
433 (icons (string-append out "/share/i3lock-fancy/icons/")))
434
435 (install-file "lock" bin)
436 (rename-file (string-append bin "/lock")
437 (string-append bin "/i3lock-fancy"))
438 (copy-recursively "icons" icons)
439 #t))))))
440 (native-inputs
441 `(("imagemagick" ,imagemagick)
442 ("wmctrl" ,wmctrl)
443 ("gawk" ,gawk)))
444 (home-page "https://github.com/meskarune/i3lock-fancy")
445 (synopsis "Screen locker with screenshot function")
446 (description
447 "@code{i3lock-fancy} is a Bash script that takes a screenshot of
448the desktop, blurs the background and adds a lock icon and text.
449It requires @code{i3lock-color} or @code{i3lock} and can optionally
450be passed any screenshot util like @code{scrot}.
451This screen locker can be used with any window manager or
452desktop environment.")
453 (license license:expat)))
454
6e38c4be
SB
455(define-public xmonad
456 (package
457 (name "xmonad")
cffaca95 458 (version "0.13")
6e38c4be
SB
459 (synopsis "Tiling window manager")
460 (source (origin
461 (method url-fetch)
966a543b 462 (uri (string-append "mirror://hackage/package/xmonad/"
ca80b8ba 463 name "-" version ".tar.gz"))
6e38c4be
SB
464 (sha256
465 (base32
cffaca95 466 "1jh3lcs20qpna36fa5a0r174xqrsxhj10x1rm5vwf64zariipy7r"))))
6e38c4be
SB
467 (build-system haskell-build-system)
468 (inputs
174b091f
MM
469 `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
470 ("ghc-mtl" ,ghc-mtl)
471 ("ghc-quickcheck" ,ghc-quickcheck)
472 ("ghc-setlocale" ,ghc-setlocale)
473 ("ghc-utf8-string" ,ghc-utf8-string)
474 ("ghc-x11" ,ghc-x11)))
6e38c4be
SB
475 (arguments
476 `(#:phases
477 (modify-phases %standard-phases
478 (add-after
479 'install 'install-xsession
480 (lambda _
481 (let* ((xsessions (string-append %output "/share/xsessions")))
482 (mkdir-p xsessions)
483 (call-with-output-file
484 (string-append xsessions "/xmonad.desktop")
485 (lambda (port)
486 (format port "~
487 [Desktop Entry]~@
488 Name=~a~@
489 Comment=~a~@
490 Exec=~a/bin/xmonad~@
491 Type=Application~%" ,name ,synopsis %output)))))))))
492 (home-page "http://xmonad.org")
493 (description
494 "Xmonad is a tiling window manager for X. Windows are arranged
495automatically to tile the screen without gaps or overlap, maximising screen
496use. All features of the window manager are accessible from the keyboard: a
497mouse is strictly optional. Xmonad is written and extensible in Haskell.
498Custom layout algorithms, and other extensions, may be written by the user in
499config files. Layouts are applied dynamically, and different layouts may be
500used on each workspace. Xinerama is fully supported, allowing windows to be
501tiled on several screens.")
0ede252b 502 (license license:bsd-3)))
78edf44c 503
6e864d00
OP
504(define-public xmobar
505 (package
506 (name "xmobar")
d2ea8064 507 (version "0.25")
6e864d00
OP
508 (source (origin
509 (method url-fetch)
510 (uri (string-append "mirror://hackage/package/xmobar/"
511 name "-" version ".tar.gz"))
512 (sha256
513 (base32
d2ea8064 514 "0382r4vzqkz76jlp2069rdbwf4gh1a22r9w4rkphcn5qflw0dlb6"))))
6e864d00
OP
515 (build-system haskell-build-system)
516 (inputs
d2ea8064
TGR
517 `(("ghc-hinotify" ,ghc-hinotify)
518 ("ghc-http" ,ghc-http)
519 ("ghc-iwlib" ,ghc-iwlib)
6e864d00
OP
520 ("ghc-parsec" ,ghc-parsec)
521 ("ghc-regex-compat" ,ghc-regex-compat)
522 ("ghc-stm" ,ghc-stm)
523 ("ghc-x11-xft" ,ghc-x11-xft)
d2ea8064 524 ("libxpm" ,libxpm)))
6e864d00
OP
525 (arguments
526 `(#:configure-flags
d2ea8064
TGR
527 (list (string-append "--flags="
528 (string-join (list "with_inotify"
529 "with_iwlib"
530 "with_utf8"
531 "with_weather"
532 "with_xft"
533 "with_xpm")
534 " ")))))
6e864d00
OP
535 (home-page "http://xmobar.org")
536 (synopsis "Minimalistic text based status bar")
537 (description
538 "@code{xmobar} is a lightweight, text-based, status bar written in
539Haskell. It was originally designed to be used together with Xmonad, but it
540is also usable with any other window manager. While xmobar is written in
541Haskell, no knowledge of the language is required to install and use it.")
542 (license license:bsd-3)))
543
78edf44c
SB
544(define-public ghc-xmonad-contrib
545 (package
546 (name "ghc-xmonad-contrib")
cffaca95 547 (version "0.13")
78edf44c
SB
548 (source
549 (origin
550 (method url-fetch)
966a543b 551 (uri (string-append "mirror://hackage/package/xmonad-contrib/"
78edf44c
SB
552 "xmonad-contrib-" version ".tar.gz"))
553 (sha256
554 (base32
cffaca95 555 "0vj72jhfng6y7hv5frx2v99jvl3jn9rbpk2j7xw9vydiwmzq4q57"))))
78edf44c
SB
556 (build-system haskell-build-system)
557 (propagated-inputs
558 `(("ghc-mtl" ,ghc-mtl)
2687f7db 559 ("ghc-old-time" ,ghc-old-time)
78edf44c
SB
560 ("ghc-random" ,ghc-random)
561 ("ghc-utf8-string" ,ghc-utf8-string)
562 ("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
563 ("ghc-x11" ,ghc-x11)
564 ("ghc-x11-xft" ,ghc-x11-xft)
565 ("xmonad" ,xmonad)))
566 (home-page "http://xmonad.org")
567 (synopsis "Third party extensions for xmonad")
568 (description
569 "Third party tiling algorithms, configurations, and scripts to Xmonad, a
570tiling window manager for X.")
0ede252b 571 (license license:bsd-3)))
45e10968
EB
572
573(define-public evilwm
574 (package
575 (name "evilwm")
576 (version "1.1.1")
577 (source
578 (origin
579 (method url-fetch)
580 (uri (string-append "http://www.6809.org.uk/evilwm/evilwm-"
581 version ".tar.gz"))
582 (sha256
583 (base32
c595cd47 584 "0ak0yajzk3v4dg5wmaghv6acf7v02a4iw8qxmq5yw5ard8lrqn3r"))
fc1adab1 585 (patches (search-patches "evilwm-lost-focus-bug.patch"))))
45e10968
EB
586 (build-system gnu-build-system)
587 (inputs
588 `(("libx11" ,libx11)
589 ("libxext" ,libxext)
590 ("libxrandr" ,libxrandr)))
591 (arguments
592 `(#:modules ((srfi srfi-26)
593 (guix build utils)
594 (guix build gnu-build-system))
595 #:make-flags (let ((inputs (map (cut assoc-ref %build-inputs <>)
596 '("libx11" "libxext" "libxrandr")))
597 (join (lambda (proc strs)
598 (string-join (map proc strs) " ")))
599 (dash-I (cut string-append "-I" <> "/include"))
600 (dash-L (cut string-append "-L" <> "/lib")))
601 `("desktopfilesdir=$(prefix)/share/xsessions"
602 ,(string-append "prefix=" (assoc-ref %outputs "out"))
603 ,(string-append "CPPFLAGS=" (join dash-I inputs))
604 ,(string-append "LDFLAGS=" (join dash-L inputs))))
605 #:tests? #f ;no tests
606 #:phases (modify-phases %standard-phases
607 (delete 'configure)))) ;no configure script
608 (home-page "http://www.6809.org.uk/evilwm/")
609 (synopsis "Minimalist window manager for the X Window System")
610 (description
611 "evilwm is a minimalist window manager based on aewm, extended to feature
612many keyboard controls with repositioning and maximize toggles, solid window
613drags, snap-to-border support, and virtual desktops.")
0ede252b
DM
614 (license (license:x11-style "file:///README"))))
615
616(define-public fluxbox
617 (package
618 (name "fluxbox")
619 (version "1.3.7")
620 (synopsis "Small and fast window manager")
621 (source (origin
622 (method url-fetch)
de67e922 623 (uri (string-append "mirror://sourceforge/fluxbox/fluxbox/"
0ede252b
DM
624 version "/fluxbox-" version ".tar.xz"))
625 (sha256
626 (base32
627 "1h1f70y40qd225dqx937vzb4k2cz219agm1zvnjxakn5jkz7b37w"))))
628 (build-system gnu-build-system)
629 (arguments
630 `(#:make-flags '("CPPFLAGS=-U__TIME__") ;ugly, but for reproducibility
631 #:phases
632 (modify-phases %standard-phases
633 (add-after
634 'install 'install-xsession
635 (lambda _
636 (let ((xsessions (string-append %output "/share/xsessions")))
637 (mkdir-p xsessions)
638 (call-with-output-file
639 (string-append xsessions "/fluxbox.desktop")
640 (lambda (port)
641 (format port "~
642 [Desktop Entry]~@
643 Name=~a~@
644 Comment=~a~@
645 Exec=~a/bin/startfluxbox~@
646 Type=Application~%" ,name ,synopsis %output)))))))))
647 (native-inputs
648 `(("pkg-config" ,pkg-config)))
649 (inputs
650 `(("freetype" ,freetype)
651 ("fribidi" ,fribidi)
652 ("imlib2" ,imlib2)
653 ("libx11" ,libx11)
654 ("libxext" ,libxext)
655 ("libxft" ,libxft)
656 ("libxinerama" ,libxinerama)
657 ("libxpm" ,libxpm)
658 ("libxrandr" ,libxrandr)
659 ("libxrender" ,libxrender)))
660 (description "Fluxbox is a window manager. It is light on resources
661and easy to handle yet full of features to make an easy and fast desktop
662experience.")
663 (home-page "http://fluxbox.org/")
664 (license license:expat)))
3d1240aa
CZ
665
666(define-public awesome
667 (package
668 (name "awesome")
db0164b2 669 (version "4.2")
3d1240aa
CZ
670 (source
671 (origin (method url-fetch)
672 (uri (string-append
91426243 673 "https://github.com/awesomeWM/awesome-releases/raw/"
674 "master/awesome-" version ".tar.xz"))
3d1240aa
CZ
675 (sha256
676 (base32
db0164b2 677 "0kwpbls9h1alxcmvxh5g9qb995fds5b2ngcr44w0ibazkyls2pdc"))
3d1240aa
CZ
678 (patches (search-patches "awesome-reproducible-png.patch"))))
679 (build-system cmake-build-system)
680 (native-inputs `(("asciidoc" ,asciidoc)
681 ("docbook-xsl" ,docbook-xsl)
682 ("doxygen" ,doxygen)
683 ("gperf" ,gperf)
684 ("imagemagick" ,imagemagick)
685 ("libxml2" ,libxml2) ;for XML_CATALOG_FILES
686 ("pkg-config" ,pkg-config)
687 ("xmlto" ,xmlto)))
688 (inputs `(("cairo" ,cairo)
689 ("dbus" ,dbus)
690 ("gdk-pixbuf" ,gdk-pixbuf)
691 ("glib" ,glib)
22037a32 692 ("gobject-introspection" ,gobject-introspection)
3d1240aa
CZ
693 ("imlib2" ,imlib2)
694 ("libev" ,libev)
695 ("libxcb" ,libxcb)
696 ("libxcursor" ,libxcursor)
697 ("libxdg-basedir" ,libxdg-basedir)
91426243 698 ("libxkbcommon" ,libxkbcommon)
22037a32 699 ("lua" ,lua)
c695fb76 700 ("lua-lgi" ,lua-lgi)
3d1240aa
CZ
701 ("pango" ,pango)
702 ("startup-notification" ,startup-notification)
703 ("xcb-util" ,xcb-util)
704 ("xcb-util-cursor" ,xcb-util-cursor)
705 ("xcb-util-image" ,xcb-util-image)
706 ("xcb-util-keysyms" ,xcb-util-keysyms)
707 ("xcb-util-renderutil" ,xcb-util-renderutil)
91426243 708 ("xcb-util-xrm" ,xcb-util-xrm)
3d1240aa
CZ
709 ("xcb-util-wm" ,xcb-util-wm)))
710 (arguments
711 `(;; Let compression happen in our 'compress-documentation' phase so that
712 ;; '--no-name' is used, which removes timestamps from gzip output.
713 #:configure-flags '("-DCOMPRESS_MANPAGES=off")
714
db0164b2 715 ;; Building awesome in its source dir is no longer supported.
716 #:out-of-source? #t
717
22037a32 718 #:phases
719 (modify-phases %standard-phases
720 (add-before 'build 'xmlto-skip-validation
721 (lambda _
722 ;; We can't download the necessary schema, so so skip
723 ;; validation and assume they're valid.
724 (substitute* "../build/CMakeFiles/man.dir/build.make"
725 (("/xmlto")
726 (string-append "/xmlto --skip-validation")))
727 #t))
728 (add-before 'configure 'set-lua-paths
729 (lambda* (#:key inputs #:allow-other-keys)
730 ;; The build process needs to load cairo dynamically.
731 (let* ((cairo (string-append
732 (assoc-ref inputs "cairo") "/lib" ))
733 (lua-lgi (assoc-ref inputs "lua-lgi") ))
734 (setenv "LD_LIBRARY_PATH" cairo )
735 (setenv "LUA_PATH" (string-append lua-lgi
736 "/share/lua/5.2/?.lua"))
737 (setenv "LUA_CPATH" (string-append lua-lgi
738 "/lib/lua/5.2/?.so"))
739 #t)))
740 (replace 'check
741 (lambda _
742 ;; There aren't any tests, so just make sure the binary
743 ;; gets built and can be run successfully.
744 (zero? (system* "../build/awesome" "-v"))))
745 (add-after 'install 'wrap
746 (lambda* (#:key inputs outputs #:allow-other-keys)
747 (let* ((awesome (assoc-ref outputs "out"))
748 (cairo (string-append
749 (assoc-ref inputs "cairo") "/lib" ))
750 (lua-lgi (assoc-ref inputs "lua-lgi") ))
751 (wrap-program (string-append awesome "/bin/awesome")
752 `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))
753 `("LD_LIBRARY_PATH" suffix (, cairo))
754 `("LUA_PATH" suffix (,(string-append lua-lgi
755 "/share/lua/5.2/?.lua")))
756 `("LUA_CPATH" suffix (,(string-append
757 lua-lgi "/lib/lua/5.2/?.so"))))))))))
3d1240aa
CZ
758 (synopsis "Highly configurable window manager")
759 (description
c4dd0def 760 "Awesome has been designed as a framework window manager. It is fast, small,
761dynamic and extensible using the Lua programming language.")
3d1240aa
CZ
762 (license license:gpl2+)
763 (home-page "https://awesome.naquadah.org/")))
395751c0 764
765(define-public menumaker
766 (package
767 (name "menumaker")
768 (version "0.99.10")
769 (source
770 (origin
771 (method url-fetch)
772 (uri (string-append "mirror://sourceforge/menumaker/"
773 "menumaker-" version ".tar.gz"))
774 (sha256
775 (base32
776 "1mm4cvg3kphkkd8nwrhcg6d9nm5ar7mgc0wf6fxk6zck1l7xn8ky"))))
777 (build-system gnu-build-system)
778 (inputs
779 `(("python" ,python)))
780 (synopsis "Heuristics-driven menu generator")
781 (description
782 "MenuMaker is a menu generation utility for a number of X window
783managers and desktop environments. It is capable of finding lots of
784installed programs and generating a root menu consistent across all
785supported window managers, so one will get (almost) the same menu in
786all of them. Currently supported window managers include:
787
788@enumerate
789@item BlackBox
790@item Deskmenu
791@item FluxBox
792@item IceWM
793@item OpenBox
794@item PekWM
795@item WindowMaker
796@item XFCE
797@end enumerate\n")
798 (home-page "http://menumaker.sourceforge.net/")
799 (license license:bsd-2)))
dbf544f9 800
801(define-public keybinder
802 (package
803 (name "keybinder")
804 (version "0.3.1")
805 (source
806 (origin
807 (method url-fetch)
6d688b6e
TGR
808 (uri (string-append "https://github.com/kupferlauncher/keybinder"
809 "/releases/download/v" version "/keybinder-"
dbf544f9 810 version ".tar.gz"))
811 (file-name (string-append name "-" version ".tar.gz"))
812 (sha256
813 (base32
814 "0h52hj3ay8mfhwvmfxbxlfyq74hifdk8wxgxp7fr4iy6189hg7w7"))))
815 (build-system gnu-build-system)
816 (inputs
817 `(("python-2" ,python-2)
818 ("gtk+-2" ,gtk+-2)))
819 (native-inputs
820 `(("python2-pygtk" ,python2-pygtk)
821 ("gtk-doc" ,gtk-doc)
822 ("pkg-config" ,pkg-config)))
823 (synopsis "Library for registering global keyboard shortcuts")
824 (description
825 "Keybinder is a library for registering global keyboard shortcuts.
826Keybinder works with GTK-based applications using the X Window System.")
6d688b6e 827 (home-page "https://github.com/kupferlauncher/keybinder")
dbf544f9 828 (license license:gpl2+)))
78dfc9e2 829
830(define-public spectrwm
831 (package
832 (name "spectrwm")
15712cc9 833 (version "3.1.0")
78dfc9e2 834 (source
835 (origin
836 (method url-fetch)
837 (uri (let ((version-with-underscores
838 (string-join (string-split version #\.) "_")))
839 (string-append "https://github.com/conformal/spectrwm/archive/"
840 "SPECTRWM_" version-with-underscores ".tar.gz")))
841 (file-name (string-append name "-" version ".tar.gz"))
842 (sha256
843 (base32
15712cc9 844 "16lxcharxslf9rc39wxa3mr2nx5d8kzm9ls7p7dal8yrwr7y59dp"))))
78dfc9e2 845 (build-system gnu-build-system)
846 (arguments
847 `(#:make-flags (let ((pkg-config (lambda (flag)
848 (string-append
849 "$(shell pkg-config " flag " "
850 "xft fontconfig x11 libpng)"))))
851 (list
852 "CC=gcc"
853 (string-append "PREFIX=" %output)
854 (string-append "INCS=-I. " (pkg-config "--cflags"))
855 (string-append "LIBS=" (pkg-config "--libs") " -lm")))
856 #:tests? #f ;No test suite
857 #:phases
858 (modify-phases %standard-phases
859 (add-before 'build 'change-dir
860 (lambda _
861 (chdir "linux") #t))
862 (add-after 'change-dir 'patch-makefile
863 (lambda _
864 (substitute* "Makefile"
865 (("-g") ""))))
866 (add-after 'change-dir 'fix-freetype-include
867 (lambda _
868 (substitute* "Makefile"
869 (("/usr/include/freetype2")
870 (string-append (assoc-ref %build-inputs "freetype")
871 "/include/freetype2")))))
872 (delete 'configure)))) ;no 'configure' exists
873 (inputs
874 `(("freetype" ,freetype)
875 ("fontconfig" ,fontconfig)
876 ("libx11" ,libx11)
877 ("libxcursor" ,libxcursor)
878 ("libxrandr" ,libxrandr)
879 ("libxtst" ,libxtst)
880 ("libxft" ,libxft)
881 ("xcb-util" ,xcb-util)
882 ("xcb-util-wm" ,xcb-util-wm)
883 ("xcb-util-keysyms" ,xcb-util-keysyms)))
884 (native-inputs
885 `(("libxt" ,libxt)
886 ("pkg-config" ,pkg-config)))
887 (synopsis "Minimalistic automatic tiling window manager")
888 (description
889 "Spectrwm is a small dynamic tiling and reparenting window manager for X11.
890It is inspired by Xmonad and dwm. Its major features include:
891
892@itemize
893@item Navigation anywhere on all screens with either the keyboard or mouse
894@item Customizable status bar
895@item Restartable without losing state
896@item Quick launch menu
897@item Many screen layouts possible with a few simple key strokes
898@item Move/resize floating windows
32008a75
TGR
899@item Extended Window Manager Hints (@dfn{EWMH}) support
900@item Configurable tiling
78dfc9e2 901@item Adjustable tile gap allows for a true one pixel border
902@item Customizable colors and border width
903@end itemize\n")
904 (home-page "https://github.com/conformal/spectrwm")
905 (license license:isc)))
b4cb9308 906
907(define-public cwm
908 (package
909 (name "cwm")
910 (version "6.2")
911 (source
912 (origin
913 (method url-fetch)
914 (uri (string-append "http://chneukirchen.org/releases/cwm-"
915 version ".tar.gz"))
916 (sha256
917 (base32
918 "1b8k2hjxpb0bzqjh2wj6mn2nf2360zacf8z19sw2rw5lxvmfy89x"))))
919 (build-system gnu-build-system)
920 (arguments
921 `(#:make-flags (list "CC=gcc"
922 (string-append "PREFIX=" %output))
923 #:tests? #f
924 #:phases
925 (modify-phases %standard-phases
926 (delete 'configure)
927 (add-after 'build 'install-xsession
928 (lambda* (#:key outputs #:allow-other-keys)
929 ;; Add a .desktop file to xsessions.
930 (let* ((output (assoc-ref outputs "out"))
931 (xsessions (string-append output "/share/xsessions")))
932 (mkdir-p xsessions)
933 (with-output-to-file
934 (string-append xsessions "/cwm.desktop")
935 (lambda _
936 (format #t
937 "[Desktop Entry]~@
938 Name=cwm~@
939 Comment=OpenBSD Calm Window Manager fork~@
940 Exec=~a/bin/cwm~@
941 TryExec=~@*~a/bin/cwm~@
942 Icon=~@
943 Type=Application~%"
944 output)))
945 #t))))))
946 (inputs
947 `(("libxft" ,libxft)
948 ("libxrandr" ,libxrandr)
949 ("libxinerama" ,libxinerama)))
950 (native-inputs
951 `(("pkg-config" ,pkg-config)
952 ("bison" ,bison)))
953 (home-page "https://github.com/chneukirchen/cwm")
954 (synopsis "OpenBSD fork of the calmwm window manager")
955 (description "Cwm is a stacking window manager for X11. It is an OpenBSD
956project derived from the original Calm Window Manager.")
957 (license license:isc)))