gnu: dolphin-emu: Shorten the source snippet.
[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>
12;;; Copyright © 2016, 2017 ng0 <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)
b0a2dc72 49 #:use-module (gnu packages gawk)
bda2ded6
ED
50 #:use-module (gnu packages base)
51 #:use-module (gnu packages pkg-config)
52 #:use-module (gnu packages perl)
766a22fb 53 #:use-module (gnu packages pulseaudio)
bda2ded6
ED
54 #:use-module (gnu packages xorg)
55 #:use-module (gnu packages xdisorg)
99828fa7 56 #:use-module (gnu packages documentation)
bda2ded6
ED
57 #:use-module (gnu packages xml)
58 #:use-module (gnu packages m4)
59 #:use-module (gnu packages docbook)
0ede252b 60 #:use-module (gnu packages image)
bda2ded6 61 #:use-module (gnu packages pcre)
395751c0 62 #:use-module (gnu packages python)
bda2ded6
ED
63 #:use-module (gnu packages gtk)
64 #:use-module (gnu packages libevent)
0ede252b 65 #:use-module (gnu packages fribidi)
bda2ded6
ED
66 #:use-module (gnu packages maths)
67 #:use-module (gnu packages web)
0ede252b 68 #:use-module (gnu packages fontutils)
3d1240aa
CZ
69 #:use-module (gnu packages freedesktop)
70 #:use-module (gnu packages glib)
71 #:use-module (gnu packages gperf)
72 #:use-module (gnu packages imagemagick)
73 #:use-module (gnu packages lua)
4b563b34 74 #:use-module (gnu packages linux)
37356e0b 75 #:use-module (gnu packages suckless)
bda2ded6
ED
76 #:use-module (guix download)
77 #:use-module (guix git-download))
78
5c37126f
ED
79(define-public libconfuse
80 (package
81 (name "libconfuse")
2c7321ea 82 (version "3.2.1")
5c37126f
ED
83 (source (origin
84 (method url-fetch)
631ced1b
TGR
85 (uri (string-append "https://github.com/martinh/libconfuse/"
86 "releases/download/v" version
87 "/confuse-" version ".tar.xz"))
5c37126f
ED
88 (sha256
89 (base32
2c7321ea 90 "0pnjmlj9i0alp407qd7c0vq83sz7gpsjrbdgpcn4xvzjp9r35ii3"))))
5c37126f 91 (build-system gnu-build-system)
631ced1b 92 (home-page "https://github.com/martinh/libconfuse")
5c37126f
ED
93 (synopsis "Configuration file parser library")
94 (description "libconfuse is a configuration file parser library. It
95supports sections and (lists of) values (strings, integers, floats, booleans
96or other sections), as well as some other features (such as
97single/double-quoted strings, environment variable expansion, functions and
98nested include statements).")
0ede252b 99 (license license:isc)))
5c37126f 100
1268e52d 101(define-public bspwm
102 (package
103 (name "bspwm")
c62d1a6e 104 (version "0.9.3")
1268e52d 105 (source
106 (origin
107 (file-name (string-append name "-" version ".tar.gz"))
108 (method url-fetch)
109 (uri (string-append
110 "https://github.com/baskerville/bspwm/archive/"
111 version ".tar.gz"))
112 (sha256
113 (base32
c62d1a6e 114 "17dwj7w16cdj7g4s2y2f96lgj5msq1s4543dnfa3rijlazzy6mmk"))))
1268e52d 115 (build-system gnu-build-system)
116 (inputs
117 `(("libxcb" ,libxcb)
118 ("libxinerama" ,libxinerama)
119 ("sxhkd" ,sxhkd)
120 ("xcb-util" ,xcb-util)
121 ("xcb-util-keysyms" ,xcb-util-keysyms)
122 ("xcb-util-wm" ,xcb-util-wm)))
123 (arguments
dc1d3cde 124 '(#:phases (modify-phases %standard-phases (delete 'configure))
1268e52d 125 #:tests? #f ; no check target
126 #:make-flags (list "CC=gcc"
127 (string-append "PREFIX=" %output))))
128 (home-page "https://github.com/baskerville/bspwm")
129 (synopsis "Tiling window manager based on binary space partitioning")
130 (description "bspwm is a tiling window manager that represents windows as
131the leaves of a full binary tree.")
0ede252b 132 (license license:bsd-2)))
1268e52d 133
63b1bdbc
ED
134(define-public i3status
135 (package
136 (name "i3status")
358dae16 137 (version "2.11")
63b1bdbc
ED
138 (source (origin
139 (method url-fetch)
fdad1f3c 140 (uri (string-append "https://i3wm.org/i3status/i3status-"
63b1bdbc
ED
141 version ".tar.bz2"))
142 (sha256
143 (base32
358dae16 144 "0pwcy599fw8by1a1sf91crkqba7679qhvhbacpmhis8c1xrpxnwq"))))
63b1bdbc
ED
145 (build-system gnu-build-system)
146 (arguments
147 `(#:make-flags (list "CC=gcc" (string-append "PREFIX=" %output))
148 #:phases
149 (modify-phases %standard-phases
150 (delete 'configure))
151 #:tests? #f)) ; no test suite
152 (inputs
153 `(("openlibm" ,openlibm)
154 ("libconfuse" ,libconfuse)
155 ("libyajl" ,libyajl)
156 ("alsa-lib" ,alsa-lib)
766a22fb
AM
157 ("pulseaudio" ,pulseaudio)
158 ("libnl" ,libnl)
63b1bdbc
ED
159 ("libcap" ,libcap)
160 ("asciidoc" ,asciidoc)))
766a22fb
AM
161 (native-inputs
162 `(("pkg-config" ,pkg-config)))
fdad1f3c 163 (home-page "https://i3wm.org/i3status/")
63b1bdbc
ED
164 (synopsis "Status bar for i3bar, dzen2, xmobar or similar programs")
165 (description "i3status is a small program for generating a status bar for
166i3bar, dzen2, xmobar or similar programs. It is designed to be very efficient
167by issuing a very small number of system calls, as one generally wants to
168update such a status line every second. This ensures that even under high
169load, your status bar is updated correctly. Also, it saves a bit of energy by
170not hogging your CPU as much as spawning the corresponding amount of shell
171commands would.")
0ede252b 172 (license license:bsd-3)))
63b1bdbc 173
bda2ded6
ED
174(define-public i3-wm
175 (package
176 (name "i3-wm")
edd38aa8 177 (version "4.14.1")
bda2ded6
ED
178 (source (origin
179 (method url-fetch)
8658d403 180 (uri (string-append "https://i3wm.org/downloads/i3-"
bda2ded6
ED
181 version ".tar.bz2"))
182 (sha256
183 (base32
edd38aa8 184 "1cazmfbbx6n8c81h6x6pdayq3mxs2ml3adz165z8vapkc72kl1nh"))))
bda2ded6
ED
185 (build-system gnu-build-system)
186 (arguments
4bd391f5 187 `(#:make-flags
4b0e6367
KK
188 (list "CC=gcc"
189 (string-append "PREFIX=" %output)
190 ;; This works around the following error:
191 ;; 'error: ‘for’ loop initial declarations are only allowed in C99
192 ;; or C11 mode'
193 "CFLAGS=-std=c11")
4bd391f5
LF
194 ;; The build system tries to build in a separate directory, but that
195 ;; seems to be unnecessary.
196 #:configure-flags '("--disable-builddir")
197 ;; The test suite appears to require the unpackaged Perl module AnyEvent.
198 #:tests? #f))
bda2ded6
ED
199 (inputs
200 `(("libxcb" ,libxcb)
201 ("xcb-util" ,xcb-util)
202 ("xcb-util-cursor" ,xcb-util-cursor)
203 ("xcb-util-keysyms" ,xcb-util-keysyms)
204 ("xcb-util-wm" ,xcb-util-wm)
4bd391f5 205 ("xcb-util-xrm" ,xcb-util-xrm)
bda2ded6
ED
206 ("libxkbcommon" ,libxkbcommon)
207 ("libev" ,libev)
208 ("libyajl" ,libyajl)
209 ("asciidoc" ,asciidoc)
210 ("xmlto" ,xmlto)
211 ("perl-pod-simple" ,perl-pod-simple)
bda2ded6
ED
212 ("libx11" ,libx11)
213 ("pcre" ,pcre)
214 ("startup-notification" ,startup-notification)
215 ("pango" ,pango)
216 ("cairo" ,cairo)))
217 (native-inputs
218 `(("which" ,which)
219 ("perl" ,perl)
4bd391f5
LF
220 ("pkg-config" ,pkg-config)
221 ;; For building the documentation.
4b0e6367 222 ("libxml2" ,libxml2)
4bd391f5 223 ("docbook-xsl" ,docbook-xsl)))
8658d403 224 (home-page "https://i3wm.org/")
bda2ded6 225 (synopsis "Improved tiling window manager")
a124bbd2 226 (description "A tiling window manager, completely written
bda2ded6
ED
227from scratch. i3 is primarily targeted at advanced users and
228developers.")
0ede252b 229 (license license:bsd-3)))
6e38c4be 230
3e7cb70a
MB
231(define-public perl-anyevent-i3
232 (package
233 (name "perl-anyevent-i3")
ec5c986e 234 (version "0.17")
3e7cb70a
MB
235 (source (origin
236 (method url-fetch)
237 (uri (string-append "mirror://cpan/authors/id/M/MS/MSTPLBG/"
238 "AnyEvent-I3-" version ".tar.gz"))
239 (sha256
240 (base32
ec5c986e 241 "0qvd9bq16jyy7v3ma82qcnvz9j503bw0mh7h55gkjf7ir62ck0jk"))))
3e7cb70a
MB
242 (build-system perl-build-system)
243 (propagated-inputs
244 `(("perl-anyevent" ,perl-anyevent)
245 ("perl-json-xs" ,perl-json-xs)))
246 (home-page "http://search.cpan.org/dist/AnyEvent-I3")
247 (synopsis
248 "Communicate with the i3 window manager through perl")
249 (description
250 "This module connects to the i3 window manager using the UNIX socket
251based IPC interface it provides (if enabled in the configuration file).
252You can then subscribe to events or send messages and receive their replies.")
253 ;; Can be used with either license.
2f3108ad 254 (license (list license:gpl3+ license:perl-license))))
3e7cb70a 255
c165591d
IVB
256(define-public python-i3-py
257 (package
258 (name "python-i3-py")
259 (version "0.6.5")
260 (source
261 (origin
262 ;; The latest release is not tagged in Git nor has an entry in PyPi,
263 ;; but there is still a clear commit for it, and it's been the last one
264 ;; for years.
265 (method git-fetch)
266 (uri (git-reference
267 (url "https://github.com/ziberna/i3-py.git")
268 (commit "27f88a616e9ecc340e7d041d3d00782f8a1964c1")))
269 (sha256
270 (base32
271 "1nm719dc2xqlll7vj4c4m7mpjb27lpn3bg3c66gajvnrz2x1nmxs"))
272 (file-name (string-append name "-" version "-checkout"))))
273 (build-system python-build-system)
274 (arguments
275 `(#:tests? #f ; no tests yet
276 #:phases (modify-phases %standard-phases
277 (add-after 'install 'install-doc
278 ;; Copy readme file to documentation directory.
279 (lambda* (#:key outputs #:allow-other-keys)
280 (let ((doc (string-append (assoc-ref outputs "out")
281 "/share/doc/" ,name)))
282 (install-file "README.md" doc)
283 ;; Avoid unspecified return value.
284 #t))))))
285 (propagated-inputs
286 `(("i3-wm" ,i3-wm)))
287 (home-page "https://github.com/ziberna/i3-py")
288 (synopsis "Python interface to the i3 window manager")
289 (description "This package allows you to interact from a Python program
290with the i3 window manager via its IPC socket. It can send commands and other
291kinds of messages to i3, select the affected containers, filter results and
292subscribe to events.")
293 (license license:gpl3+)))
294
295(define-public python2-i3-py
296 (package-with-python2 python-i3-py))
297
37356e0b
IVB
298(define-public quickswitch-i3
299 (let ((commit "ed692b1e8f43b95bd907ced26238ce8ccb2ed28f")
300 (revision "1")) ; Guix package revision
301 (package
302 (name "quickswitch-i3")
303 (version (string-append "2.2-" revision "."
304 (string-take commit 7)))
305 (source
306 (origin
307 ;; The latest commit is a few years old and just a couple commits
308 ;; after the last tagged release, so we use that latest commit
309 ;; instead of the release.
310 (method git-fetch)
311 (uri (git-reference
312 (url "https://github.com/proxypoke/quickswitch-for-i3.git")
313 (commit commit)))
314 (sha256
315 (base32
316 "0447077sama80jcdg5p64zjsvafmz5rbdrirhm1adcdjhkh6iqc5"))
317 (patches (search-patches "quickswitch-fix-dmenu-check.patch"))
318 (file-name (string-append name "-" version "-checkout"))))
319 (build-system python-build-system)
320 (arguments
321 `(#:tests? #f ; no tests yet
322 #:phases (modify-phases %standard-phases
323 (add-after 'install 'install-doc
324 ;; Copy readme file to documentation directory.
325 (lambda* (#:key outputs #:allow-other-keys)
326 (let ((doc (string-append (assoc-ref outputs "out")
327 "/share/doc/" ,name)))
328 (install-file "README.rst" doc)
329 ;; Avoid unspecified return value.
330 #t))))))
331 (inputs
332 `(("python-i3-py" ,python-i3-py)
333 ("dmenu" ,dmenu)))
334 (home-page "https://github.com/proxypoke/quickswitch-for-i3")
335 (synopsis "Quickly change to and locate windows in the i3 window manager")
336 (description
337 "This utility for the i3 window manager allows you to quickly switch to
338and locate windows on all your workspaces, using an interactive dmenu
339prompt.")
340 (license (license:non-copyleft "http://www.wtfpl.net/txt/copying/")))))
341
4b563b34 342(define-public i3lock-color
343 (package
344 (name "i3lock-color")
345 (version "2.10.1c")
346 (source
347 (origin
348 (method url-fetch)
349 (uri (string-append "https://github.com/PandorasFox/i3lock-color/"
350 "archive/" version ".tar.gz"))
351 (file-name (string-append name "-" version ".tar.gz"))
352 (sha256
353 (base32
354 "119xvdm4r6irqk0mar80hx6s8ydw26y35h7712rd7nbg7pb7i053"))))
355 (build-system gnu-build-system)
356 (arguments
357 `(#:tests? #f ;No tests included.
358 #:phases
359 (modify-phases %standard-phases
360 (add-after 'unpack 'bootstrap
361 (lambda _
362 (zero? (system* "autoreconf" "-vfi")))))))
363 (inputs
364 `(("xcb-util-image" ,xcb-util-image)
365 ("xcb-util" ,xcb-util)
366 ("libxcb" ,libxcb)
367 ("linux-pam" ,linux-pam)
368 ("libxkbcommon" ,libxkbcommon)
369 ("libev" ,libev)
370 ("cairo" ,cairo)))
371 (native-inputs
372 `(("pkg-config" ,pkg-config)
373 ("autoconf" ,autoconf)
374 ("automake" ,automake)))
375 (home-page "https://github.com/PandorasFox/i3lock-color")
376 (synopsis "Screen locker with color configuration support")
377 (description
378 "i3lock-color is a simpler X11 screen locker derived from i3lock.
379Features include:
380
381@enumerate
382@item forking process, the locked screen is preserved when you suspend to RAM;
383@item specify background color or image to be displayed in the lock screen;
384@item many additional color options.
385@end enumerate")
386 (license license:bsd-3)))
387
b0a2dc72 388(define-public i3lock-fancy
389 (package
390 (name "i3lock-fancy")
391 (version "0.2")
392 (source
393 (origin
394 (method url-fetch)
395 (uri (string-append "https://github.com/meskarune/i3lock-fancy/archive/"
396 version ".tar.gz"))
397 (file-name (string-append name "-" version ".tar.gz"))
398 (sha256
399 (base32
400 "020m7mnfq5cvir7p9v3hkb7cvb4cai33wppxl2zdwscwwjnchc5y"))))
401 (build-system gnu-build-system)
402 (arguments
403 `(#:tests? #f ;No tests included
404 #:phases
405 (modify-phases %standard-phases
406 (replace 'configure
407 (lambda* (#:key inputs outputs #:allow-other-keys)
408 (let* ((out (assoc-ref outputs "out"))
409 (icons (string-append out "/share/i3lock-fancy/icons/"))
410 (wmctrl (string-append (assoc-ref inputs "wmctrl")
411 "/bin/wmctrl"))
412 (mconvert (string-append (assoc-ref inputs "imagemagick")
413 "/bin/convert"))
414 (mimport (string-append (assoc-ref inputs "imagemagick")
415 "/bin/import"))
416 (awk (string-append (assoc-ref inputs "gawk")
417 "/bin/gawk")))
418
419 (substitute* "lock"
420 (("$(which wmctrl)") wmctrl)
421 (("convert") mconvert)
422 (("shot=\\(import") (string-append "shot=\(" mimport))
423 (("awk -F") (string-append awk " -F"))
424 ((" awk") awk)
425 (("\\$scriptpath/icons/") icons))
426 #t)))
427 (delete 'build)
428 (replace 'install
429 (lambda* (#:key inputs outputs #:allow-other-keys)
430 (let* ((out (assoc-ref outputs "out"))
431 (bin (string-append out "/bin"))
432 (icons (string-append out "/share/i3lock-fancy/icons/")))
433
434 (install-file "lock" bin)
435 (rename-file (string-append bin "/lock")
436 (string-append bin "/i3lock-fancy"))
437 (copy-recursively "icons" icons)
438 #t))))))
439 (native-inputs
440 `(("imagemagick" ,imagemagick)
441 ("wmctrl" ,wmctrl)
442 ("gawk" ,gawk)))
443 (home-page "https://github.com/meskarune/i3lock-fancy")
444 (synopsis "Screen locker with screenshot function")
445 (description
446 "@code{i3lock-fancy} is a Bash script that takes a screenshot of
447the desktop, blurs the background and adds a lock icon and text.
448It requires @code{i3lock-color} or @code{i3lock} and can optionally
449be passed any screenshot util like @code{scrot}.
450This screen locker can be used with any window manager or
451desktop environment.")
452 (license license:expat)))
453
6e38c4be
SB
454(define-public xmonad
455 (package
456 (name "xmonad")
cffaca95 457 (version "0.13")
6e38c4be
SB
458 (synopsis "Tiling window manager")
459 (source (origin
460 (method url-fetch)
966a543b 461 (uri (string-append "mirror://hackage/package/xmonad/"
ca80b8ba 462 name "-" version ".tar.gz"))
6e38c4be
SB
463 (sha256
464 (base32
cffaca95 465 "1jh3lcs20qpna36fa5a0r174xqrsxhj10x1rm5vwf64zariipy7r"))))
6e38c4be
SB
466 (build-system haskell-build-system)
467 (inputs
174b091f
MM
468 `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
469 ("ghc-mtl" ,ghc-mtl)
470 ("ghc-quickcheck" ,ghc-quickcheck)
471 ("ghc-setlocale" ,ghc-setlocale)
472 ("ghc-utf8-string" ,ghc-utf8-string)
cffaca95 473 ("ghc-directory" ,ghc-directory)
174b091f 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 (modules '((guix build utils)
679 (srfi srfi-19)))
3d1240aa
CZ
680 (snippet
681 ;; Remove non-reproducible timestamp and use the date of the
682 ;; source file instead.
683 '(substitute* "common/version.c"
684 (("__DATE__ \" \" __TIME__")
685 (date->string
686 (time-utc->date
687 (make-time time-utc 0
688 (stat:mtime (stat "awesome.c"))))
689 "\"~c\""))))
690 (patches (search-patches "awesome-reproducible-png.patch"))))
691 (build-system cmake-build-system)
692 (native-inputs `(("asciidoc" ,asciidoc)
693 ("docbook-xsl" ,docbook-xsl)
694 ("doxygen" ,doxygen)
695 ("gperf" ,gperf)
696 ("imagemagick" ,imagemagick)
697 ("libxml2" ,libxml2) ;for XML_CATALOG_FILES
698 ("pkg-config" ,pkg-config)
699 ("xmlto" ,xmlto)))
700 (inputs `(("cairo" ,cairo)
701 ("dbus" ,dbus)
702 ("gdk-pixbuf" ,gdk-pixbuf)
703 ("glib" ,glib)
22037a32 704 ("gobject-introspection" ,gobject-introspection)
3d1240aa
CZ
705 ("imlib2" ,imlib2)
706 ("libev" ,libev)
707 ("libxcb" ,libxcb)
708 ("libxcursor" ,libxcursor)
709 ("libxdg-basedir" ,libxdg-basedir)
91426243 710 ("libxkbcommon" ,libxkbcommon)
22037a32 711 ("lua" ,lua)
712 ("lua-lgi",lua-lgi)
3d1240aa
CZ
713 ("pango" ,pango)
714 ("startup-notification" ,startup-notification)
715 ("xcb-util" ,xcb-util)
716 ("xcb-util-cursor" ,xcb-util-cursor)
717 ("xcb-util-image" ,xcb-util-image)
718 ("xcb-util-keysyms" ,xcb-util-keysyms)
719 ("xcb-util-renderutil" ,xcb-util-renderutil)
91426243 720 ("xcb-util-xrm" ,xcb-util-xrm)
3d1240aa
CZ
721 ("xcb-util-wm" ,xcb-util-wm)))
722 (arguments
723 `(;; Let compression happen in our 'compress-documentation' phase so that
724 ;; '--no-name' is used, which removes timestamps from gzip output.
725 #:configure-flags '("-DCOMPRESS_MANPAGES=off")
726
db0164b2 727 ;; Building awesome in its source dir is no longer supported.
728 #:out-of-source? #t
729
22037a32 730 #:phases
731 (modify-phases %standard-phases
732 (add-before 'build 'xmlto-skip-validation
733 (lambda _
734 ;; We can't download the necessary schema, so so skip
735 ;; validation and assume they're valid.
736 (substitute* "../build/CMakeFiles/man.dir/build.make"
737 (("/xmlto")
738 (string-append "/xmlto --skip-validation")))
739 #t))
740 (add-before 'configure 'set-lua-paths
741 (lambda* (#:key inputs #:allow-other-keys)
742 ;; The build process needs to load cairo dynamically.
743 (let* ((cairo (string-append
744 (assoc-ref inputs "cairo") "/lib" ))
745 (lua-lgi (assoc-ref inputs "lua-lgi") ))
746 (setenv "LD_LIBRARY_PATH" cairo )
747 (setenv "LUA_PATH" (string-append lua-lgi
748 "/share/lua/5.2/?.lua"))
749 (setenv "LUA_CPATH" (string-append lua-lgi
750 "/lib/lua/5.2/?.so"))
751 #t)))
752 (replace 'check
753 (lambda _
754 ;; There aren't any tests, so just make sure the binary
755 ;; gets built and can be run successfully.
756 (zero? (system* "../build/awesome" "-v"))))
757 (add-after 'install 'wrap
758 (lambda* (#:key inputs outputs #:allow-other-keys)
759 (let* ((awesome (assoc-ref outputs "out"))
760 (cairo (string-append
761 (assoc-ref inputs "cairo") "/lib" ))
762 (lua-lgi (assoc-ref inputs "lua-lgi") ))
763 (wrap-program (string-append awesome "/bin/awesome")
764 `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))
765 `("LD_LIBRARY_PATH" suffix (, cairo))
766 `("LUA_PATH" suffix (,(string-append lua-lgi
767 "/share/lua/5.2/?.lua")))
768 `("LUA_CPATH" suffix (,(string-append
769 lua-lgi "/lib/lua/5.2/?.so"))))))))))
3d1240aa
CZ
770 (synopsis "Highly configurable window manager")
771 (description
c4dd0def 772 "Awesome has been designed as a framework window manager. It is fast, small,
773dynamic and extensible using the Lua programming language.")
3d1240aa
CZ
774 (license license:gpl2+)
775 (home-page "https://awesome.naquadah.org/")))
395751c0 776
777(define-public menumaker
778 (package
779 (name "menumaker")
780 (version "0.99.10")
781 (source
782 (origin
783 (method url-fetch)
784 (uri (string-append "mirror://sourceforge/menumaker/"
785 "menumaker-" version ".tar.gz"))
786 (sha256
787 (base32
788 "1mm4cvg3kphkkd8nwrhcg6d9nm5ar7mgc0wf6fxk6zck1l7xn8ky"))))
789 (build-system gnu-build-system)
790 (inputs
791 `(("python" ,python)))
792 (synopsis "Heuristics-driven menu generator")
793 (description
794 "MenuMaker is a menu generation utility for a number of X window
795managers and desktop environments. It is capable of finding lots of
796installed programs and generating a root menu consistent across all
797supported window managers, so one will get (almost) the same menu in
798all of them. Currently supported window managers include:
799
800@enumerate
801@item BlackBox
802@item Deskmenu
803@item FluxBox
804@item IceWM
805@item OpenBox
806@item PekWM
807@item WindowMaker
808@item XFCE
809@end enumerate\n")
810 (home-page "http://menumaker.sourceforge.net/")
811 (license license:bsd-2)))
dbf544f9 812
813(define-public keybinder
814 (package
815 (name "keybinder")
816 (version "0.3.1")
817 (source
818 (origin
819 (method url-fetch)
6d688b6e
TGR
820 (uri (string-append "https://github.com/kupferlauncher/keybinder"
821 "/releases/download/v" version "/keybinder-"
dbf544f9 822 version ".tar.gz"))
823 (file-name (string-append name "-" version ".tar.gz"))
824 (sha256
825 (base32
826 "0h52hj3ay8mfhwvmfxbxlfyq74hifdk8wxgxp7fr4iy6189hg7w7"))))
827 (build-system gnu-build-system)
828 (inputs
829 `(("python-2" ,python-2)
830 ("gtk+-2" ,gtk+-2)))
831 (native-inputs
832 `(("python2-pygtk" ,python2-pygtk)
833 ("gtk-doc" ,gtk-doc)
834 ("pkg-config" ,pkg-config)))
835 (synopsis "Library for registering global keyboard shortcuts")
836 (description
837 "Keybinder is a library for registering global keyboard shortcuts.
838Keybinder works with GTK-based applications using the X Window System.")
6d688b6e 839 (home-page "https://github.com/kupferlauncher/keybinder")
dbf544f9 840 (license license:gpl2+)))
78dfc9e2 841
842(define-public spectrwm
843 (package
844 (name "spectrwm")
15712cc9 845 (version "3.1.0")
78dfc9e2 846 (source
847 (origin
848 (method url-fetch)
849 (uri (let ((version-with-underscores
850 (string-join (string-split version #\.) "_")))
851 (string-append "https://github.com/conformal/spectrwm/archive/"
852 "SPECTRWM_" version-with-underscores ".tar.gz")))
853 (file-name (string-append name "-" version ".tar.gz"))
854 (sha256
855 (base32
15712cc9 856 "16lxcharxslf9rc39wxa3mr2nx5d8kzm9ls7p7dal8yrwr7y59dp"))))
78dfc9e2 857 (build-system gnu-build-system)
858 (arguments
859 `(#:make-flags (let ((pkg-config (lambda (flag)
860 (string-append
861 "$(shell pkg-config " flag " "
862 "xft fontconfig x11 libpng)"))))
863 (list
864 "CC=gcc"
865 (string-append "PREFIX=" %output)
866 (string-append "INCS=-I. " (pkg-config "--cflags"))
867 (string-append "LIBS=" (pkg-config "--libs") " -lm")))
868 #:tests? #f ;No test suite
869 #:phases
870 (modify-phases %standard-phases
871 (add-before 'build 'change-dir
872 (lambda _
873 (chdir "linux") #t))
874 (add-after 'change-dir 'patch-makefile
875 (lambda _
876 (substitute* "Makefile"
877 (("-g") ""))))
878 (add-after 'change-dir 'fix-freetype-include
879 (lambda _
880 (substitute* "Makefile"
881 (("/usr/include/freetype2")
882 (string-append (assoc-ref %build-inputs "freetype")
883 "/include/freetype2")))))
884 (delete 'configure)))) ;no 'configure' exists
885 (inputs
886 `(("freetype" ,freetype)
887 ("fontconfig" ,fontconfig)
888 ("libx11" ,libx11)
889 ("libxcursor" ,libxcursor)
890 ("libxrandr" ,libxrandr)
891 ("libxtst" ,libxtst)
892 ("libxft" ,libxft)
893 ("xcb-util" ,xcb-util)
894 ("xcb-util-wm" ,xcb-util-wm)
895 ("xcb-util-keysyms" ,xcb-util-keysyms)))
896 (native-inputs
897 `(("libxt" ,libxt)
898 ("pkg-config" ,pkg-config)))
899 (synopsis "Minimalistic automatic tiling window manager")
900 (description
901 "Spectrwm is a small dynamic tiling and reparenting window manager for X11.
902It is inspired by Xmonad and dwm. Its major features include:
903
904@itemize
905@item Navigation anywhere on all screens with either the keyboard or mouse
906@item Customizable status bar
907@item Restartable without losing state
908@item Quick launch menu
909@item Many screen layouts possible with a few simple key strokes
910@item Move/resize floating windows
32008a75
TGR
911@item Extended Window Manager Hints (@dfn{EWMH}) support
912@item Configurable tiling
78dfc9e2 913@item Adjustable tile gap allows for a true one pixel border
914@item Customizable colors and border width
915@end itemize\n")
916 (home-page "https://github.com/conformal/spectrwm")
917 (license license:isc)))