1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
3 ;;; Copyright © 2015 Siniša Biđin <sinisa@bidin.eu>
4 ;;; Copyright © 2015, 2016 Eric Bavier <bavier@member.fsf.org>
5 ;;; Copyright © 2015 xd1le <elisp.vim@gmail.com>
6 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
7 ;;; Copyright © 2016 Danny Milosavljevic <dannym@scratchpost.org>
8 ;;; Copyright © 2016, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
9 ;;; Copyright © 2016 Al McElrath <hello@yrns.org>
10 ;;; Copyright © 2016 Carlo Zancanaro <carlo@zancanaro.id.au>
11 ;;; Copyright © 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
12 ;;; Copyright © 2016, 2017, 2018, 2020 Nikita <nikita@n0.is>
13 ;;; Copyright © 2016 doncatnip <gnopap@gmail.com>
14 ;;; Copyright © 2016 Ivan Vilata i Balaguer <ivan@selidor.net>
15 ;;; Copyright © 2017 Mekeor Melire <mekeor.melire@gmail.com>
16 ;;; Copyright © 2017, 2019, 2020 Marius Bakke <marius@gnu.org>
17 ;;; Copyright © 2017, 2020 Oleg Pykhalov <go.wigust@gmail.com>
18 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
19 ;;; Copyright © 2018 Pierre-Antoine Rouby <contact@parouby.fr>
20 ;;; Copyright © 2018, 2019 Meiyo Peng <meiyo@riseup.net>
21 ;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com>
22 ;;; Copyright © 2019 Timothy Sample <samplet@ngyro.com>
23 ;;; Copyright © 2019 Gábor Boskovits <boskovits@gmail.com>
24 ;;; Copyright © 2019 Kyle Andrews <kyle.c.andrews@gmail.com>
25 ;;; Copyright © 2019 Ingo Ruhnke <grumbel@gmail.com>
26 ;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
27 ;;; Copyright © 2019 John Soo <jsoo1@asu.edu>
28 ;;; Copyright © 2018, 2019 Pierre Langlois <pierre.langlois@gmx.com>
29 ;;; Copyright © 2016, 2017 Andy Patterson <ajpatter@uwaterloo.ca>
30 ;;; Copyright © 2019 Evan Straw <evan.straw99@gmail.com>
31 ;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
32 ;;; Copyright © 2019 Noodles! <nnoodle@chiru.no>
33 ;;; Copyright © 2019, 2020 Alexandru-Sergiu Marton <brown121407@member.fsf.org>
34 ;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
35 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
36 ;;; Copyright © 2020 Boris A. Dekshteyn <harlequin78@gmail.com>
37 ;;; Copyright © 2020 Marcin Karpezo <sirmacik@wioo.waw.pl>
38 ;;; Copyright © 2020 EuAndreh <eu@euandre.org>
39 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
40 ;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
41 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
42 ;;; Copyright © 2020 Niklas Eklund <niklas.eklund@posteo.net>
43 ;;; Copyright © 2020 Robert Smith <robertsmith@posteo.net>
44 ;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
45 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
46 ;;; Copyright © 2021 qblade <qblade@protonmail.com>
48 ;;; This file is part of GNU Guix.
50 ;;; GNU Guix is free software; you can redistribute it and/or modify it
51 ;;; under the terms of the GNU General Public License as published by
52 ;;; the Free Software Foundation; either version 3 of the License, or (at
53 ;;; your option) any later version.
55 ;;; GNU Guix is distributed in the hope that it will be useful, but
56 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
57 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
58 ;;; GNU General Public License for more details.
60 ;;; You should have received a copy of the GNU General Public License
61 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
63 (define-module (gnu packages wm)
64 #:use-module ((guix licenses) #:prefix license:)
65 #:use-module (guix packages)
66 #:use-module (guix download)
67 #:use-module (guix git-download)
68 #:use-module (guix build-system asdf)
69 #:use-module (guix build-system cmake)
70 #:use-module (guix build-system gnu)
71 #:use-module (guix build-system haskell)
72 #:use-module (guix build-system meson)
73 #:use-module (guix build-system perl)
74 #:use-module (guix build-system python)
75 #:use-module (guix build-system trivial)
76 #:use-module (guix utils)
77 #:use-module (gnu packages)
78 #:use-module (gnu packages bash)
79 #:use-module (gnu packages autotools)
80 #:use-module (gnu packages base)
81 #:use-module (gnu packages bison)
82 #:use-module (gnu packages build-tools) ;for meson-0.55
83 #:use-module (gnu packages calendar)
84 #:use-module (gnu packages docbook)
85 #:use-module (gnu packages documentation)
86 #:use-module (gnu packages fontutils)
87 #:use-module (gnu packages freedesktop)
88 #:use-module (gnu packages fribidi)
89 #:use-module (gnu packages gawk)
90 #:use-module (gnu packages gcc)
91 #:use-module (gnu packages gl)
92 #:use-module (gnu packages glib)
93 #:use-module (gnu packages gperf)
94 #:use-module (gnu packages gtk)
95 #:use-module (gnu packages haskell-check)
96 #:use-module (gnu packages haskell-web)
97 #:use-module (gnu packages haskell-xyz)
98 #:use-module (gnu packages image)
99 #:use-module (gnu packages imagemagick)
100 #:use-module (gnu packages libevent)
101 #:use-module (gnu packages linux)
102 #:use-module (gnu packages lisp-xyz)
103 #:use-module (gnu packages logging)
104 #:use-module (gnu packages lua)
105 #:use-module (gnu packages m4)
106 #:use-module (gnu packages man)
107 #:use-module (gnu packages maths)
108 #:use-module (gnu packages mpd)
109 #:use-module (gnu packages pcre)
110 #:use-module (gnu packages perl)
111 #:use-module (gnu packages pkg-config)
112 #:use-module (gnu packages pretty-print)
113 #:use-module (gnu packages pulseaudio)
114 #:use-module (gnu packages python)
115 #:use-module (gnu packages readline)
116 #:use-module (gnu packages serialization)
117 #:use-module (gnu packages sphinx)
118 #:use-module (gnu packages suckless)
119 #:use-module (gnu packages texinfo)
120 #:use-module (gnu packages textutils)
121 #:use-module (gnu packages video)
122 #:use-module (gnu packages web)
123 #:use-module (gnu packages xdisorg)
124 #:use-module (gnu packages xml)
125 #:use-module (gnu packages xorg))
135 (url "https://github.com/baskerville/bspwm")
137 (file-name (git-file-name name version))
139 (base32 "0qlv7b4c2mmjfd65y100d11x8iqyg5f6lfiws3cgmpjidhdygnxc"))))
140 (build-system gnu-build-system)
143 ("libxinerama" ,libxinerama)
145 ("xcb-util" ,xcb-util)
146 ("xcb-util-keysyms" ,xcb-util-keysyms)
147 ("xcb-util-wm" ,xcb-util-wm)))
150 (modify-phases %standard-phases
151 (delete 'configure)) ; no configure script
152 #:tests? #f ; no check target
155 (string-append "PREFIX=" %output))))
156 (home-page "https://github.com/baskerville/bspwm")
157 (synopsis "Tiling window manager based on binary space partitioning")
158 (description "bspwm is a tiling window manager that represents windows as
159 the leaves of a full binary tree.")
160 (license license:bsd-2)))
162 (define-public herbstluftwm
164 (name "herbstluftwm")
169 (uri (string-append "https://herbstluftwm.org/tarballs/herbstluftwm-"
172 (base32 "0avfhr68f6fjnafjdcyxcx7dkg38f2nadmhpj971qyqzfq2f6i38"))
173 (file-name (string-append "herbstluftwm-" version ".tar.gz"))))
174 (build-system cmake-build-system)
181 ("xsetroot" ,xsetroot)
184 ("libxinerama" ,libxinerama)
185 ("libxrandr" ,libxrandr)
188 `(("asciidoc" ,asciidoc)
189 ("pkg-config" ,pkg-config)
194 (let ((out (assoc-ref %outputs "out")))
196 (string-append "-DCMAKE_INSTALL_SYSCONF_PREFIX=" out "/etc")
197 (string-append "-DBASHCOMPLETIONDIR=" out "/etc/bash_completion.d")))
199 (modify-phases %standard-phases
200 (add-after 'install 'install-xsession
201 (lambda* (#:key outputs #:allow-other-keys)
202 (let* ((out (assoc-ref outputs "out"))
203 (xsessions (string-append out "/share/xsessions")))
205 (call-with-output-file
206 (string-append xsessions "/herbstluftwm.desktop")
211 Comment=Manual tiling window manager~@
212 Exec=~a/bin/herbstluftwm~@
213 Type=XSession~%" out)))
215 (synopsis "Tiling window manager for X11")
216 (description "herbstluftwm is a manual tiling window manager for X11 using
217 Xlib and GLib. Its main features are:
221 The layout is based on splitting frames into subframes which can be split
222 again or can be filled with windows (similar to i3 or musca).
225 Tags (or workspaces or virtual desktops or …) can be added/removed at runtime.
226 Each tag contains an own layout.
229 Exactly one tag is viewed on each monitor. The tags are monitor independent
233 It is configured at runtime via IPC calls from @command{herbstclient}. So the
234 configuration file is just a script which is run on startup (similar to wmii
238 (home-page "https://herbstluftwm.org")
239 (license license:bsd-2)))
241 (define-public i3status
247 (uri (string-append "https://i3wm.org/i3status/i3status-"
251 "0rhlzb96mw64z2jnhwz9nibc7pxg549626lz5642xxk5hpzwk2ff"))))
252 (build-system gnu-build-system)
254 `(;; XXX: Do an "out of source" build to work around
255 ;; <https://github.com/i3/i3status/issues/339>.
257 #:tests? #f)) ; no test suite
259 `(("openlibm" ,openlibm)
260 ("libconfuse" ,libconfuse)
262 ("alsa-lib" ,alsa-lib)
263 ("pulseaudio" ,pulseaudio)
266 ("asciidoc" ,asciidoc)))
268 `(("pkg-config" ,pkg-config)
269 ("docbook-xsl" ,docbook-xsl)
270 ("libxml2" ,libxml2) ;for XML_CATALOG_FILES
272 (home-page "https://i3wm.org/i3status/")
273 (synopsis "Status bar for i3bar, dzen2, xmobar or similar programs")
274 (description "i3status is a small program for generating a status bar for
275 i3bar, dzen2, xmobar or similar programs. It is designed to be very efficient
276 by issuing a very small number of system calls, as one generally wants to
277 update such a status line every second. This ensures that even under high
278 load, your status bar is updated correctly. Also, it saves a bit of energy by
279 not hogging your CPU as much as spawning the corresponding amount of shell
281 (license license:bsd-3)))
289 (uri (string-append "https://i3wm.org/downloads/i3-"
293 "03dijnwv2n8ak9jq59fhq0rc80m5wjc9d54fslqaivnnz81pkbjk"))))
294 (build-system gnu-build-system)
297 ;; The build system tries to build in a separate directory, but that
298 ;; seems to be unnecessary.
299 (list "--disable-builddir")
301 ;; The test suite requires the unpackaged Xephyr X server.
304 (modify-phases %standard-phases
305 (add-after 'install 'patch-session-file
306 (lambda* (#:key outputs #:allow-other-keys)
307 (let* ((out (assoc-ref outputs "out"))
308 (i3 (string-append out "/bin/i3"))
309 (i3-with-shmlog (string-append out "/bin/i3-with-shmlog")))
310 (substitute* (string-append out "/share/xsessions/i3.desktop")
311 (("Exec=i3") (string-append "Exec=" i3)))
312 (substitute* (string-append out "/share/xsessions/i3-with-shmlog.desktop")
313 (("Exec=i3-with-shmlog") (string-append "Exec=" i3-with-shmlog)))
317 ("xcb-util" ,xcb-util)
318 ("xcb-util-cursor" ,xcb-util-cursor)
319 ("xcb-util-keysyms" ,xcb-util-keysyms)
320 ("xcb-util-wm" ,xcb-util-wm)
321 ("xcb-util-xrm" ,xcb-util-xrm)
322 ("libxkbcommon" ,libxkbcommon)
326 ("perl-pod-simple" ,perl-pod-simple)
329 ("startup-notification" ,startup-notification)
335 ("pkg-config" ,pkg-config)
336 ("asciidoc-py3" ,asciidoc-py3)
337 ;; For building the documentation.
339 ("docbook-xsl" ,docbook-xsl)))
340 (home-page "https://i3wm.org/")
341 (synopsis "Tiling window manager")
342 (description "i3 is a tiling X11 window manager that dynamically manages
343 tiled, stacked, and tabbed window layouts.
345 i3 primarily targets advanced users. Windows are managed manually and organised
346 inside containers, which can be split vertically or horizontally, and optionally
349 i3 uses a plain-text configuration file, and can be extended and controlled from
350 many programming languages.")
351 (license license:bsd-3)))
353 (define-public i3-gaps
354 (package (inherit i3-wm)
360 "https://github.com/Airblader/i3/releases/download/"
361 version "/i3-" version ".tar.bz2"))
364 "1hcakwyz78lgp8mhqv7pw86jlb3m415pfql1q19rkijnhm3fn3ci"))))
365 (home-page "https://github.com/Airblader/i3")
366 (synopsis "Tiling window manager with gaps")
367 (description "i3-gaps is a fork of i3wm, a tiling window manager
368 for X11. It is kept up to date with upstream, adding a few additional
369 features such as gaps between windows.
371 i3 is a tiling X11 window manager that dynamically manages tiled, stacked,
372 and tabbed window layouts.
374 i3 primarily targets advanced users. Windows are managed manually and
375 organised inside containers, which can be split vertically or horizontally,
376 and optionally resized.
378 i3 uses a plain-text configuration file, and can be extended and controlled
379 from many programming languages.")
380 (license license:bsd-3)))
382 (define-public i3lock
388 (uri (string-append "https://i3wm.org/i3lock/i3lock-"
392 "015dn534m7cxjvqdncpvaq9p8b2r4w5hp1yanbdy2abmhbcc7a7j"))))
393 (build-system gnu-build-system)
395 `(("pkg-config" ,pkg-config)))
399 ("linux-pam" ,linux-pam)
401 ("libxkbcommon" ,libxkbcommon)
402 ("xcb-util" ,xcb-util)
403 ("xcb-util-image" ,xcb-util-image)
404 ("xcb-util-xrm" ,xcb-util-xrm)))
405 (home-page "https://i3wm.org/i3lock/")
406 (synopsis "Lightweight screen locker")
408 "i3lock is a simple X11 screen locker developed alongside the i3 project.
409 Despite the name it should work with any X11 window manager.")
410 (license license:bsd-3)))
412 (define-public i3blocks
419 (url "https://github.com/vivien/i3blocks")
423 "0v8mwnm8qzpv6xnqvrk43s4b9iyld4naqzbaxk4ldq1qkhai0wsv"))
424 (file-name (git-file-name name version))))
425 (build-system gnu-build-system)
427 `(("autoconf" ,autoconf)
428 ("automake" ,automake)
429 ("pkg-config" ,pkg-config)))
430 (home-page "https://github.com/vivien/i3blocks")
431 (synopsis "Minimalist scheduler for status bar scripts")
432 (description "i3blocks executes your command lines and generates a
433 status line from their output. The generated line is meant to be displayed by
434 the i3 window manager through its i3bar component, as an alternative to
436 (license license:gpl3+)))
438 (define-public perl-anyevent-i3
440 (name "perl-anyevent-i3")
444 (uri (string-append "mirror://cpan/authors/id/M/MS/MSTPLBG/"
445 "AnyEvent-I3-" version ".tar.gz"))
448 "0qvd9bq16jyy7v3ma82qcnvz9j503bw0mh7h55gkjf7ir62ck0jk"))))
449 (build-system perl-build-system)
451 `(("perl-anyevent" ,perl-anyevent)
452 ("perl-json-xs" ,perl-json-xs)))
453 (home-page "https://metacpan.org/release/AnyEvent-I3")
455 "Communicate with the i3 window manager through perl")
457 "This module connects to the i3 window manager using the UNIX socket
458 based IPC interface it provides (if enabled in the configuration file).
459 You can then subscribe to events or send messages and receive their replies.")
460 ;; Can be used with either license.
461 (license (list license:gpl3+ license:perl-license))))
463 (define-public python-i3-py
465 (name "python-i3-py")
469 ;; The latest release is not tagged in Git nor has an entry in PyPi,
470 ;; but there is still a clear commit for it, and it's been the last one
474 (url "https://github.com/ziberna/i3-py")
475 (commit "27f88a616e9ecc340e7d041d3d00782f8a1964c1")))
478 "1nm719dc2xqlll7vj4c4m7mpjb27lpn3bg3c66gajvnrz2x1nmxs"))
479 (file-name (string-append name "-" version "-checkout"))))
480 (build-system python-build-system)
482 `(#:tests? #f ; no tests yet
483 #:phases (modify-phases %standard-phases
484 (add-after 'install 'install-doc
485 ;; Copy readme file to documentation directory.
486 (lambda* (#:key outputs #:allow-other-keys)
487 (let ((doc (string-append (assoc-ref outputs "out")
488 "/share/doc/" ,name)))
489 (install-file "README.md" doc)
490 ;; Avoid unspecified return value.
494 (home-page "https://github.com/ziberna/i3-py")
495 (synopsis "Python interface to the i3 window manager")
496 (description "This package allows you to interact from a Python program
497 with the i3 window manager via its IPC socket. It can send commands and other
498 kinds of messages to i3, select the affected containers, filter results and
499 subscribe to events.")
500 (license license:gpl3+)))
502 (define-public python2-i3-py
503 (package-with-python2 python-i3-py))
505 (define-public quickswitch-i3
506 (let ((commit "ed692b1e8f43b95bd907ced26238ce8ccb2ed28f")
507 (revision "1")) ; Guix package revision
509 (name "quickswitch-i3")
510 (version (string-append "2.2-" revision "."
511 (string-take commit 7)))
514 ;; The latest commit is a few years old and just a couple commits
515 ;; after the last tagged release, so we use that latest commit
516 ;; instead of the release.
519 (url "https://github.com/proxypoke/quickswitch-for-i3")
523 "0447077sama80jcdg5p64zjsvafmz5rbdrirhm1adcdjhkh6iqc5"))
524 (patches (search-patches "quickswitch-fix-dmenu-check.patch"))
525 (file-name (string-append name "-" version "-checkout"))))
526 (build-system python-build-system)
528 `(#:tests? #f ; no tests yet
529 #:phases (modify-phases %standard-phases
530 (add-after 'install 'install-doc
531 ;; Copy readme file to documentation directory.
532 (lambda* (#:key outputs #:allow-other-keys)
533 (let ((doc (string-append (assoc-ref outputs "out")
534 "/share/doc/" ,name)))
535 (install-file "README.rst" doc)
536 ;; Avoid unspecified return value.
539 `(("python-i3-py" ,python-i3-py)
541 (home-page "https://github.com/proxypoke/quickswitch-for-i3")
542 (synopsis "Quickly change to and locate windows in the i3 window manager")
544 "This utility for the i3 window manager allows you to quickly switch to
545 and locate windows on all your workspaces, using an interactive dmenu
547 (license license:wtfpl2))))
549 (define-public i3lock-color
551 (name "i3lock-color")
557 (url "https://github.com/PandorasFox/i3lock-color")
559 (file-name (git-file-name name version))
561 (base32 "08fhnchf187b73h52xgzb86g6byzxz085zs9galsvl687g5zxk34"))))
562 (build-system gnu-build-system)
564 `(#:tests? #f)) ; no tests included
568 ("libjpeg" ,libjpeg-turbo)
570 ("libxkbcommon" ,libxkbcommon)
571 ("linux-pam" ,linux-pam)
572 ("xcb-util" ,xcb-util)
573 ("xcb-util-image" ,xcb-util-image)
574 ("xcb-util-xrm" ,xcb-util-xrm)))
576 `(("autoconf" ,autoconf)
577 ("automake" ,automake)
578 ("pkg-config" ,pkg-config)))
579 (home-page "https://github.com/PandorasFox/i3lock-color")
580 (synopsis "Screen locker with color configuration support")
582 "i3lock-color is a simpler X11 screen locker derived from i3lock.
586 @item forking process, the locked screen is preserved when you suspend to RAM;
587 @item specify background color or image to be displayed in the lock screen;
588 @item many additional color options.
590 (license license:bsd-3)))
592 (define-public i3lock-fancy
594 (name "i3lock-fancy")
600 (url "https://github.com/meskarune/i3lock-fancy")
602 (file-name (git-file-name name version))
604 (base32 "11g2kkim33ra38d1m897sq1ifajw17iyw9mr7sg1q8i2ibl4lfsi"))))
605 (build-system gnu-build-system)
607 `(#:tests? #f ; no tests included
609 (modify-phases %standard-phases
611 (lambda* (#:key inputs outputs #:allow-other-keys)
612 (let* ((out (assoc-ref outputs "out"))
613 (icons (string-append out "/share/i3lock-fancy/icons/"))
614 (wmctrl (string-append (assoc-ref inputs "wmctrl")
616 (mconvert (string-append (assoc-ref inputs "imagemagick")
618 (mimport (string-append (assoc-ref inputs "imagemagick")
620 (awk (string-append (assoc-ref inputs "gawk")
624 (("\\$\\(command -V wmctrl\\)") wmctrl)
625 (("convert") mconvert)
626 (("shot=\\(import") (string-append "shot=\(" mimport))
627 (("awk -F") (string-append awk " -F"))
629 (("\\$scriptpath/icons/") icons))
633 (lambda* (#:key inputs outputs #:allow-other-keys)
634 (let* ((out (assoc-ref outputs "out"))
635 (bin (string-append out "/bin"))
636 (icons (string-append out "/share/i3lock-fancy/icons/")))
638 (install-file "lock" bin)
639 (rename-file (string-append bin "/lock")
640 (string-append bin "/i3lock-fancy"))
641 (copy-recursively "icons" icons)
644 `(("imagemagick" ,imagemagick)
647 (home-page "https://github.com/meskarune/i3lock-fancy")
648 (synopsis "Screen locker with screenshot function")
650 "@code{i3lock-fancy} is a Bash script that takes a screenshot of
651 the desktop, blurs the background and adds a lock icon and text.
652 It requires @code{i3lock-color} or @code{i3lock} and can optionally
653 be passed any screenshot util like @code{scrot}.
654 This screen locker can be used with any window manager or
655 desktop environment.")
656 (license license:expat)))
658 (define-public xmonad
662 (synopsis "Tiling window manager")
665 (uri (string-append "mirror://hackage/package/xmonad/"
666 "xmonad-" version ".tar.gz"))
669 "0a7rh21k9y6g8fwkggxdxjns2grvvsd5hi2ls4klmqz5xvk4hyaa"))
670 (patches (search-patches "xmonad-dynamic-linking.patch"))))
671 (build-system haskell-build-system)
673 `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
674 ("ghc-quickcheck" ,ghc-quickcheck)
675 ("ghc-semigroups" ,ghc-semigroups)
676 ("ghc-setlocale" ,ghc-setlocale)
677 ("ghc-utf8-string" ,ghc-utf8-string)
678 ("ghc-x11" ,ghc-x11)))
681 (modify-phases %standard-phases
683 'install 'install-xsession
685 (let* ((xsessions (string-append %output "/share/xsessions")))
687 (call-with-output-file
688 (string-append xsessions "/xmonad.desktop")
695 Type=Application~%" ,name ,synopsis %output)))))))))
696 (home-page "https://xmonad.org")
698 "Xmonad is a tiling window manager for X. Windows are arranged
699 automatically to tile the screen without gaps or overlap, maximising screen
700 use. All features of the window manager are accessible from the keyboard: a
701 mouse is strictly optional. Xmonad is written and extensible in Haskell.
702 Custom layout algorithms, and other extensions, may be written by the user in
703 config files. Layouts are applied dynamically, and different layouts may be
704 used on each workspace. Xinerama is fully supported, allowing windows to be
705 tiled on several screens.")
706 (license license:bsd-3)))
708 (define-public xmobar
714 (uri (string-append "mirror://hackage/package/xmobar/"
715 "xmobar-" version ".tar.gz"))
718 "0x09xbz7y9ay0046j1xpr9jjk5jqivqi06vm3q6mhcrgc4y922rx"))))
719 (build-system haskell-build-system)
721 `(("ghc-hspec" ,ghc-hspec)
722 ("hspec-discover" ,hspec-discover)))
724 `(("ghc-alsa-core" ,ghc-alsa-core)
725 ("ghc-alsa-mixer" ,ghc-alsa-mixer)
726 ("ghc-dbus" ,ghc-dbus)
727 ("ghc-hinotify" ,ghc-hinotify)
728 ("ghc-http" ,ghc-http)
729 ("ghc-http-conduit" ,ghc-http-conduit)
730 ("ghc-http-types" ,ghc-http-types)
731 ("ghc-iwlib" ,ghc-iwlib)
732 ("ghc-libmpd" ,ghc-libmpd)
733 ("ghc-old-locale" ,ghc-old-locale)
734 ("ghc-parsec-numbers" ,ghc-parsec-numbers)
735 ("ghc-regex-compat" ,ghc-regex-compat)
736 ("ghc-temporary" ,ghc-temporary)
737 ("ghc-timezone-olson" ,ghc-timezone-olson)
739 ("ghc-x11-xft" ,ghc-x11-xft)
742 `(#:configure-flags (list "--flags=all_extensions")
744 (modify-phases %standard-phases
745 (add-before 'build 'patch-test-shebang
746 (lambda* (#:key inputs #:allow-other-keys)
747 (substitute* "test/Xmobar/Plugins/Monitors/AlsaSpec.hs"
748 (("/bin/bash") (which "bash")))
750 (home-page "https://xmobar.org")
751 (synopsis "Minimalistic text based status bar")
753 "@code{xmobar} is a lightweight, text-based, status bar written in
754 Haskell. It was originally designed to be used together with Xmonad, but it
755 is also usable with any other window manager. While xmobar is written in
756 Haskell, no knowledge of the language is required to install and use it.")
757 (license license:bsd-3)))
759 (define-public yeganesh
767 (uri (string-append "http://dmwit.com/yeganesh/yeganesh-" version ".tar.gz"))
769 (base32 "04djfyjab3c5y9z9x8zd0xcx0jyy35zq7cl9ddr4ppf6k5ky6iky"))))
770 (build-system haskell-build-system)
772 `(("ghc-strict" ,ghc-strict)
773 ("ghc-xdg-basedir" ,ghc-xdg-basedir)))
774 (home-page "http://dmwit.com/yeganesh/")
775 (synopsis "Small wrapper around dmenu")
776 (description "@code{yeganesh} is a small wrapper around demnu. Like
777 dmenu, it accepts input on stdin and writes the chosen result on stdout.
778 Unlike dmenu, it mangles the input before it presents its choices. In
779 particular, it displays commonly-chosen options before uncommon ones.")
780 (license license:bsd-3)))
782 (define-public ghc-xmonad-contrib
784 (name "ghc-xmonad-contrib")
789 (uri (string-append "mirror://hackage/package/xmonad-contrib/"
790 "xmonad-contrib-" version ".tar.gz"))
792 (base32 "1pddgkvnbww28wykncc7j0yb0lv15bk7xnnhdcbrwkxzw66w6wmd"))))
793 (build-system haskell-build-system)
795 `(("ghc-old-time" ,ghc-old-time)
796 ("ghc-random" ,ghc-random)
797 ("ghc-utf8-string" ,ghc-utf8-string)
798 ("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
799 ("ghc-semigroups" ,ghc-semigroups)
801 ("ghc-x11-xft" ,ghc-x11-xft)
803 (home-page "https://xmonad.org")
804 (synopsis "Third party extensions for xmonad")
806 "Third party tiling algorithms, configurations, and scripts to Xmonad, a
807 tiling window manager for X.")
808 (license license:bsd-3)))
810 (define-public evilwm
817 (uri (string-append "http://www.6809.org.uk/evilwm/evilwm-"
821 "0ak0yajzk3v4dg5wmaghv6acf7v02a4iw8qxmq5yw5ard8lrqn3r"))
822 (patches (search-patches "evilwm-lost-focus-bug.patch"))))
823 (build-system gnu-build-system)
827 ("libxrandr" ,libxrandr)))
829 `(#:modules ((srfi srfi-26)
831 (guix build gnu-build-system))
832 #:make-flags (let ((inputs (map (cut assoc-ref %build-inputs <>)
833 '("libx11" "libxext" "libxrandr")))
834 (join (lambda (proc strs)
835 (string-join (map proc strs) " ")))
836 (dash-I (cut string-append "-I" <> "/include"))
837 (dash-L (cut string-append "-L" <> "/lib")))
838 `("desktopfilesdir=$(prefix)/share/xsessions"
839 ,(string-append "prefix=" (assoc-ref %outputs "out"))
840 ,(string-append "CPPFLAGS=" (join dash-I inputs))
841 ,(string-append "LDFLAGS=" (join dash-L inputs))))
842 #:tests? #f ;no tests
843 #:phases (modify-phases %standard-phases
844 (delete 'configure)))) ;no configure script
845 (home-page "http://www.6809.org.uk/evilwm/")
846 (synopsis "Minimalist window manager for the X Window System")
848 "evilwm is a minimalist window manager based on aewm, extended to feature
849 many keyboard controls with repositioning and maximize toggles, solid window
850 drags, snap-to-border support, and virtual desktops.")
851 (license (license:x11-style "file:///README"))))
853 (define-public fluxbox
857 (synopsis "Small and fast window manager")
860 (uri (string-append "mirror://sourceforge/fluxbox/fluxbox/"
861 version "/fluxbox-" version ".tar.xz"))
864 "1h1f70y40qd225dqx937vzb4k2cz219agm1zvnjxakn5jkz7b37w"))))
865 (build-system gnu-build-system)
867 `(#:make-flags '("CPPFLAGS=-U__TIME__") ;ugly, but for reproducibility
869 (modify-phases %standard-phases
870 (add-after 'install 'install-vim-files
871 (lambda* (#:key outputs #:allow-other-keys)
872 (let* ((out (assoc-ref outputs "out"))
873 (syntax (string-append out "/share/vim/vimfiles/syntax")))
874 (copy-recursively "3rd/vim/vim/syntax" syntax)
876 (add-after 'install 'install-xsession
877 (lambda* (#:key outputs #:allow-other-keys)
878 (let* ((out (assoc-ref outputs "out"))
879 (xsessions (string-append out "/share/xsessions")))
881 (call-with-output-file
882 (string-append xsessions "/fluxbox.desktop")
888 Exec=~a/bin/startfluxbox~@
889 Type=Application~%" ,name ,synopsis out)))
892 `(("pkg-config" ,pkg-config)))
894 `(("freetype" ,freetype)
900 ("libxinerama" ,libxinerama)
902 ("libxrandr" ,libxrandr)
903 ("libxrender" ,libxrender)))
904 (description "Fluxbox is a window manager. It is light on resources
905 and easy to handle yet full of features to make an easy and fast desktop
907 (home-page "http://fluxbox.org/")
908 (license license:expat)))
910 (define-public awesome
918 "https://github.com/awesomeWM/awesome-releases/raw/master/"
919 "awesome-" version ".tar.xz"))
921 (base32 "0lqpw401mkkmp9wgbvrmm45bqq2j9357l4irwdqv6l1305pls9kq"))
922 (modules '((guix build utils)
926 ;; Remove non-reproducible timestamp and use the date of
927 ;; the source file instead.
928 (substitute* "common/version.c"
929 (("__DATE__ \" \" __TIME__")
932 (make-time time-utc 0 (stat:mtime (stat "awesome.c"))))
936 (search-patches "awesome-reproducible-png.patch"))))
937 (build-system cmake-build-system)
939 `(("asciidoc" ,asciidoc)
940 ("docbook-xsl" ,docbook-xsl)
943 ("imagemagick" ,imagemagick)
944 ("libxml2" ,libxml2) ;for XML_CATALOG_FILES
945 ("lua-ldoc" ,lua-ldoc)
946 ("pkg-config" ,pkg-config)
951 ("gdk-pixbuf" ,gdk-pixbuf)
953 ("gobject-introspection" ,gobject-introspection)
957 ("libxcursor" ,libxcursor)
958 ("libxdg-basedir" ,libxdg-basedir)
959 ("libxkbcommon" ,libxkbcommon)
963 ("startup-notification" ,startup-notification)
964 ("xcb-util" ,xcb-util)
965 ("xcb-util-cursor" ,xcb-util-cursor)
966 ("xcb-util-image" ,xcb-util-image)
967 ("xcb-util-keysyms" ,xcb-util-keysyms)
968 ("xcb-util-renderutil" ,xcb-util-renderutil)
969 ("xcb-util-xrm" ,xcb-util-xrm)
970 ("xcb-util-wm" ,xcb-util-wm)))
972 `(#:modules ((guix build cmake-build-system)
975 ;; Let compression happen in our 'compress-documentation' phase
976 ;; so that '--no-name' is used, which removes timestamps from
979 '("-DCOMPRESS_MANPAGES=off")
980 ;; Building awesome in its source directory is no longer
984 (modify-phases %standard-phases
985 (add-before 'configure 'set-paths
986 (lambda* (#:key inputs #:allow-other-keys)
987 (substitute* "lib/awful/completion.lua"
990 ;; The build process needs to load Cairo dynamically.
991 (let* ((cairo (string-append (assoc-ref inputs "cairo") "/lib"))
992 (lua-version ,(version-major+minor (package-version lua)))
994 (filter (match-lambda
995 ((label . _) (string-prefix? "lua-" label)))
1002 dir "/share/lua/" lua-version "/?.lua;"
1003 dir "/share/lua/" lua-version "/?/?.lua")))
1011 dir "/lib/lua/" lua-version "/?.so;"
1012 dir "/lib/lua/" lua-version "/?/?.so")))
1015 (setenv "LD_LIBRARY_PATH" cairo)
1016 (setenv "LUA_PATH" (string-append "?.lua;" lua-path))
1017 (setenv "LUA_CPATH" lua-cpath)
1021 ;; There aren't any tests, so just make sure the binary
1022 ;; gets built and can be run successfully.
1023 (invoke "../build/awesome" "-v")))
1024 (add-after 'install 'patch-session-file
1025 (lambda* (#:key outputs #:allow-other-keys)
1026 (let* ((out (assoc-ref outputs "out"))
1027 (awesome (string-append out "/bin/awesome")))
1028 (substitute* (string-append out "/share/xsessions/awesome.desktop")
1029 (("Exec=awesome") (string-append "Exec=" awesome)))
1031 (add-after 'install 'wrap
1032 (lambda* (#:key inputs outputs #:allow-other-keys)
1033 (let* ((awesome (assoc-ref outputs "out"))
1034 (cairo (string-append (assoc-ref inputs "cairo") "/lib"))
1035 (lua-version ,(version-major+minor (package-version lua)))
1036 (lua-lgi (assoc-ref inputs "lua-lgi")))
1037 (wrap-program (string-append awesome "/bin/awesome")
1038 `("LUA_PATH" ";" suffix
1039 (,(format #f "~a/share/lua/~a/?.lua" lua-lgi lua-version)))
1040 `("LUA_CPATH" ";" suffix
1041 (,(format #f "~a/lib/lua/~a/?.so" lua-lgi lua-version)))
1042 `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))
1043 `("LD_LIBRARY_PATH" suffix (,cairo)))
1045 (home-page "https://awesomewm.org/")
1046 (synopsis "Highly configurable window manager")
1048 "Awesome has been designed as a framework window manager. It is fast, small,
1049 dynamic and extensible using the Lua programming language.")
1050 (license license:gpl2+)))
1052 (define-public menumaker
1059 (uri (string-append "mirror://sourceforge/menumaker/"
1060 "menumaker-" version ".tar.gz"))
1062 (base32 "034v5204bsgkzzk6zfa5ia63q95gln47f7hwf96yvad5hrhmd8z3"))))
1063 (build-system gnu-build-system)
1065 `(("python" ,python)))
1066 (synopsis "Heuristics-driven menu generator")
1068 "MenuMaker is a menu generation utility for a number of X window
1069 managers and desktop environments. It is capable of finding lots of
1070 installed programs and generating a root menu consistent across all
1071 supported window managers, so one will get (almost) the same menu in
1072 all of them. Currently supported window managers include:
1084 (home-page "http://menumaker.sourceforge.net/")
1085 (license license:bsd-2)))
1087 (define-public keybinder
1094 (uri (string-append "https://github.com/kupferlauncher/keybinder"
1095 "/releases/download/v" version "/keybinder-"
1097 (file-name (string-append name "-" version ".tar.gz"))
1100 "0h52hj3ay8mfhwvmfxbxlfyq74hifdk8wxgxp7fr4iy6189hg7w7"))))
1101 (build-system gnu-build-system)
1103 `(("python-2" ,python-2)
1104 ("gtk+-2" ,gtk+-2)))
1106 `(("python2-pygtk" ,python2-pygtk)
1107 ("gtk-doc" ,gtk-doc)
1108 ("pkg-config" ,pkg-config)))
1109 (synopsis "Library for registering global keyboard shortcuts")
1111 "Keybinder is a library for registering global keyboard shortcuts.
1112 Keybinder works with GTK-based applications using the X Window System.")
1113 (home-page "https://github.com/kupferlauncher/keybinder")
1114 (license license:gpl2+)))
1116 (define-public keybinder-3.0
1118 (name "keybinder-3.0")
1123 (uri (string-append "https://github.com/kupferlauncher/keybinder"
1124 "/releases/download/" name "-v" version "/" name "-"
1126 (file-name (string-append name "-" version ".tar.gz"))
1129 "0830ihwnalw59pp1xzrp37dn58n8vwb8zasnm4a1h81v3x7dxqz6"))))
1130 (build-system gnu-build-system)
1133 ("gobject-introspection" ,gobject-introspection)))
1135 `(("gtk-doc" ,gtk-doc)
1136 ("pkg-config" ,pkg-config)))
1137 (synopsis "Library for registering global keyboard shortcuts, Gtk3 version")
1139 "Keybinder is a library for registering global keyboard shortcuts.
1140 Keybinder works with GTK-based applications using the X Window System.")
1141 (home-page "https://github.com/kupferlauncher/keybinder")
1142 (license license:x11)))
1144 (define-public spectrwm
1152 (url "https://github.com/conformal/spectrwm")
1154 (string-append "SPECTRWM_"
1155 (string-join (string-split version #\.) "_")))))
1156 (file-name (git-file-name name version))
1158 (base32 "1dfqy5f0s1nv6rqkz9lj006vypmp4rwxd5vczfk3ndzqgnh19kw6"))))
1159 (build-system gnu-build-system)
1161 `(#:make-flags (let ((pkg-config (lambda (flag)
1163 "$(shell pkg-config " flag " "
1164 "xft fontconfig x11 libpng)"))))
1167 (string-append "PREFIX=" %output)
1168 (string-append "INCS=-I. " (pkg-config "--cflags"))
1169 (string-append "LIBS=" (pkg-config "--libs") " -lm")))
1170 #:tests? #f ;no test suite
1172 (modify-phases %standard-phases
1173 (add-before 'build 'change-dir
1175 (chdir "linux") #t))
1176 (add-after 'change-dir 'patch-makefile
1178 (substitute* "Makefile"
1180 (delete 'configure)))) ;no 'configure' exists
1182 `(("freetype" ,freetype)
1183 ("fontconfig" ,fontconfig)
1185 ("libxcursor" ,libxcursor)
1186 ("libxrandr" ,libxrandr)
1187 ("libxtst" ,libxtst)
1189 ("xcb-util" ,xcb-util)
1190 ("xcb-util-wm" ,xcb-util-wm)
1191 ("xcb-util-keysyms" ,xcb-util-keysyms)))
1194 ("pkg-config" ,pkg-config)))
1195 (synopsis "Minimalistic automatic tiling window manager")
1197 "Spectrwm is a small dynamic tiling and reparenting window manager for X11.
1198 It is inspired by Xmonad and dwm. Its major features include:
1201 @item Navigation anywhere on all screens with either the keyboard or mouse
1202 @item Customizable status bar
1203 @item Restartable without losing state
1204 @item Quick launch menu
1205 @item Many screen layouts possible with a few simple key strokes
1206 @item Move/resize floating windows
1207 @item Extended Window Manager Hints (@dfn{EWMH}) support
1208 @item Configurable tiling
1209 @item Adjustable tile gap allows for a true one pixel border
1210 @item Customizable colors and border width
1212 (home-page "https://github.com/conformal/spectrwm")
1213 (license license:isc)))
1222 (uri (string-append "https://leahneukirchen.org/releases/cwm-"
1225 (base32 "022zld29qawd8gl700g4m24qa89il3aks397zkhh66wvzssdblzx"))))
1226 (build-system gnu-build-system)
1228 `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
1229 (string-append "PREFIX=" %output))
1232 (modify-phases %standard-phases
1234 (add-after 'build 'install-xsession
1235 (lambda* (#:key outputs #:allow-other-keys)
1236 ;; Add a .desktop file to xsessions.
1237 (let* ((output (assoc-ref outputs "out"))
1238 (xsessions (string-append output "/share/xsessions")))
1240 (with-output-to-file
1241 (string-append xsessions "/cwm.desktop")
1246 Comment=OpenBSD Calm Window Manager fork~@
1248 TryExec=~@*~a/bin/cwm~@
1254 `(("libxft" ,libxft)
1255 ("libxrandr" ,libxrandr)
1256 ("libxinerama" ,libxinerama)))
1258 `(("pkg-config" ,pkg-config)
1260 (home-page "https://github.com/leahneukirchen/cwm")
1261 (synopsis "OpenBSD fork of the calmwm window manager")
1262 (description "Cwm is a stacking window manager for X11. It is an OpenBSD
1263 project derived from the original Calm Window Manager.")
1264 (license license:isc)))
1273 (url "https://github.com/djpohly/dwl")
1274 (commit (string-append "v" version))))
1275 (file-name (git-file-name name version))
1278 "0r5hsxpckkrq1y7bjfq58rlc5xy45z499rg628q3nh289978ail1"))))
1279 (build-system gnu-build-system)
1281 `(#:tests? #f ; no tests
1284 (string-append "CC=" ,(cc-for-target))
1285 (string-append "PREFIX=" (assoc-ref %outputs "out")))
1287 (modify-phases %standard-phases
1288 (delete 'configure)))) ; no configure
1290 `(("pkg-config" ,pkg-config)))
1292 `(("wlroots" ,wlroots)))
1293 (home-page "https://github.com/djpohly/dwl")
1294 (synopsis "Dynamic window manager for Wayland")
1296 "@command{dwl} is a compact, hackable compositor for Wayland based on
1297 wlroots. It is intended to fill the same space in the Wayland world that dwm
1298 does in X11, primarily in terms of philosophy, and secondarily in terms of
1299 functionality. Like dwm, dwl is easy to understand and hack on, due to a
1300 limited size and a few external dependencies. It is configurable via
1302 ;; LICENSE LICENSE.dwm LICENSE.tinywl
1303 (license (list license:gpl3+ license:expat license:cc0))))
1305 (define-public nitrogen
1311 (uri (string-append "http://github.com/l3ib/nitrogen/"
1312 "releases/download/" version "/"
1313 name "-" version ".tar.gz"))
1316 "0zc3fl1mbhq0iyndy4ysmy8vv5c7xwf54rbgamzfhfvsgdq160pl"))))
1317 (build-system gnu-build-system)
1322 ("glibmm" ,glibmm)))
1324 `(("pkg-config" ,pkg-config)))
1325 (home-page "http://projects.l3ib.org/nitrogen/")
1326 (synopsis "Background browser and setter for X windows")
1328 "This package is a background browser and setter for X windows. It's
1332 @item Multihead and Xinerama aware
1333 @item Recall mode to used via startup script
1334 @item Uses freedesktop.org standard for thumbnails
1335 @item Can set GNOME background
1336 @item Command lie set modes for script use
1337 @item Inotify monitoring of browse directory
1338 @item Lazy loading of thumbnails - conserves memory
1339 @item \"Automatic\" set mode - determines best mode to set an image based on
1341 @item Display preview images in a tiled icon layout
1343 (license license:gpl2+)))
1345 (define-public polybar
1352 (uri (string-append "https://github.com/polybar/polybar/releases/"
1353 "download/" version "/polybar-" version ".tar.gz"))
1355 (base32 "1c8br9972x1qw7l2shj9aqzv0gsx58fdh3r0f1z5i1bqdwxmsqky"))))
1356 (build-system cmake-build-system)
1358 ;; Test is disabled because it requires downloading googletest from the
1362 `(("alsa-lib" ,alsa-lib)
1365 ("jsoncpp" ,jsoncpp)
1366 ("libmpdclient" ,libmpdclient)
1369 ("pulseaudio" ,pulseaudio)
1370 ("xcb-proto" ,xcb-proto)
1371 ("xcb-util" ,xcb-util)
1372 ("xcb-util-cursor" ,xcb-util-cursor)
1373 ("xcb-util-image" ,xcb-util-image)
1374 ("xcb-util-wm" ,xcb-util-wm)
1375 ("xcb-util-xrm" ,xcb-util-xrm)))
1377 `(("pkg-config" ,pkg-config)
1378 ("python-sphinx" ,python-sphinx) ; for the manual
1379 ;; XXX: "python" input must be located after "python-2", or the package
1380 ;; fails to build with "missing required python module: xcbgen".
1381 ("python-2" ,python-2) ; lib/xpp depends on python 2
1382 ("python" ,python))) ; xcb-proto depends on python 3
1383 (home-page "https://polybar.github.io/")
1384 (synopsis "Fast and easy-to-use status bar")
1385 (description "Polybar aims to help users build beautiful and highly
1386 customizable status bars for their desktop environment. It has built-in
1387 functionality to display information about the most commonly used services.")
1388 (license license:expat)))
1390 (define-public wlroots
1398 (url "https://github.com/swaywm/wlroots")
1400 (file-name (git-file-name name version))
1402 (base32 "01j38lmgs2c6fq68v8b75pkilia2wsgzgp46ivfbi9hhx47kgcfn"))))
1403 (build-system meson-build-system)
1405 `(#:configure-flags '("-Dlogind-provider=elogind")
1408 (modify-phases %standard-phases
1409 (add-before 'configure 'hardcode-paths
1410 (lambda* (#:key inputs #:allow-other-keys)
1411 (substitute* "xwayland/server.c"
1412 (("Xwayland") (string-append (assoc-ref inputs
1413 "xorg-server-xwayland")
1417 `(;; As required by wlroots.pc.
1418 ("elogind" ,elogind)
1420 ("libinput" ,libinput)
1421 ("libxkbcommon" ,libxkbcommon)
1424 ("wayland" ,wayland)
1425 ("wayland-protocols" ,wayland-protocols)
1426 ("xcb-util-errors" ,xcb-util-errors)
1427 ("xcb-util-wm" ,xcb-util-wm)
1428 ("xorg-server-xwayland" ,xorg-server-xwayland)))
1430 `(("pkg-config" ,pkg-config)))
1431 (home-page "https://github.com/swaywm/wlroots")
1432 (synopsis "Pluggable, composable, unopinionated modules for building a
1433 Wayland compositor")
1434 (description "wlroots is a set of pluggable, composable, unopinionated
1435 modules for building a Wayland compositor.")
1436 (license license:expat))) ; MIT license
1446 (url "https://github.com/swaywm/sway")
1448 (file-name (git-file-name name version))
1450 (base32 "1xsa3h8zhf29p0mi90baxpr76jkd9pd1gr97ky8cnjbcs4isj9j0"))))
1451 (build-system meson-build-system)
1454 (modify-phases %standard-phases
1455 (add-before 'configure 'hardcode-paths
1456 (lambda* (#:key inputs #:allow-other-keys)
1457 ;; Hardcode path to swaybg.
1458 (substitute* "sway/config.c"
1459 (("strdup..swaybg..")
1460 (string-append "strdup(\"" (assoc-ref inputs "swaybg")
1462 ;; Hardcode path to scdoc.
1463 (substitute* "meson.build"
1464 (("scdoc.get_pkgconfig_variable..scdoc..")
1465 (string-append "'" (assoc-ref inputs "scdoc")
1468 (inputs `(("cairo" ,cairo)
1469 ("elogind" ,elogind)
1470 ("gdk-pixbuf" ,gdk-pixbuf)
1472 ("libevdev" ,libevdev)
1473 ("libinput" ,libinput)
1474 ("libxkbcommon" ,libxkbcommon)
1477 ("wayland" ,wayland)
1478 ("wlroots" ,wlroots)))
1480 `(("linux-pam" ,linux-pam)
1482 ("pkg-config" ,pkg-config)
1484 ("wayland-protocols" ,wayland-protocols)))
1485 (home-page "https://github.com/swaywm/sway")
1486 (synopsis "Wayland compositor compatible with i3")
1487 (description "Sway is a i3-compatible Wayland compositor.")
1488 (license license:expat)))
1490 (define-public swayidle
1498 (url "https://github.com/swaywm/swayidle")
1500 (file-name (git-file-name name version))
1502 (base32 "1nd3v8r9549lykdwh4krldfl59lzaspmmai5k1icy7dvi6kkr18r"))))
1503 (build-system meson-build-system)
1505 `(#:configure-flags '("-Dlogind-provider=elogind")))
1506 (inputs `(("elogind" ,elogind)
1507 ("wayland" ,wayland)))
1508 (native-inputs `(("pkg-config" ,pkg-config)
1510 ("wayland-protocols" ,wayland-protocols)))
1511 (home-page "https://github.com/swaywm/sway")
1512 (synopsis "Idle management daemon for Wayland compositors")
1513 (description "Swayidle is a idle management daemon for Wayland compositors.")
1514 (license license:expat))) ; MIT license
1516 (define-public swaylock
1524 (url "https://github.com/swaywm/swaylock")
1526 (file-name (git-file-name name version))
1528 (base32 "0r95p4w11dwm5ra614vddz83r8j7z6gd120z2vcchy7m9b0f15kf"))))
1529 (build-system meson-build-system)
1530 (inputs `(("cairo" ,cairo)
1531 ("gdk-pixbuf" ,gdk-pixbuf)
1532 ("libxkbcommon" ,libxkbcommon)
1533 ;("linux-pam" ,linux-pam) ; FIXME: Doesn't work.
1534 ("wayland" ,wayland)))
1535 (native-inputs `(("pango" ,pango)
1536 ("pkg-config" ,pkg-config)
1538 ("wayland-protocols" ,wayland-protocols)))
1539 (home-page "https://github.com/swaywm/sway")
1540 (synopsis "Screen locking utility for Wayland compositors")
1541 (description "Swaylock is a screen locking utility for Wayland compositors.")
1542 (license license:expat))) ; MIT license
1544 (define-public swaybg
1552 (url "https://github.com/swaywm/swaybg")
1554 (file-name (git-file-name name version))
1556 (base32 "1lmqz5bmig90gq2m7lwf02d2g7z4hzf8fhqz78c8vk92c6p4xwbc"))))
1557 (build-system meson-build-system)
1558 (inputs `(("cairo" ,cairo)
1559 ("gdk-pixbuf" ,gdk-pixbuf)
1560 ("wayland" ,wayland)))
1561 (native-inputs `(("pkg-config" ,pkg-config)
1563 ("wayland-protocols" ,wayland-protocols)))
1564 (home-page "https://github.com/swaywm/sway")
1565 (synopsis "Screen wallpaper utility for Wayland compositors")
1566 (description "Swaybg is a wallpaper utility for Wayland compositors.")
1567 (license license:expat))) ; MIT license
1569 (define-public waybar
1577 (url "https://github.com/Alexays/Waybar")
1579 (file-name (git-file-name name version))
1581 (base32 "1kzrgqaclfk6gcwhknxn28xl74gm5swipgn8kk8avacb4nsw1l9q"))))
1582 (build-system meson-build-system)
1583 (inputs `(("date" ,date)
1585 ("gtk-layer-shell" ,gtk-layer-shell)
1587 ("jsoncpp" ,jsoncpp)
1588 ("libdbusmenu" ,libdbusmenu)
1589 ("libinput" ,libinput)
1590 ("libmpdclent" ,libmpdclient)
1592 ("pulseaudio" ,pulseaudio)
1594 ("wayland" ,wayland)))
1596 `(("gcc" ,gcc-8) ; for #include <filesystem>
1597 ("glib:bin" ,glib "bin")
1598 ("pkg-config" ,pkg-config)
1600 ("wayland-protocols" ,wayland-protocols)))
1601 (home-page "https://github.com/Alexays/Waybar")
1602 (synopsis "Wayland bar for Sway and Wlroots based compositors")
1603 (description "Waybar is a highly customisable Wayland bar for Sway and
1604 Wlroots based compositors.")
1605 (license license:expat))) ; MIT license
1607 (define-public wlr-randr
1615 (url "https://github.com/emersion/wlr-randr")
1616 (commit (string-append "v" version))))
1617 (file-name (git-file-name name version))
1619 (base32 "10c8zzp78s5bw34vvjhilipa28bsdx3jbyhnxgp8f8kawh3cvgsc"))))
1620 (build-system meson-build-system)
1621 (inputs `(("wayland" ,wayland)))
1622 (native-inputs `(("pkg-config" ,pkg-config)))
1623 (home-page "https://github.com/emersion/wlr-randr")
1624 (synopsis "Utility to manage Wayland compositor outputs")
1625 (description "wlr-randr is a utility to manage outputs of a Wayland compositor.")
1626 (license license:expat))) ; MIT license
1636 (url "https://github.com/emersion/mako")
1637 (commit (string-append "v" version))))
1638 (file-name (git-file-name name version))
1640 (base32 "0hwvibpnrximb628w9dsfjpi30b5jy7nfkm4d94z5vhp78p43vxh"))))
1641 (build-system meson-build-system)
1642 (inputs `(("cairo" ,cairo)
1643 ("elogind" ,elogind)
1644 ("gdk-pixbuf" ,gdk-pixbuf)
1646 ("wayland" ,wayland)))
1647 (native-inputs `(("pkg-config" ,pkg-config)
1649 ("wayland-protocols" ,wayland-protocols)))
1650 (home-page "https://wayland.emersion.fr/mako")
1651 (synopsis "Lightweight Wayland notification daemon")
1652 (description "Mako is a lightweight notification daemon for Wayland
1653 compositors that support the layer-shell protocol.")
1654 (license license:expat))) ; MIT license
1656 (define-public kanshi
1664 (url "https://github.com/emersion/kanshi")
1665 (commit (string-append "v" version))))
1666 (file-name (git-file-name name version))
1668 (base32 "0nbpgm8qnn7ljsg9vgs35kl8l4rrk542vdcbx8wrn9r909ld3x92"))))
1669 (build-system meson-build-system)
1670 (inputs `(("wayland" ,wayland)))
1671 (native-inputs `(("pkg-config" ,pkg-config)
1673 (home-page "https://wayland.emersion.fr/kanshi")
1674 (synopsis "Hotswappable output profiles for Wayland")
1675 (description "Kanshi allows you to define output profiles that are
1676 automatically enabled and disabled on hotplug. Kanshi can be used with
1677 Wayland compositors supporting the wlr-output-management protocol.")
1678 (license license:expat))) ; MIT license
1680 (define-public stumpwm
1688 (url "https://github.com/stumpwm/stumpwm")
1690 (file-name (git-file-name "stumpwm" version))
1692 (base32 "1ghs6ihvmb3bz4q4ys1d3h6rdi96xyiw7l2ip7jh54c25049aymf"))))
1693 (build-system asdf-build-system/sbcl)
1694 (native-inputs `(("fiasco" ,sbcl-fiasco)
1695 ("texinfo" ,texinfo)
1697 ;; To build the manual.
1698 ("autoconf" ,autoconf)
1699 ("automake" ,automake)))
1700 (inputs `(("cl-ppcre" ,sbcl-cl-ppcre)
1702 ("alexandria" ,sbcl-alexandria)))
1703 (outputs '("out" "lib"))
1705 '(#:asd-systems '("stumpwm")
1707 (modify-phases %standard-phases
1708 (add-after 'create-asdf-configuration 'build-program
1709 (lambda* (#:key outputs #:allow-other-keys)
1711 (string-append (assoc-ref outputs "out") "/bin/stumpwm")
1713 #:entry-program '((stumpwm:stumpwm) 0))))
1714 (add-after 'build-program 'create-desktop-file
1715 (lambda* (#:key outputs #:allow-other-keys)
1716 (let* ((out (assoc-ref outputs "out"))
1717 (xsessions (string-append out "/share/xsessions")))
1719 (call-with-output-file
1720 (string-append xsessions "/stumpwm.desktop")
1725 Comment=The Stump Window Manager~@
1726 Exec=~a/bin/stumpwm~@
1727 TryExec=~@*~a/bin/stumpwm~@
1732 (add-after 'install 'install-manual
1733 (lambda* (#:key (make-flags '()) outputs #:allow-other-keys)
1734 (let* ((out (assoc-ref outputs "out"))
1735 (info (string-append out "/share/info")))
1736 (invoke "./autogen.sh")
1737 (invoke "sh" "./configure" "SHELL=sh")
1738 (apply invoke "make" "stumpwm.info" make-flags)
1739 (install-file "stumpwm.info" info)
1741 (synopsis "Window manager written in Common Lisp")
1742 (description "Stumpwm is a window manager written entirely in Common Lisp.
1743 It attempts to be highly customizable while relying entirely on the keyboard
1744 for input. These design decisions reflect the growing popularity of
1745 productive, customizable lisp based systems.")
1746 (home-page "https://github.com/stumpwm/stumpwm")
1747 (license license:gpl2+)
1748 (properties `((cl-source-variant . ,(delay cl-stumpwm))))))
1750 (define-public sbcl-stumpwm
1751 (deprecated-package "sbcl-stumpwm" stumpwm))
1753 (define-public cl-stumpwm
1755 (inherit (sbcl-package->cl-source-package stumpwm))
1756 (name "cl-stumpwm")))
1758 (define-public stumpwm+slynk
1761 (name "stumpwm-with-slynk")
1764 `(("stumpwm" ,stumpwm "lib")
1765 ("slynk" ,sbcl-slynk)))
1767 (substitute-keyword-arguments (package-arguments stumpwm)
1769 `(modify-phases ,phases
1770 (replace 'build-program
1771 (lambda* (#:key inputs outputs #:allow-other-keys)
1772 (let* ((out (assoc-ref outputs "out"))
1773 (program (string-append out "/bin/stumpwm")))
1774 (setenv "HOME" "/tmp")
1775 (build-program program outputs
1776 #:entry-program '((stumpwm:stumpwm) 0)
1777 #:dependencies '("stumpwm" "slynk")
1778 #:dependency-prefixes
1779 (map (lambda (input) (assoc-ref inputs input))
1780 '("stumpwm" "slynk")))
1782 (delete 'copy-source)
1785 (delete 'cleanup)))))))
1787 (define stumpwm-contrib
1788 (let ((commit "a7dc1c663d04e6c73a4772c8a6ad56a34381096a")
1791 (name "stumpwm-contrib")
1792 (version (git-version "0.0.1" revision commit)) ;no upstream release
1797 (url "https://github.com/stumpwm/stumpwm-contrib")
1799 (file-name (git-file-name name version))
1801 (base32 "09akdaaya7lga5lzbq1aj1filsyjwvflghkidpmr0nk0jz5xx1g7"))))
1802 (build-system asdf-build-system/sbcl)
1804 `(("stumpwm" ,stumpwm "lib")))
1805 (home-page "https://github.com/stumpwm/stumpwm-contrib")
1806 (synopsis "StumpWM interactive shell")
1807 (description "This package provides a StumpWM interactive shell.")
1808 (license (list license:gpl2+ license:gpl3+ license:bsd-2)))))
1810 (define-public stumpish
1812 (inherit stumpwm-contrib)
1818 (build-system trivial-build-system)
1820 '(#:modules ((guix build utils))
1823 (use-modules (guix build utils))
1824 (copy-recursively (assoc-ref %build-inputs "source") ".")
1825 (chdir "util/stumpish")
1826 (substitute* "stumpish"
1827 (("rlwrap") (string-append (assoc-ref %build-inputs "rlwrap")
1829 (("xprop") (string-append (assoc-ref %build-inputs "xprop")
1831 (("/bin/sh") (string-append (assoc-ref %build-inputs "bash")
1833 (install-file "stumpish" (string-append %output "/bin")))))
1834 (home-page "https://github.com/stumpwm/stumpwm-contrib")
1835 (synopsis "StumpWM interactive shell")
1836 (description "This package provides a StumpWM interactive shell.")
1837 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
1839 (define-public sbcl-stumpwm+slynk
1840 (deprecated-package "sbcl-stumpwm-with-slynk" stumpwm+slynk))
1842 (define-public sbcl-stumpwm-ttf-fonts
1844 (inherit stumpwm-contrib)
1845 (name "sbcl-stumpwm-ttf-fonts")
1847 `(("stumpwm" ,stumpwm "lib")
1848 ("clx-truetype" ,sbcl-clx-truetype)))
1850 '(#:asd-systems '("ttf-fonts")
1853 (modify-phases %standard-phases
1854 (add-after 'unpack 'chdir
1855 (lambda _ (chdir "util/ttf-fonts") #t)))))
1856 (home-page "https://github.com/stumpwm/stumpwm-contrib")
1857 (synopsis "Implementation of TTF font rendering for Lisp")
1858 (description "This package provides a Lisp implementation of TTF font
1860 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
1862 (define-public sbcl-stumpwm-pass
1864 (inherit stumpwm-contrib)
1865 (name "sbcl-stumpwm-pass")
1867 '(#:asd-systems '("pass")
1870 (modify-phases %standard-phases
1871 (add-after 'unpack 'chdir
1872 (lambda _ (chdir "util/pass") #t)))))
1873 (home-page "https://github.com/stumpwm/stumpwm-contrib")
1874 (synopsis "Integrate @code{pass} with StumpWM")
1875 (description "This package provides an interface which integrates
1876 password-store into StumpWM.")
1877 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
1879 (define-public sbcl-stumpwm-globalwindows
1881 (inherit stumpwm-contrib)
1882 (name "sbcl-stumpwm-globalwindows")
1884 '(#:asd-systems '("globalwindows")
1887 (modify-phases %standard-phases
1888 (add-after 'unpack 'chdir
1889 (lambda _ (chdir "util/globalwindows") #t)))))
1890 (home-page "https://github.com/stumpwm/stumpwm-contrib")
1891 (synopsis "Manipulate all windows in the current X session")
1892 (description "This package provides a StumpWM module to manipulate all
1893 windows in the current X session.")
1894 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
1896 (define-public sbcl-stumpwm-swm-gaps
1898 (inherit stumpwm-contrib)
1899 (name "sbcl-stumpwm-swm-gaps")
1901 '(#:asd-systems '("swm-gaps")
1904 (modify-phases %standard-phases
1905 (add-after 'unpack 'chdir
1906 (lambda _ (chdir "util/swm-gaps") #t)))))
1907 (home-page "https://github.com/stumpwm/stumpwm-contrib")
1908 (synopsis "Gaps between windows for StumpWM")
1909 (description "This package provides a StumpWM module which adds gaps
1911 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
1913 (define-public sbcl-stumpwm-net
1915 (inherit stumpwm-contrib)
1916 (name "sbcl-stumpwm-net")
1918 '(#:asd-systems '("net")
1921 (modify-phases %standard-phases
1922 (add-after 'unpack 'chdir (lambda _ (chdir "modeline/net") #t)))))
1924 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/net")
1925 (synopsis "Modeline support for network connectivity")
1926 (description "Modeline support for network connectivity.")
1928 (filter (lambda (a) (string-contains a "linux")) %supported-systems))
1929 (license license:gpl3+)))
1931 (define-public sbcl-stumpwm-wifi
1933 (inherit stumpwm-contrib)
1934 (name "sbcl-stumpwm-wifi")
1936 '(#:asd-systems '("wifi")
1939 (modify-phases %standard-phases
1940 (add-after 'unpack 'chdir (lambda _ (chdir "modeline/wifi") #t)))))
1942 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/wifi")
1943 (synopsis "Modeline support for wifi connectivity")
1944 (description "Modeline support for wifi connectivity.")
1946 (filter (lambda (a) (string-contains a "linux")) %supported-systems))
1947 (license license:gpl3+)))
1949 (define-public sbcl-stumpwm-stumptray
1951 (inherit stumpwm-contrib)
1952 (name "sbcl-stumpwm-stumptray")
1954 '(#:asd-systems '("stumptray")
1957 (modify-phases %standard-phases
1958 (add-after 'unpack 'chdir (lambda _ (chdir "modeline/stumptray") #t)))))
1960 `(("stumpwm" ,stumpwm "lib")
1961 ("xembed" ,sbcl-clx-xembed)
1962 ("alexandria" ,sbcl-alexandria)))
1964 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/stumptray")
1965 (synopsis "Modeline support for stumptray connectivity")
1966 (description "Modeline support for stumptray connectivity.")
1968 (filter (lambda (a) (string-contains a "linux")) %supported-systems))
1969 (license license:gpl3+)))
1971 (define-public sbcl-stumpwm-kbd-layouts
1973 (inherit stumpwm-contrib)
1974 (name "sbcl-stumpwm-kbd-layouts")
1976 '(#:asd-systems '("kbd-layouts")
1979 (modify-phases %standard-phases
1980 (add-after 'unpack 'chdir (lambda _ (chdir "util/kbd-layouts") #t)))))
1982 "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/kbd-layouts")
1983 (synopsis "Keyboard layout switcher for StumpWM")
1984 (description "Keyboard layout switcher for StumpWM")
1985 (license license:gpl3+)))
1987 (define-public sbcl-stumpwm-numpad-layouts
1989 (inherit stumpwm-contrib)
1990 (name "sbcl-stumpwm-numpad-layouts")
1992 '(#:asd-systems '("numpad-layouts")
1995 (modify-phases %standard-phases
1996 (add-after 'unpack 'chdir
1998 (chdir "util/numpad-layouts"))))))
2000 "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/numpad-layouts")
2001 (synopsis "Keyboard numpad layouts for StumpWM")
2002 (description "This is a module for handling different keyboards numpad
2003 layouts in StumpWM.")
2004 (license license:gpl3+)))
2006 (define-public sbcl-stumpwm-cpu
2008 (inherit stumpwm-contrib)
2009 (name "sbcl-stumpwm-cpu")
2011 '(#:asd-systems '("cpu")
2014 (modify-phases %standard-phases
2015 (add-after 'unpack 'chdir
2017 (chdir "modeline/cpu"))))))
2019 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/cpu")
2020 (synopsis "Modeline support for CPU info")
2021 (description "Modeline support for CPU info.")
2022 (license license:gpl3+)))
2024 (define-public sbcl-stumpwm-disk
2026 (inherit stumpwm-contrib)
2027 (name "sbcl-stumpwm-disk")
2029 '(#:asd-systems '("disk")
2032 (modify-phases %standard-phases
2033 (add-after 'unpack 'chdir
2034 (lambda _ (chdir "modeline/disk") #t)))))
2036 `(("stumpwm" ,stumpwm "lib")
2037 ("cl-diskspace" ,sbcl-cl-diskspace)
2038 ("cl-mount-info" ,sbcl-cl-mount-info)))
2039 (home-page "https://github.com/stumpwm/stumpwm-contrib")
2040 (synopsis "StumpWM modeline support to show disk usage")
2041 (description "StumpWM modeline support to show disk usage")
2042 (license (list license:gpl2+ license:gpl3+))))
2044 (define-public sbcl-stumpwm-mem
2046 (inherit stumpwm-contrib)
2047 (name "sbcl-stumpwm-mem")
2049 '(#:asd-systems '("mem")
2052 (modify-phases %standard-phases
2053 (add-after 'unpack 'chdir
2055 (chdir "modeline/mem"))))))
2057 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/mem")
2058 (synopsis "Modeline support for memory info")
2059 (description "Modeline support for memory info.")
2060 (license license:gpl3+)))
2062 (define-public sbcl-stumpwm-winner-mode
2064 (inherit stumpwm-contrib)
2065 (name "sbcl-stumpwm-winner-mode")
2067 '(#:asd-systems '("winner-mode")
2070 (modify-phases %standard-phases
2071 (add-after 'unpack 'chdir
2073 (chdir "util/winner-mode"))))))
2075 "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/winner-mode")
2076 (synopsis "Emacs' winner-mode for StumpWM")
2077 (description "This module provides a winner-mode for StumpWM similar to the
2079 (license license:gpl3+)))
2081 (define-public sbcl-stumpwm-screenshot
2083 (inherit stumpwm-contrib)
2084 (name "sbcl-stumpwm-screenshot")
2086 `(("stumpwm" ,stumpwm "lib")
2087 ("zpng" ,sbcl-zpng)))
2089 '(#:asd-systems '("screenshot")
2092 (modify-phases %standard-phases
2093 (add-after 'unpack 'chdir
2095 (chdir "util/screenshot")))
2096 (add-after 'chdir 'fix-build
2098 (substitute* "screenshot.asd"
2100 "#:stumpwm #:zpng")))))))
2102 "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/screenshot")
2103 (synopsis "Screenshots for StumpWM")
2104 (description "This StumpWM module can take screenshots and store them as
2106 (license license:gpl3+)))
2108 (define-public lemonbar
2109 (let ((commit "35183ab81d2128dbb7b6d8e119cc57846bcefdb4")
2113 (version (git-version "1.3" revision commit))
2117 (url "https://github.com/LemonBoy/bar")
2119 (file-name (git-file-name name version))
2122 "1wwqbph392iwz8skaqxb0xpklb1l6yganqz80g4x1fhrnz7idmlh"))))
2123 (build-system gnu-build-system)
2125 `(#:tests? #f ; no test suite
2127 (list ,(string-append "CC=" (cc-for-target))
2128 (string-append "PREFIX=" %output))
2130 (modify-phases %standard-phases
2131 (delete 'configure))))
2133 `(("libxcb" ,libxcb)))
2136 (home-page "https://github.com/LemonBoy/bar")
2137 (synopsis "Featherweight status bar")
2139 "@code{lemonbar} (formerly known as @code{bar}) is a lightweight
2140 bar entirely based on XCB. Provides full UTF-8 support, basic
2141 formatting, RandR and Xinerama support and EWMH compliance without
2142 wasting your precious memory.")
2143 (license license:x11))))
2145 (define-public lemonbar-xft
2146 ;; Upstream v2.0 tag is several years behind HEAD
2147 (let ((commit "481e12363e2a0fe0ddd2176a8e003392be90ed02"))
2150 (name "lemonbar-xft")
2151 (version (string-append "2.0." (string-take commit 7)))
2155 (url "https://github.com/drscream/lemonbar-xft")
2157 (file-name (git-file-name name version))
2160 "0588g37h18lv50h7w8vfbwhvc3iajh7sdr53848spaif99nh3mh4"))))
2162 `(("freetype" ,freetype)
2165 ,@(package-inputs lemonbar)))
2167 (substitute-keyword-arguments (package-arguments lemonbar)
2168 ((#:make-flags make-flags)
2171 (list (string-append
2174 (list (string-append
2175 "-I" (assoc-ref %build-inputs "freetype")
2176 "/include/freetype2")
2179 (format #f "'~s'" ,version))))))))))
2180 (home-page "https://github.com/drscream/lemonbar-xft")
2183 (package-synopsis lemonbar)
2184 " with fontconfig support"))
2187 (package-description lemonbar)
2188 "This is a fork of the @code{lemonbar} package that adds fontconfig
2189 support, for easier unicode usage.")))))
2191 (define-public xclickroot
2198 (url "https://github.com/phillbush/xclickroot")
2199 (commit (string-append "v" version))))
2200 (file-name (git-file-name name version))
2203 "1nd5qz0qz5j7gx2jsbcp234giwaa0xmg42vrcjrcf587q9ivakfl"))))
2204 (build-system gnu-build-system)
2206 `(("libx11" ,libx11)))
2208 `(#:tests? #f ;no test suite
2210 (list ,(string-append "CC=" (cc-for-target))
2211 (string-append "PREFIX=" %output))
2213 (modify-phases %standard-phases
2214 (delete 'configure))))
2215 (home-page "https://github.com/phillbush/xclickroot")
2216 (synopsis "Run a command when a mouse button is pressed on the root window")
2217 (description "@code{xclickroot} runs a command every time a given mouse
2218 button is pressed on the root window.")
2219 (license license:public-domain)))
2221 (define-public xmenu
2228 (url "https://github.com/phillbush/xmenu")
2229 (commit (string-append "v" version))))
2230 (file-name (git-file-name name version))
2233 "1s70zvsaqnsjqs298vw3py0vcvia68xlks1wcz37pb88bwligz1x"))))
2234 (build-system gnu-build-system)
2236 `(("libx11" ,libx11)
2237 ("libxinerama" ,libxinerama)
2239 ("freetype" ,freetype)
2240 ("imlib2" ,imlib2)))
2242 `(#:tests? #f ;no test suite
2244 (list (string-append "CC=" ,(cc-for-target))
2245 (string-append "PREFIX=" %output)
2246 (string-append "CFLAGS="
2247 "-I" (assoc-ref %build-inputs "freetype")
2248 "/include/freetype2"))
2250 (modify-phases %standard-phases
2251 (delete 'configure))))
2252 (home-page "https://github.com/phillbush/xmenu")
2253 (synopsis "Menu utility for X")
2254 (description "@code{xmenu} receives a menu specification in stdin, shows
2255 a menu for the user to select one of the options, and outputs the option
2256 selected to stdout. It can be controlled both via mouse and via keyboard.")
2257 (license license:public-domain)))
2259 (define-public idesk
2267 "mirror://sourceforge/idesk/idesk/idesk-" version
2268 "/idesk-" version ".tar.bz2"))
2271 "1lxk2yvgysxwl514zc82lwr1dwc8cd62slgr5lzdhjbdrxfymdyl"))
2272 (modules '((guix build utils)
2275 '(let* ((file "src/DesktopConfig.cpp")
2276 (template (string-append file ".XXXXXX"))
2277 (out (mkstemp! template))
2279 (mode (stat:mode st)))
2280 (call-with-ascii-input-file file
2282 (format out "~{~a~%~}" '("#include <unistd.h>"
2283 "#include <sys/stat.h>"
2284 "#include <sys/types.h>"))
2287 (chmod template mode)
2288 (rename-file template file)
2290 (build-system gnu-build-system)
2292 `(("libx11" ,libx11)
2296 ("freetype" ,freetype)
2300 `(("pkg-config" ,pkg-config)))
2302 `(#:tests? #f)) ;no test suite
2303 (home-page "https://sourceforge.net/projects/idesk/")
2304 (synopsis "Add icons on X desktop and set background image for wallpaper")
2305 (description "Idesk is program that draws desktop icons. Each icon will
2306 execute a shell command on a configurable action. The icons can be moved on
2307 the desktop by dragging them, and the icons will remember their positions on
2309 (license license:bsd-3)))
2311 (define-public xnotify
2318 (url "https://github.com/phillbush/xnotify")
2320 (file-name (git-file-name name version))
2323 "09s29m8z4x3mc3wja2587ik3f6zg16b40adr3nllnpyy1mqnprq5"))))
2324 (build-system gnu-build-system)
2326 `(("libx11" ,libx11)
2328 ("libxinerama" ,libxinerama)
2329 ("imlib2" ,imlib2)))
2332 (list (string-append "CC=" ,(cc-for-target))
2333 (string-append "PREFIX=" %output)
2334 (string-append "CFLAGS="
2335 "-I" (assoc-ref %build-inputs "freetype")
2336 "/include/freetype2"))
2337 #:tests? #f ;no test suite
2339 (modify-phases %standard-phases
2340 (delete 'configure))))
2341 (home-page "https://github.com/phillbush/xnotify")
2342 (synopsis "Displays a notification on the screen")
2343 (description "XNotify receives a notification specification in stdin and
2344 shows a notification for the user on the screen.")
2345 (license license:expat)))
2347 (define-public cagebreak
2354 (url "https://github.com/project-repo/cagebreak")
2356 (file-name (git-file-name name version))
2359 "02gxmypfj75amdd8lwdkkk7imw7lwmghpyk8h9asljy9aq6ymdqp"))))
2360 (build-system meson-build-system)
2361 (arguments '(#:configure-flags '("-Dxwayland=true")))
2363 `(("pandoc" ,pandoc)
2364 ("pkg-config" ,pkg-config)))
2367 ("wlroots" ,wlroots)))
2368 (home-page "https://github.com/project-repo/cagebreak")
2369 (synopsis "Tiling wayland compositor inspired by ratpoison")
2371 "@command{cagebreak} is a slim, keyboard-controlled, tiling compositor
2372 for wayland conceptually based on the X11 window manager
2373 @command{ratpoison}.")
2374 (license license:expat)))
2376 (define-public libucl
2384 (url "https://github.com/vstakhov/libucl/")
2386 (file-name (git-file-name name version))
2389 "1h52ldxankyhbbm1qbqz1f2q0j03c1b4mig7343bs3mc6fpm18gf"))))
2391 `(("autoconf" ,autoconf)
2392 ("automake" ,automake)
2393 ("pkg-config" ,pkg-config)
2394 ("libtool" ,libtool)))
2395 (build-system gnu-build-system)
2397 `(#:tests? #f)) ;; no tests
2398 (home-page "https://github.com/vstakhov/libucl")
2399 (synopsis "Universal configuration language (UCL) parser")
2400 (description "libucl implements a configuration language that is easy to
2401 read and write, and compatible with JSON.")
2402 (license license:bsd-2)))
2404 (define-public hikari
2411 (uri (string-append "https://hikari.acmelabs.space/releases/"
2412 "hikari-" version ".tar.gz"))
2414 (base32 "1d023cphzi15k434n60l1rp5awxmdijvsxfrm59fmsvd5rjxh9q7"))))
2415 (build-system gnu-build-system)
2418 ("pkg-config" ,pkg-config)
2419 ("wayland-protocols" ,wayland-protocols)))
2422 ("libinput" ,libinput)
2424 ("libxkbcommon" ,libxkbcommon)
2427 ("wayland" ,wayland)
2428 ("wlroots" ,wlroots)))
2430 `(#:tests? #f ; no tests
2433 (string-append "PREFIX=" (assoc-ref %outputs "out"))
2434 (string-append "CC=" ,(cc-for-target))
2436 "WITH_SCREENCOPY=YES"
2437 "WITH_LAYERSHELL=YES"
2438 "WITH_VIRTUAL_INPUT=YES")
2440 (modify-phases %standard-phases
2443 (lambda* (#:key inputs outputs make-flags #:allow-other-keys)
2444 (apply invoke "bmake" make-flags)))
2446 (lambda* (#:key inputs outputs make-flags #:allow-other-keys)
2447 (apply invoke "bmake" "install" make-flags))))))
2448 (home-page "https://hikari.acmelabs.space/")
2449 (synopsis "Stacking Wayland compositor with tiling capabilities")
2451 "Hikari is a stacking Wayland compositor with additional tiling
2452 capabilities. It is heavily inspired by the Calm Window manager(cwm).")
2453 (license license:bsd-2)))