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, 2022 Eric Bavier <bavier@posteo.net>
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 2019, 2021-2022 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, 2021 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, 2022 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>
47 ;;; Copyright © 2021 lasnesne <lasnesne@lagunposprasihopre.org>
48 ;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
49 ;;; Copyright © 2021 jgart <jgart@dismail.de>
50 ;;; Copyright © 2021 Disseminate Dissent <disseminatedissent@protonmail.com>
51 ;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
52 ;;; Copyright © 2022 Gabriel Wicki <gabriel@erlikon.ch>
53 ;;; Copyright © 2022 Jai Vetrivelan <jaivetrivelan@gmail.com>
54 ;;; Copyright © 2022 Daniel Meißner <daniel.meissner-i4k@ruhr-uni-bochum.de>
55 ;;; Copyright © 2022 Pier-Hugues Pellerin <ph@heykimo.com>
56 ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
57 ;;; Copyright © 2022 muradm <mail@muradm.net>
58 ;;; Copyright © 2022 Elais Player <elais@fastmail.com>
59 ;;; Copyright © 2022 Trevor Richards <trev@trevdev.ca>
60 ;;; Copyright © 2022 Fredrik Salomonsson <plattfot@posteo.net>
62 ;;; This file is part of GNU Guix.
64 ;;; GNU Guix is free software; you can redistribute it and/or modify it
65 ;;; under the terms of the GNU General Public License as published by
66 ;;; the Free Software Foundation; either version 3 of the License, or (at
67 ;;; your option) any later version.
69 ;;; GNU Guix is distributed in the hope that it will be useful, but
70 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
71 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
72 ;;; GNU General Public License for more details.
74 ;;; You should have received a copy of the GNU General Public License
75 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
77 (define-module (gnu packages wm)
78 #:use-module ((guix licenses) #:prefix license:)
79 #:use-module (guix packages)
80 #:use-module (guix download)
81 #:use-module (guix gexp)
82 #:use-module (guix git-download)
83 #:use-module (guix build-system asdf)
84 #:use-module (guix build-system cmake)
85 #:use-module (guix build-system copy)
86 #:use-module (guix build-system gnu)
87 #:use-module (guix build-system haskell)
88 #:use-module (guix build-system meson)
89 #:use-module (guix build-system perl)
90 #:use-module (guix build-system python)
91 #:use-module (guix build-system trivial)
92 #:use-module (guix utils)
93 #:use-module (gnu packages)
94 #:use-module (gnu packages bash)
95 #:use-module (gnu packages admin)
96 #:use-module (gnu packages autotools)
97 #:use-module (gnu packages base)
98 #:use-module (gnu packages bison)
99 #:use-module (gnu packages build-tools)
100 #:use-module (gnu packages calendar)
101 #:use-module (gnu packages check)
102 #:use-module (gnu packages datastructures)
103 #:use-module (gnu packages docbook)
104 #:use-module (gnu packages documentation)
105 #:use-module (gnu packages fontutils)
106 #:use-module (gnu packages freedesktop)
107 #:use-module (gnu packages fribidi)
108 #:use-module (gnu packages gawk)
109 #:use-module (gnu packages gl)
110 #:use-module (gnu packages glib)
111 #:use-module (gnu packages gperf)
112 #:use-module (gnu packages gtk)
113 #:use-module (gnu packages gnome)
114 #:use-module (gnu packages haskell-check)
115 #:use-module (gnu packages haskell-web)
116 #:use-module (gnu packages haskell-xyz)
117 #:use-module (gnu packages image)
118 #:use-module (gnu packages imagemagick)
119 #:use-module (gnu packages libevent)
120 #:use-module (gnu packages libffi)
121 #:use-module (gnu packages linux)
122 #:use-module (gnu packages lisp-check)
123 #:use-module (gnu packages lisp-xyz)
124 #:use-module (gnu packages logging)
125 #:use-module (gnu packages lua)
126 #:use-module (gnu packages m4)
127 #:use-module (gnu packages man)
128 #:use-module (gnu packages maths)
129 #:use-module (gnu packages mpd)
130 #:use-module (gnu packages pcre)
131 #:use-module (gnu packages perl)
132 #:use-module (gnu packages pkg-config)
133 #:use-module (gnu packages pretty-print)
134 #:use-module (gnu packages pulseaudio)
135 #:use-module (gnu packages python)
136 #:use-module (gnu packages python-build)
137 #:use-module (gnu packages python-crypto)
138 #:use-module (gnu packages python-xyz)
139 #:use-module (gnu packages readline)
140 #:use-module (gnu packages serialization)
141 #:use-module (gnu packages sphinx)
142 #:use-module (gnu packages suckless)
143 #:use-module (gnu packages texinfo)
144 #:use-module (gnu packages textutils)
145 #:use-module (gnu packages time)
146 #:use-module (gnu packages video)
147 #:use-module (gnu packages web)
148 #:use-module (gnu packages xdisorg)
149 #:use-module (gnu packages xml)
150 #:use-module (gnu packages xorg))
160 (url "https://github.com/baskerville/bspwm")
162 (file-name (git-file-name name version))
164 (base32 "0qlv7b4c2mmjfd65y100d11x8iqyg5f6lfiws3cgmpjidhdygnxc"))))
165 (build-system gnu-build-system)
175 (modify-phases %standard-phases
176 (delete 'configure)) ; no configure script
177 #:tests? #f ; no check target
180 (string-append "PREFIX=" %output))))
181 (home-page "https://github.com/baskerville/bspwm")
182 (synopsis "Tiling window manager based on binary space partitioning")
183 (description "bspwm is a tiling window manager that represents windows as
184 the leaves of a full binary tree.")
185 (license license:bsd-2)))
187 (define-public herbstluftwm
189 (name "herbstluftwm")
194 (uri (string-append "https://herbstluftwm.org/tarballs/herbstluftwm-"
197 (base32 "1k03rdr6irsgnjl4w0vac0kk9nsz46qhy74iflmaycxgfv8fxy7f"))
198 (file-name (string-append "herbstluftwm-" version ".tar.gz"))))
199 (build-system cmake-build-system)
214 (list asciidoc pkg-config python))
218 (let ((out (assoc-ref %outputs "out")))
220 (string-append "-DCMAKE_INSTALL_SYSCONF_PREFIX=" out "/etc")
221 (string-append "-DBASHCOMPLETIONDIR=" out "/etc/bash_completion.d")))
223 (modify-phases %standard-phases
224 (add-after 'install 'install-xsession
225 (lambda* (#:key outputs #:allow-other-keys)
226 (let* ((out (assoc-ref outputs "out"))
227 (xsessions (string-append out "/share/xsessions")))
229 (call-with-output-file
230 (string-append xsessions "/herbstluftwm.desktop")
235 Comment=Manual tiling window manager~@
236 Exec=~a/bin/herbstluftwm~@
237 Type=XSession~%" out)))
239 (synopsis "Tiling window manager for X11")
240 (description "herbstluftwm is a manual tiling window manager for X11 using
241 Xlib and GLib. Its main features are:
245 The layout is based on splitting frames into subframes which can be split
246 again or can be filled with windows (similar to i3 or musca).
249 Tags (or workspaces or virtual desktops or …) can be added/removed at runtime.
250 Each tag contains an own layout.
253 Exactly one tag is viewed on each monitor. The tags are monitor independent
257 It is configured at runtime via IPC calls from @command{herbstclient}. So the
258 configuration file is just a script which is run on startup (similar to wmii
262 (home-page "https://herbstluftwm.org")
263 (license license:bsd-2)))
265 (define-public i3status
271 (uri (string-append "https://i3wm.org/i3status/i3status-"
275 "0929chhvyq9hg4scpcz8r9zn3s9jvbg6a86k3wqa77qg85rh4kaw"))
277 ;; Delete the pregenerated man page, to be rebuilt from source.
278 '(delete-file "man/i3status.1"))))
279 (build-system meson-build-system)
281 (list #:configure-flags
282 '(list "-Dmans=True")
283 #:tests? #f)) ; no test suite
294 docbook-xsl libxml2 ; for XML_CATALOG_FILES
296 (home-page "https://i3wm.org/i3status/")
297 (synopsis "Status bar for i3bar, dzen2, xmobar or similar programs")
298 (description "i3status is a small program for generating a status bar for
299 i3bar, dzen2, xmobar or similar programs. It is designed to be very efficient
300 by issuing a very small number of system calls, as one generally wants to
301 update such a status line every second. This ensures that even under high
302 load, your status bar is updated correctly. Also, it saves a bit of energy by
303 not hogging your CPU as much as spawning the corresponding amount of shell
305 (license license:bsd-3)))
313 (uri (string-append "https://i3wm.org/downloads/i3-"
317 "1rpwdgykcvmrmdz244f0wm7446ih1dcw8rlc1hm1c7cc42pyrq93"))))
318 (build-system meson-build-system)
320 `(;; The test suite requires the unpackaged Xephyr X server.
323 (modify-phases %standard-phases
324 (add-after 'install 'patch-session-file
325 (lambda* (#:key outputs #:allow-other-keys)
326 (let* ((out (assoc-ref outputs "out"))
327 (i3 (string-append out "/bin/i3"))
328 (i3-with-shmlog (string-append out "/bin/i3-with-shmlog")))
329 (substitute* (string-append out "/share/xsessions/i3.desktop")
330 (("Exec=i3") (string-append "Exec=" i3)))
331 (substitute* (string-append out "/share/xsessions/i3-with-shmlog.desktop")
332 (("Exec=i3-with-shmlog") (string-append "Exec=" i3-with-shmlog)))
356 ;; For building the documentation.
359 (home-page "https://i3wm.org/")
360 (synopsis "Tiling window manager")
361 (description "i3 is a tiling X11 window manager that dynamically manages
362 tiled, stacked, and tabbed window layouts.
364 i3 primarily targets advanced users. Windows are managed manually and organised
365 inside containers, which can be split vertically or horizontally, and optionally
368 i3 uses a plain-text configuration file, and can be extended and controlled from
369 many programming languages.")
371 `((upstream-name . "i3")
372 (release-monitoring-url . "https://i3wm.org/downloads")))
373 (license license:bsd-3)))
375 (define-public i3-gaps
383 (url "https://github.com/Airblader/i3")
387 "0g0qmv2gpv9qbhj9h5f4c4vfs6ndzq2rblgx9md85iharwp5sbb9"))))
388 (home-page "https://github.com/Airblader/i3")
389 (synopsis "Tiling window manager with gaps")
391 "i3-gaps is a fork of i3wm, a tiling window manager
392 for X11. It is kept up to date with upstream, adding a few additional
393 features such as gaps between windows.
395 i3 is a tiling X11 window manager that dynamically manages tiled, stacked,
396 and tabbed window layouts.
398 i3 primarily targets advanced users. Windows are managed manually and
399 organised inside containers, which can be split vertically or horizontally,
400 and optionally resized.
402 i3 uses a plain-text configuration file, and can be extended and controlled
403 from many programming languages.")
404 (license license:bsd-3)))
406 (define-public i3lock
412 (uri (string-append "https://i3wm.org/i3lock/i3lock-"
416 "02szjsaz7rqrdkd0r2nwgwa85c4hwfrcskxw7ryk695kmjcfhzv3"))))
417 (build-system gnu-build-system)
429 (home-page "https://i3wm.org/i3lock/")
430 (synopsis "Lightweight screen locker")
432 "i3lock is a simple X11 screen locker developed alongside the i3 project.
433 Despite the name it should work with any X11 window manager.")
434 (license license:bsd-3)))
436 (define-public i3lock-blur
444 (url "https://github.com/karulont/i3lock-blur")
446 (file-name (git-file-name name version))
449 "1bd5nrlga5g1sz1f64gnc3dqy8yfrr4q1ss59krymbpxa1hhf55c"))))
450 (build-system gnu-build-system)
452 (list pkg-config automake autoconf))
463 (home-page "https://github.com/karulont/i3lock-blur")
464 (synopsis "Lightweight screen locker with transparent blurring background")
466 "Simple X11 screen locker with transparent blurring background developed
467 alongside the i3 project. Despite the name it should work with any X11 window
469 (license license:expat)))
471 (define-public i3blocks
478 (url "https://github.com/vivien/i3blocks")
482 "0v8mwnm8qzpv6xnqvrk43s4b9iyld4naqzbaxk4ldq1qkhai0wsv"))
483 (file-name (git-file-name name version))))
484 (build-system gnu-build-system)
486 (list autoconf automake pkg-config))
487 (home-page "https://github.com/vivien/i3blocks")
488 (synopsis "Minimalist scheduler for status bar scripts")
489 (description "i3blocks executes your command lines and generates a
490 status line from their output. The generated line is meant to be displayed by
491 the i3 window manager through its i3bar component, as an alternative to
493 (license license:gpl3+)))
495 (define-public perl-anyevent-i3
497 (name "perl-anyevent-i3")
501 (uri (string-append "mirror://cpan/authors/id/M/MS/MSTPLBG/"
502 "AnyEvent-I3-" version ".tar.gz"))
505 "0qvd9bq16jyy7v3ma82qcnvz9j503bw0mh7h55gkjf7ir62ck0jk"))))
506 (build-system perl-build-system)
508 (list perl-anyevent perl-json-xs))
509 (home-page "https://metacpan.org/release/AnyEvent-I3")
511 "Communicate with the i3 window manager through perl")
513 "This module connects to the i3 window manager using the UNIX socket
514 based IPC interface it provides (if enabled in the configuration file).
515 You can then subscribe to events or send messages and receive their replies.")
516 ;; Can be used with either license.
517 (license (list license:gpl3+ license:perl-license))))
519 (define-public python-i3-py
521 (name "python-i3-py")
525 ;; The latest release is not tagged in Git nor has an entry in PyPi,
526 ;; but there is still a clear commit for it, and it's been the last one
530 (url "https://github.com/ziberna/i3-py")
531 (commit "27f88a616e9ecc340e7d041d3d00782f8a1964c1")))
534 "1nm719dc2xqlll7vj4c4m7mpjb27lpn3bg3c66gajvnrz2x1nmxs"))
535 (file-name (string-append name "-" version "-checkout"))))
536 (build-system python-build-system)
538 `(#:tests? #f ; no tests yet
539 #:phases (modify-phases %standard-phases
540 (add-after 'install 'install-doc
541 ;; Copy readme file to documentation directory.
542 (lambda* (#:key outputs #:allow-other-keys)
543 (let ((doc (string-append (assoc-ref outputs "out")
544 "/share/doc/" ,name)))
545 (install-file "README.md" doc)
546 ;; Avoid unspecified return value.
550 (home-page "https://github.com/ziberna/i3-py")
551 (synopsis "Python interface to the i3 window manager")
552 (description "This package allows you to interact from a Python program
553 with the i3 window manager via its IPC socket. It can send commands and other
554 kinds of messages to i3, select the affected containers, filter results and
555 subscribe to events.")
556 (license license:gpl3+)))
565 (uri (pypi-uri "qtile" version))
567 (base32 "14hb26xkza7brvkd4276j60mxd3zsas72ih6y0cq3j060izm1865"))))
568 (build-system python-build-system)
570 `(#:tests? #f ; Tests require Xvfb and writable temp/cache space
572 (modify-phases %standard-phases
573 (add-after 'unpack 'patch-paths
574 (lambda* (#:key inputs #:allow-other-keys)
575 (substitute* "libqtile/pangocffi.py"
576 (("^gobject = ffi.dlopen.*")
577 (string-append "gobject = ffi.dlopen(\""
578 (assoc-ref inputs "glib") "/lib/libgobject-2.0.so.0\")\n"))
579 (("^pango = ffi.dlopen.*")
580 (string-append "pango = ffi.dlopen(\""
581 (assoc-ref inputs "pango") "/lib/libpango-1.0.so.0\")\n"))
582 (("^pangocairo = ffi.dlopen.*")
583 (string-append "pangocairo = ffi.dlopen(\""
584 (assoc-ref inputs "pango") "/lib/libpangocairo-1.0.so.0\")\n")))))
585 (add-after 'install 'install-xsession
586 (lambda* (#:key outputs #:allow-other-keys)
587 (let* ((out (assoc-ref outputs "out"))
588 (xsessions (string-append out "/share/xsessions"))
589 (qtile (string-append out "/bin/qtile start")))
591 (copy-file "resources/qtile.desktop" (string-append xsessions "/qtile.desktop"))
592 (substitute* (string-append xsessions "/qtile.desktop")
593 (("qtile start") qtile))))))))
595 (list glib pango pulseaudio))
597 (list python-cairocffi
612 python-setuptools-scm))
613 (home-page "http://qtile.org")
614 (synopsis "Hackable tiling window manager written and configured in Python")
615 (description "Qtile is simple, small, and extensible. It's easy to write
616 your own layouts, widgets, and built-in commands.")
617 (license license:expat)))
619 (define-public quickswitch-i3
620 (let ((commit "ed692b1e8f43b95bd907ced26238ce8ccb2ed28f")
621 (revision "1")) ; Guix package revision
623 (name "quickswitch-i3")
624 (version (string-append "2.2-" revision "."
625 (string-take commit 7)))
628 ;; The latest commit is a few years old and just a couple commits
629 ;; after the last tagged release, so we use that latest commit
630 ;; instead of the release.
633 (url "https://github.com/proxypoke/quickswitch-for-i3")
637 "0447077sama80jcdg5p64zjsvafmz5rbdrirhm1adcdjhkh6iqc5"))
638 (patches (search-patches "quickswitch-fix-dmenu-check.patch"))
639 (file-name (string-append name "-" version "-checkout"))))
640 (build-system python-build-system)
642 `(#:tests? #f ; no tests yet
643 #:phases (modify-phases %standard-phases
644 (add-after 'install 'install-doc
645 ;; Copy readme file to documentation directory.
646 (lambda* (#:key outputs #:allow-other-keys)
647 (let ((doc (string-append (assoc-ref outputs "out")
648 "/share/doc/" ,name)))
649 (install-file "README.rst" doc)
650 ;; Avoid unspecified return value.
653 (list python-i3-py dmenu))
654 (home-page "https://github.com/proxypoke/quickswitch-for-i3")
655 (synopsis "Quickly change to and locate windows in the i3 window manager")
657 "This utility for the i3 window manager allows you to quickly switch to
658 and locate windows on all your workspaces, using an interactive dmenu
660 (license license:wtfpl2))))
662 (define-public i3lock-color
664 (name "i3lock-color")
670 (url "https://github.com/Raymo111/i3lock-color")
672 (file-name (git-file-name name version))
674 (base32 "1lnyh8spbf1ar4xan5v7q8i2i51aq1i60kzbfkn9w3wa0jzf9f3d"))))
675 (build-system gnu-build-system)
677 `(#:tests? #f)) ; no tests included
689 (list autoconf automake pkg-config))
690 (home-page "https://github.com/Raymo111/i3lock-color")
691 (synopsis "Screen locker with color configuration support")
693 "i3lock-color is a simpler X11 screen locker derived from i3lock.
697 @item forking process, the locked screen is preserved when you suspend to RAM;
698 @item specify background color or image to be displayed in the lock screen;
699 @item many additional color options.
701 (license license:bsd-3)))
703 (define-public i3lock-fancy
705 (name "i3lock-fancy")
711 (url "https://github.com/meskarune/i3lock-fancy")
713 (file-name (git-file-name name version))
715 (base32 "11g2kkim33ra38d1m897sq1ifajw17iyw9mr7sg1q8i2ibl4lfsi"))))
716 (build-system gnu-build-system)
718 `(#:tests? #f ; no tests included
720 (modify-phases %standard-phases
722 (lambda* (#:key inputs outputs #:allow-other-keys)
723 (let* ((out (assoc-ref outputs "out"))
724 (icons (string-append out "/share/i3lock-fancy/icons/"))
725 (wmctrl (search-input-file inputs "/bin/wmctrl"))
726 (mconvert (search-input-file inputs "/bin/convert"))
727 (mimport (search-input-file inputs "/bin/import"))
728 (awk (search-input-file inputs "/bin/gawk")))
731 (("\\$\\(command -V wmctrl\\)") wmctrl)
732 (("convert") mconvert)
733 (("shot=\\(import") (string-append "shot=\(" mimport))
734 (("awk -F") (string-append awk " -F"))
736 (("\\$scriptpath/icons/") icons))
740 (lambda* (#:key inputs outputs #:allow-other-keys)
741 (let* ((out (assoc-ref outputs "out"))
742 (bin (string-append out "/bin"))
743 (icons (string-append out "/share/i3lock-fancy/icons/")))
745 (install-file "lock" bin)
746 (rename-file (string-append bin "/lock")
747 (string-append bin "/i3lock-fancy"))
748 (copy-recursively "icons" icons)
751 (list imagemagick wmctrl i3lock gawk))
752 (home-page "https://github.com/meskarune/i3lock-fancy")
753 (synopsis "Screen locker with screenshot function")
755 "@code{i3lock-fancy} is a Bash script that takes a screenshot of
756 the desktop, blurs the background and adds a lock icon and text.
757 It requires @code{i3lock-color} or @code{i3lock} and can optionally
758 be passed any screenshot util like @code{scrot}.
759 This screen locker can be used with any window manager or
760 desktop environment.")
761 (license license:expat)))
763 (define-public xmonad-next
767 (synopsis "Tiling window manager")
770 (uri (string-append "mirror://hackage/package/xmonad/"
771 "xmonad-" version ".tar.gz"))
774 "04qspdz9w6xpw1npcmx2zx0595wc68q985pv4i0hvp32zillvdqy"))
775 (patches (search-patches "xmonad-next-dynamic-linking.patch"))))
776 (build-system haskell-build-system)
777 (inputs (list ghc-data-default-class ghc-setlocale ghc-x11))
778 (native-inputs (list ghc-quickcheck ghc-quickcheck-classes))
781 #~(modify-phases %standard-phases
782 (add-after 'install 'install-xsession
784 (let ((xsessions (string-append #$output "/share/xsessions")))
786 (call-with-output-file (string-append xsessions
794 Type=Application~%" #$name #$synopsis #$output)))))))))
795 (home-page "https://xmonad.org")
797 "Xmonad is a tiling window manager for X. Windows are arranged
798 automatically to tile the screen without gaps or overlap, maximising screen
799 use. All features of the window manager are accessible from the keyboard: a
800 mouse is strictly optional. Xmonad is written and extensible in Haskell.
801 Custom layout algorithms, and other extensions, may be written by the user in
802 config files. Layouts are applied dynamically, and different layouts may be
803 used on each workspace. Xinerama is fully supported, allowing windows to be
804 tiled on several screens.")
805 (license license:bsd-3)))
807 (define-public xmonad
809 (inherit xmonad-next)
814 (uri (string-append "mirror://hackage/package/xmonad/"
815 "xmonad-" version ".tar.gz"))
818 "0a7rh21k9y6g8fwkggxdxjns2grvvsd5hi2ls4klmqz5xvk4hyaa"))
819 (patches (search-patches "xmonad-dynamic-linking.patch"))))
821 (list ghc-extensible-exceptions
831 ("1" "0yqh96qqphllr0zyz5j93cij5w2qvf39xxnrb52pz0qz3pywz9wd")
832 ,@(package-arguments xmonad-next)))))
834 (define-public xmobar
840 (uri (string-append "https://hackage.haskell.org/package/xmobar/"
841 "xmobar-" version ".tar.gz"))
844 "0gdphjn5ll5lkb2psdsb34563wsz6g0y2gg3z8cj4jy8lvbbv808"))))
845 (build-system haskell-build-system)
847 (list ghc-hspec hspec-discover))
868 `(#:configure-flags (list "--flags=all_extensions")
870 (modify-phases %standard-phases
871 (add-before 'build 'patch-test-shebang
872 (lambda* (#:key inputs #:allow-other-keys)
873 (substitute* "test/Xmobar/Plugins/Monitors/AlsaSpec.hs"
874 (("/bin/bash") (which "bash")))
876 (home-page "https://xmobar.org")
877 (synopsis "Minimalistic text based status bar")
879 "@code{xmobar} is a lightweight, text-based, status bar written in
880 Haskell. It was originally designed to be used together with Xmonad, but it
881 is also usable with any other window manager. While xmobar is written in
882 Haskell, no knowledge of the language is required to install and use it.")
883 (license license:bsd-3)))
885 (define-public yeganesh
893 (uri (string-append "http://dmwit.com/yeganesh/yeganesh-" version ".tar.gz"))
895 (base32 "04djfyjab3c5y9z9x8zd0xcx0jyy35zq7cl9ddr4ppf6k5ky6iky"))))
896 (build-system haskell-build-system)
898 (list ghc-strict ghc-xdg-basedir))
899 (home-page "http://dmwit.com/yeganesh/")
900 (synopsis "Small wrapper around dmenu")
901 (description "@code{yeganesh} is a small wrapper around demnu. Like
902 dmenu, it accepts input on stdin and writes the chosen result on stdout.
903 Unlike dmenu, it mangles the input before it presents its choices. In
904 particular, it displays commonly-chosen options before uncommon ones.")
905 (license license:bsd-3)))
907 (define-public ghc-xmonad-contrib-next
909 (name "ghc-xmonad-contrib-next")
914 (uri (string-append "mirror://hackage/package/xmonad-contrib/"
915 "xmonad-contrib-" version ".tar.gz"))
917 (base32 "11g1cyfgfvcmz35qhgi9wzxrk3br8m8b7qy3jvph4nnf6aj13wvy"))))
918 (build-system haskell-build-system)
919 (propagated-inputs (list ghc-random ghc-x11 ghc-utf8-string ghc-x11-xft xmonad-next))
920 (native-inputs (list ghc-quickcheck ghc-hspec))
921 (home-page "https://xmonad.org")
922 (synopsis "Third party extensions for xmonad")
924 "Third party tiling algorithms, configurations, and scripts to Xmonad, a
925 tiling window manager for X.")
926 (license license:bsd-3)))
928 (define-public ghc-xmonad-contrib
930 (inherit ghc-xmonad-contrib-next)
931 (name "ghc-xmonad-contrib")
936 (uri (string-append "mirror://hackage/package/xmonad-contrib/"
937 "xmonad-contrib-" version ".tar.gz"))
939 (base32 "1pddgkvnbww28wykncc7j0yb0lv15bk7xnnhdcbrwkxzw66w6wmd"))))
942 ("1" "0vimkby2gq6sgzxzbvz67caba609xqlv2ii2gi8a1cjrnn6ib011")
943 ,@(package-arguments ghc-xmonad-contrib-next)))
949 ghc-extensible-exceptions
955 (define-public evilwm
962 (uri (string-append "http://www.6809.org.uk/evilwm/dl/evilwm-"
966 "1jry36qkg2l02v37zvzszxvxm2d8c62z25gks5gdqqjl9ifbpv1j"))))
967 (build-system gnu-build-system)
969 (list libx11 libxext libxrandr))
971 `(#:modules ((srfi srfi-26)
973 (guix build gnu-build-system))
974 #:make-flags (let ((inputs (map (cut assoc-ref %build-inputs <>)
975 '("libx11" "libxext" "libxrandr")))
976 (join (lambda (proc strs)
977 (string-join (map proc strs) " ")))
978 (dash-I (cut string-append "-I" <> "/include"))
979 (dash-L (cut string-append "-L" <> "/lib")))
980 `("desktopfilesdir=$(prefix)/share/xsessions"
981 ,(string-append "prefix=" (assoc-ref %outputs "out"))
982 ,(string-append "CPPFLAGS=" (join dash-I inputs))
983 ,(string-append "LDFLAGS=" (join dash-L inputs))))
984 #:tests? #f ;no tests
985 #:phases (modify-phases %standard-phases
986 (delete 'configure)))) ;no configure script
987 (home-page "http://www.6809.org.uk/evilwm/")
988 (synopsis "Minimalist window manager for the X Window System")
990 "evilwm is a minimalist window manager based on aewm, extended to feature
991 many keyboard controls with repositioning and maximize toggles, solid window
992 drags, snap-to-border support, and virtual desktops.")
993 (license (license:x11-style "file:///README"))))
995 (define-public fluxbox
999 (synopsis "Small and fast window manager")
1002 (uri (string-append "mirror://sourceforge/fluxbox/fluxbox/"
1003 version "/fluxbox-" version ".tar.xz"))
1006 "1h1f70y40qd225dqx937vzb4k2cz219agm1zvnjxakn5jkz7b37w"))))
1007 (build-system gnu-build-system)
1009 `(#:make-flags '("CPPFLAGS=-U__TIME__") ;ugly, but for reproducibility
1011 (modify-phases %standard-phases
1012 (add-after 'install 'install-vim-files
1013 (lambda* (#:key outputs #:allow-other-keys)
1014 (let* ((out (assoc-ref outputs "out"))
1015 (syntax (string-append out "/share/vim/vimfiles/syntax")))
1016 (copy-recursively "3rd/vim/vim/syntax" syntax)
1018 (add-after 'install 'install-xsession
1019 (lambda* (#:key outputs #:allow-other-keys)
1020 (let* ((out (assoc-ref outputs "out"))
1021 (xsessions (string-append out "/share/xsessions")))
1023 (call-with-output-file
1024 (string-append xsessions "/fluxbox.desktop")
1030 Exec=~a/bin/startfluxbox~@
1031 Type=Application~%" ,name ,synopsis out)))
1046 (description "Fluxbox is a window manager. It is light on resources
1047 and easy to handle yet full of features to make an easy and fast desktop
1049 (home-page "http://fluxbox.org/")
1050 (license license:expat)))
1052 (define-public fnott
1059 (url "https://codeberg.org/dnkl/fnott")
1061 (file-name (git-file-name name version))
1064 "1770p5hfswbaa15zmjh10n7fskch00d3y03ij3gfb1v4q314nb9n"))))
1065 (build-system meson-build-system)
1066 (arguments `(#:build-type "release"))
1073 (list wlroots wayland fcft dbus libpng))
1074 (home-page "https://codeberg.org/dnkl/fnott")
1075 (synopsis "Keyboard driven and lightweight Wayland notification daemon")
1076 (description "Fnott is a keyboard driven and lightweight notification daemon
1077 for wlroots-based Wayland compositors.")
1078 (license license:expat)))
1080 (define-public awesome
1088 "https://github.com/awesomeWM/awesome-releases/raw/master/"
1089 "awesome-" version ".tar.xz"))
1091 (base32 "0lqpw401mkkmp9wgbvrmm45bqq2j9357l4irwdqv6l1305pls9kq"))
1092 (modules '((guix build utils)
1096 ;; Remove non-reproducible timestamp and use the date of
1097 ;; the source file instead.
1098 (substitute* "common/version.c"
1099 (("__DATE__ \" \" __TIME__")
1102 (make-time time-utc 0 (stat:mtime (stat "awesome.c"))))
1106 (search-patches "awesome-reproducible-png.patch"
1107 "awesome-4.3-fno-common.patch"))))
1108 (build-system cmake-build-system)
1115 libxml2 ;for XML_CATALOG_FILES
1124 gobject-introspection
1134 startup-notification
1143 `(#:modules ((guix build cmake-build-system)
1146 ;; Let compression happen in our 'compress-documentation' phase
1147 ;; so that '--no-name' is used, which removes timestamps from
1150 '("-DCOMPRESS_MANPAGES=off")
1151 ;; Building awesome in its source directory is no longer
1155 (modify-phases %standard-phases
1156 (add-before 'configure 'set-paths
1157 (lambda* (#:key inputs #:allow-other-keys)
1158 (substitute* "lib/awful/completion.lua"
1161 ;; The build process needs to load Cairo dynamically.
1162 (let* ((cairo (string-append (assoc-ref inputs "cairo") "/lib"))
1163 (lua-version ,(version-major+minor (package-version lua)))
1165 (filter (match-lambda
1166 ((label . _) (string-prefix? "lua-" label)))
1173 dir "/share/lua/" lua-version "/?.lua;"
1174 dir "/share/lua/" lua-version "/?/?.lua")))
1182 dir "/lib/lua/" lua-version "/?.so;"
1183 dir "/lib/lua/" lua-version "/?/?.so")))
1186 (setenv "LD_LIBRARY_PATH" cairo)
1187 (setenv "LUA_PATH" (string-append "?.lua;" lua-path))
1188 (setenv "LUA_CPATH" lua-cpath)
1189 (setenv "HOME" (getcwd))
1190 (setenv "XDG_CACHE_HOME" (getcwd)))))
1193 ;; There aren't any tests, so just make sure the binary
1194 ;; gets built and can be run successfully.
1195 (invoke "../build/awesome" "-v")))
1196 (add-after 'install 'patch-session-file
1197 (lambda* (#:key outputs #:allow-other-keys)
1198 (let* ((out (assoc-ref outputs "out"))
1199 (awesome (string-append out "/bin/awesome")))
1200 (substitute* (string-append out "/share/xsessions/awesome.desktop")
1201 (("Exec=awesome") (string-append "Exec=" awesome)))
1203 (add-after 'install 'wrap
1204 (lambda* (#:key inputs outputs #:allow-other-keys)
1205 (let* ((awesome (assoc-ref outputs "out"))
1206 (cairo (string-append (assoc-ref inputs "cairo") "/lib"))
1207 (lua-version ,(version-major+minor (package-version lua)))
1208 (lua-lgi (assoc-ref inputs "lua-lgi")))
1209 (wrap-program (string-append awesome "/bin/awesome")
1210 `("LUA_PATH" ";" suffix
1211 (,(format #f "~a/share/lua/~a/?.lua" lua-lgi lua-version)))
1212 `("LUA_CPATH" ";" suffix
1213 (,(format #f "~a/lib/lua/~a/?.so" lua-lgi lua-version)))
1214 `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))
1215 `("LD_LIBRARY_PATH" suffix (,cairo)))
1217 (home-page "https://awesomewm.org/")
1218 (synopsis "Highly configurable window manager")
1220 "Awesome has been designed as a framework window manager. It is fast, small,
1221 dynamic and extensible using the Lua programming language.")
1222 (license license:gpl2+)))
1224 (define-public menumaker
1231 (uri (string-append "mirror://sourceforge/menumaker/"
1232 "menumaker-" version ".tar.gz"))
1234 (base32 "0nnnc1awvhq5pplvclap3ha61g9209bca6zqgpsm1f53fq75vs8i"))))
1235 (build-system gnu-build-system)
1238 (synopsis "Heuristics-driven menu generator")
1240 "MenuMaker is a menu generation utility for a number of X window
1241 managers and desktop environments. It is capable of finding lots of
1242 installed programs and generating a root menu consistent across all
1243 supported window managers, so one will get (almost) the same menu in
1244 all of them. Currently supported window managers include:
1256 (home-page "http://menumaker.sourceforge.net/")
1257 (license license:bsd-2)))
1259 (define-public keybinder
1266 (uri (string-append "https://github.com/kupferlauncher/keybinder"
1267 "/releases/download/" name "-3.0-v" version "/"
1268 name "-3.0-" version ".tar.gz"))
1269 (file-name (string-append name "-" version ".tar.gz"))
1272 "0830ihwnalw59pp1xzrp37dn58n8vwb8zasnm4a1h81v3x7dxqz6"))))
1273 (build-system gnu-build-system)
1275 (list gtk+ gobject-introspection))
1277 (list gtk-doc pkg-config))
1278 (synopsis "Library for registering global keyboard shortcuts, Gtk3 version")
1280 "Keybinder is a library for registering global keyboard shortcuts.
1281 Keybinder works with GTK-based applications using the X Window System.")
1282 (home-page "https://github.com/kupferlauncher/keybinder")
1283 (license license:x11)))
1285 (define-public keybinder-3.0
1286 (deprecated-package "keybinder-3.0" keybinder))
1288 (define-public spectrwm
1296 (url "https://github.com/conformal/spectrwm")
1298 (string-append "SPECTRWM_"
1299 (string-join (string-split version #\.) "_")))))
1300 (file-name (git-file-name name version))
1302 (base32 "1dfqy5f0s1nv6rqkz9lj006vypmp4rwxd5vczfk3ndzqgnh19kw6"))))
1303 (build-system gnu-build-system)
1305 `(#:make-flags (let ((pkg-config (lambda (flag)
1307 "$(shell pkg-config " flag " "
1308 "xft fontconfig x11 libpng)"))))
1311 (string-append "PREFIX=" %output)
1312 (string-append "INCS=-I. " (pkg-config "--cflags"))
1313 (string-append "LIBS=" (pkg-config "--libs") " -lm")))
1314 #:tests? #f ;no test suite
1316 (modify-phases %standard-phases
1317 (add-before 'build 'change-dir
1319 (chdir "linux") #t))
1320 (add-after 'change-dir 'patch-makefile
1322 (substitute* "Makefile"
1324 (delete 'configure)))) ;no 'configure' exists
1326 `(("freetype" ,freetype)
1327 ("fontconfig" ,fontconfig)
1329 ("libxcursor" ,libxcursor)
1330 ("libxrandr" ,libxrandr)
1331 ("libxtst" ,libxtst)
1333 ("xcb-util" ,xcb-util)
1334 ("xcb-util-wm" ,xcb-util-wm)
1335 ("xcb-util-keysyms" ,xcb-util-keysyms)))
1337 (list libxt pkg-config))
1338 (synopsis "Minimalistic automatic tiling window manager")
1340 "Spectrwm is a small dynamic tiling and reparenting window manager for X11.
1341 It is inspired by Xmonad and dwm. Its major features include:
1344 @item Navigation anywhere on all screens with either the keyboard or mouse
1345 @item Customizable status bar
1346 @item Restartable without losing state
1347 @item Quick launch menu
1348 @item Many screen layouts possible with a few simple key strokes
1349 @item Move/resize floating windows
1350 @item Extended Window Manager Hints (@dfn{EWMH}) support
1351 @item Configurable tiling
1352 @item Adjustable tile gap allows for a true one pixel border
1353 @item Customizable colors and border width
1355 (home-page "https://github.com/conformal/spectrwm")
1356 (license license:isc)))
1365 (uri (string-append "https://leahneukirchen.org/releases/cwm-"
1368 (base32 "022zld29qawd8gl700g4m24qa89il3aks397zkhh66wvzssdblzx"))))
1369 (build-system gnu-build-system)
1371 `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
1372 (string-append "PREFIX=" %output))
1375 (modify-phases %standard-phases
1377 (add-after 'build 'install-xsession
1378 (lambda* (#:key outputs #:allow-other-keys)
1379 ;; Add a .desktop file to xsessions.
1380 (let* ((output (assoc-ref outputs "out"))
1381 (xsessions (string-append output "/share/xsessions")))
1383 (with-output-to-file
1384 (string-append xsessions "/cwm.desktop")
1389 Comment=OpenBSD Calm Window Manager fork~@
1391 TryExec=~@*~a/bin/cwm~@
1397 (list libxft libxrandr libxinerama))
1399 (list pkg-config bison))
1400 (home-page "https://github.com/leahneukirchen/cwm")
1401 (synopsis "OpenBSD fork of the calmwm window manager")
1402 (description "Cwm is a stacking window manager for X11. It is an OpenBSD
1403 project derived from the original Calm Window Manager.")
1404 (license license:isc)))
1413 (url "https://github.com/djpohly/dwl")
1414 (commit (string-append "v" version))))
1415 (file-name (git-file-name name version))
1418 "0js8xjc2rx1ml6s58s90jrak5n7vh3kj5na2j4yy3qy0cb501xcm"))))
1419 (build-system gnu-build-system)
1421 `(#:tests? #f ; no tests
1424 (string-append "CC=" ,(cc-for-target))
1425 (string-append "PREFIX=" (assoc-ref %outputs "out")))
1427 (modify-phases %standard-phases
1428 (delete 'configure)))) ; no configure
1433 (home-page "https://github.com/djpohly/dwl")
1434 (synopsis "Dynamic window manager for Wayland")
1436 "@command{dwl} is a compact, hackable compositor for Wayland based on
1437 wlroots. It is intended to fill the same space in the Wayland world that dwm
1438 does in X11, primarily in terms of philosophy, and secondarily in terms of
1439 functionality. Like dwm, dwl is easy to understand and hack on, due to a
1440 limited size and a few external dependencies. It is configurable via
1442 ;; LICENSE LICENSE.dwm LICENSE.tinywl
1443 (license (list license:gpl3+ license:expat license:cc0))))
1445 (define-public nitrogen
1451 (uri (string-append "http://github.com/l3ib/nitrogen/"
1452 "releases/download/" version "/"
1453 name "-" version ".tar.gz"))
1456 "0zc3fl1mbhq0iyndy4ysmy8vv5c7xwf54rbgamzfhfvsgdq160pl"))))
1457 (build-system gnu-build-system)
1459 (list gtk+-2 gtkmm-2 glib glibmm))
1462 (home-page "http://projects.l3ib.org/nitrogen/")
1463 (synopsis "Background browser and setter for X windows")
1465 "This package is a background browser and setter for X windows. It's
1469 @item Multihead and Xinerama aware
1470 @item Recall mode to used via startup script
1471 @item Uses freedesktop.org standard for thumbnails
1472 @item Can set GNOME background
1473 @item Command lie set modes for script use
1474 @item Inotify monitoring of browse directory
1475 @item Lazy loading of thumbnails - conserves memory
1476 @item \"Automatic\" set mode - determines best mode to set an image based on
1478 @item Display preview images in a tiled icon layout
1480 (license license:gpl2+)))
1482 (define-public polybar
1489 (uri (string-append "https://github.com/polybar/polybar/releases/"
1490 "download/" version "/polybar-" version ".tar.gz"))
1492 (base32 "19azx5dpfyfh0pv4q2fcrf4p7a0pc5d13m7lnv3qy8376mbmhmzj"))))
1493 (build-system cmake-build-system)
1495 ;; Test is disabled because it requires downloading googletest from the
1499 #~(modify-phases %standard-phases
1500 ;; Make polybar find its default configuration file in the
1502 (add-after 'unpack 'patch-config-path
1504 (substitute* "CMakeLists.txt"
1505 (("/etc") (string-append #$output "/etc")))
1506 (substitute* "src/utils/file.cpp"
1507 (("\"/etc\"") (string-append "\"" #$output "/etc\""))))))))
1526 python-sphinx ; for the manual
1527 python)) ; xcb-proto depends on python 3
1528 (home-page "https://polybar.github.io/")
1529 (synopsis "Fast and easy-to-use status bar")
1530 (description "Polybar aims to help users build beautiful and highly
1531 customizable status bars for their desktop environment. It has built-in
1532 functionality to display information about the most commonly used services.")
1533 (license license:expat)))
1535 (define-public wlroots
1543 (url "https://github.com/swaywm/wlroots")
1545 (file-name (git-file-name name version))
1547 (base32 "1sshp3lvlkl1i670kxhwsb4xzxl8raz6769kqvgmxzcb63ns9ay1"))))
1548 (build-system meson-build-system)
1551 (modify-phases %standard-phases
1552 (add-before 'configure 'hardcode-paths
1553 (lambda* (#:key inputs #:allow-other-keys)
1554 (substitute* "xwayland/server.c"
1555 (("Xwayland") (string-append (assoc-ref inputs
1556 "xorg-server-xwayland")
1560 (list ;; As required by wlroots.pc.
1571 xorg-server-xwayland))
1574 (home-page "https://github.com/swaywm/wlroots")
1575 (synopsis "Pluggable, composable, unopinionated modules for building a
1576 Wayland compositor")
1577 (description "wlroots is a set of pluggable, composable, unopinionated
1578 modules for building a Wayland compositor.")
1579 (license license:expat))) ; MIT license
1589 (url "https://github.com/swaywm/sway")
1591 (file-name (git-file-name name version))
1593 (base32 "0j4sdbsrlvky1agacc0pcz9bwmaxjmrapjnzscbd2i0cria2fc5j"))))
1594 (build-system meson-build-system)
1596 `(;; elogind is propagated by wlroots -> libseat
1597 ;; and would otherwise shadow basu.
1598 #:configure-flags '("-Dsd-bus-provider=basu")
1600 (modify-phases %standard-phases
1601 (add-before 'configure 'hardcode-paths
1602 (lambda* (#:key inputs #:allow-other-keys)
1603 ;; Hardcode path to swaybg.
1604 (substitute* "sway/config.c"
1605 (("strdup..swaybg..")
1606 (string-append "strdup(\"" (assoc-ref inputs "swaybg")
1608 ;; Hardcode path to scdoc.
1609 (substitute* "meson.build"
1610 (("scdoc.get_pkgconfig_variable..scdoc..")
1611 (string-append "'" (assoc-ref inputs "scdoc")
1626 (list linux-pam mesa pkg-config scdoc wayland-protocols))
1627 (home-page "https://github.com/swaywm/sway")
1628 (synopsis "Wayland compositor compatible with i3")
1629 (description "Sway is a i3-compatible Wayland compositor.")
1630 (license license:expat)))
1632 (define-public swayidle
1640 (url "https://github.com/swaywm/swayidle")
1642 (file-name (git-file-name name version))
1644 (base32 "0ziya8d5pvvxg16jhy4i04pvq11bdvj68gz5q654ar4dldil17nn"))))
1645 (build-system meson-build-system)
1647 `(#:configure-flags '("-Dlogind-provider=elogind")))
1648 (inputs (list elogind wayland))
1649 (native-inputs (list pkg-config scdoc wayland-protocols))
1650 (home-page "https://github.com/swaywm/swayidle")
1651 (synopsis "Idle management daemon for Wayland compositors")
1652 (description "Swayidle is a idle management daemon for Wayland compositors.")
1653 (license license:expat))) ; MIT license
1655 (define-public swaylock
1663 (url "https://github.com/swaywm/swaylock")
1665 (file-name (git-file-name name version))
1667 (base32 "1ihdvx6gdinzabvnazjmkk3ajrp7ngg0jzfwcjqn4hcjv64s0lam"))))
1668 (build-system meson-build-system)
1669 (inputs (list cairo gdk-pixbuf libxkbcommon
1670 ;("linux-pam" ,linux-pam) ; FIXME: Doesn't work.
1672 (native-inputs (list pango pkg-config scdoc wayland-protocols-next))
1673 (home-page "https://github.com/swaywm/sway")
1674 (synopsis "Screen locking utility for Wayland compositors")
1675 (description "Swaylock is a screen locking utility for Wayland compositors.")
1676 (license license:expat))) ; MIT license
1678 (define-public swaylock-effects
1681 (name "swaylock-effects")
1687 (url "https://github.com/jirutka/swaylock-effects")
1688 (commit (string-append "v" version))))
1689 (file-name (git-file-name name version))
1692 "1d8ri7bzwfr53ybgf23acz57wyhcl2f1nqprcda1v9bzfgsqfk2n"))))
1694 (list #:configure-flags #~'("-Dsse=false")))
1695 (synopsis "Screen locking utility for Wayland compositors with effects")
1696 (description "@code{Swaylock-effects} is a fork of swaylock with additional
1697 features, such as the ability to take a screenshot as the background image,
1698 display a clock or apply image manipulation techniques to the background image.")
1699 (home-page "https://github.com/jirutka/swaylock-effects")))
1701 (define-public swaybg
1709 (url "https://github.com/swaywm/swaybg")
1711 (file-name (git-file-name name version))
1713 (base32 "1lmqz5bmig90gq2m7lwf02d2g7z4hzf8fhqz78c8vk92c6p4xwbc"))))
1714 (build-system meson-build-system)
1715 (inputs (list cairo gdk-pixbuf wayland))
1716 (native-inputs (list pkg-config scdoc wayland-protocols))
1717 (home-page "https://github.com/swaywm/sway")
1718 (synopsis "Screen wallpaper utility for Wayland compositors")
1719 (description "Swaybg is a wallpaper utility for Wayland compositors.")
1720 (license license:expat))) ; MIT license
1722 (define-public waybar
1730 (url "https://github.com/Alexays/Waybar")
1732 (file-name (git-file-name name version))
1734 (base32 "15fy21cipih80amv78g7g4k2gylf107phbv0fjacn3w3n0i3cf2k"))))
1735 (build-system meson-build-system)
1750 (list `(,glib "bin") pkg-config scdoc wayland-protocols))
1751 (home-page "https://github.com/Alexays/Waybar")
1752 (synopsis "Wayland bar for Sway and Wlroots based compositors")
1753 (description "Waybar is a highly customisable Wayland bar for Sway and
1754 Wlroots based compositors.")
1755 (license license:expat))) ; MIT license
1757 (define-public waybar-cpu-histogram
1759 (name "waybar-cpu-histogram")
1765 (url "https://git.sr.ht/~plattfot/waybar-cpu-histogram")
1766 (commit (string-append version))))
1769 "001pyf1jdmf2478plnggd7dkfi688qwi89db2jwfp4zza3640na6"))
1770 (file-name (git-file-name name version))))
1771 (build-system meson-build-system)
1777 (synopsis "CPU histogram for waybar")
1779 "Custom module for waybar to show CPU usage as a histogram. A compact way
1780 to see how many cores are active, compared to having a bar for each
1782 (home-page "https://github.com/plattfot/cpu-histogram/")
1783 (license license:expat)))
1785 (define-public wlr-randr
1793 (url "https://git.sr.ht/~emersion/wlr-randr")
1794 (commit (string-append "v" version))))
1795 (file-name (git-file-name name version))
1797 (base32 "0d44r4schknfc3g09y0kjbhl62zkynv6hi1z4zqc9ic5fhav3r15"))))
1798 (build-system meson-build-system)
1799 (inputs (list wayland))
1800 (native-inputs (list pkg-config))
1801 (home-page "https://sr.ht/~emersion/wlr-randr")
1802 (synopsis "Utility to manage Wayland compositor outputs")
1803 (description "wlr-randr is a utility to manage outputs of a Wayland compositor.")
1804 (license license:expat))) ; MIT license
1814 (url "https://github.com/emersion/mako")
1815 (commit (string-append "v" version))))
1816 (file-name (git-file-name name version))
1818 (base32 "0vpar1a7zafkd2plmyaackgba6fyg35s9zzyxmj8j7v2q5zxirgz"))))
1819 (build-system meson-build-system)
1820 (inputs (list basu cairo gdk-pixbuf pango wayland))
1821 (native-inputs (list pkg-config scdoc wayland-protocols))
1822 (home-page "https://wayland.emersion.fr/mako")
1823 (synopsis "Lightweight Wayland notification daemon")
1824 (description "Mako is a lightweight notification daemon for Wayland
1825 compositors that support the layer-shell protocol.")
1826 (license license:expat))) ; MIT license
1828 (define-public kanshi
1836 (url "https://git.sr.ht/~emersion/kanshi")
1837 (commit (string-append "v" version))))
1838 (file-name (git-file-name name version))
1840 (base32 "10lxagwc2pkq86g2sxkwljjd39sahp3w1j5yx853d3c4d95iwls5"))))
1841 (build-system meson-build-system)
1842 (inputs (list wayland))
1843 (native-inputs (list pkg-config scdoc))
1844 (home-page "https://wayland.emersion.fr/kanshi")
1845 (synopsis "Hotswappable output profiles for Wayland")
1846 (description "Kanshi allows you to define output profiles that are
1847 automatically enabled and disabled on hotplug. Kanshi can be used with
1848 Wayland compositors supporting the wlr-output-management protocol.")
1849 (license license:expat))) ; MIT license
1851 (define-public stumpwm
1859 (url "https://github.com/stumpwm/stumpwm")
1861 (file-name (git-file-name "stumpwm" version))
1863 (base32 "12hf70mpwy0ixiyvv8sf8pkwrzz8nb12a8ybvsdpibsxfjxgxnan"))))
1864 (build-system asdf-build-system/sbcl)
1869 ;; To build the manual.
1873 (list sbcl-alexandria
1876 (outputs '("out" "lib"))
1880 #~(modify-phases %standard-phases
1881 (add-after 'unpack 'fix-tests
1883 (substitute* "stumpwm-tests.asd"
1885 "\"RUN-PACKAGE-TESTS\" :package"))))
1886 (add-after 'create-asdf-configuration 'build-program
1887 (lambda* (#:key outputs #:allow-other-keys)
1889 (string-append (assoc-ref outputs "out") "/bin/stumpwm")
1891 #:entry-program '((stumpwm:stumpwm) 0))))
1892 (add-after 'build-program 'create-desktop-file
1893 (lambda* (#:key outputs #:allow-other-keys)
1894 (let* ((out (assoc-ref outputs "out"))
1895 (xsessions (string-append out "/share/xsessions")))
1897 (call-with-output-file
1898 (string-append xsessions "/stumpwm.desktop")
1903 Comment=The Stump Window Manager~@
1904 Exec=~a/bin/stumpwm~@
1905 TryExec=~@*~a/bin/stumpwm~@
1909 (add-after 'install 'install-manual
1910 (lambda* (#:key (make-flags '()) outputs #:allow-other-keys)
1911 (let* ((out (assoc-ref outputs "out"))
1912 (info (string-append out "/share/info")))
1913 (invoke "./autogen.sh")
1914 (invoke "sh" "./configure" "SHELL=sh")
1915 (apply invoke "make" "stumpwm.info" make-flags)
1916 (install-file "stumpwm.info" info)))))))
1917 (synopsis "Window manager written in Common Lisp")
1918 (description "Stumpwm is a window manager written entirely in Common Lisp.
1919 It attempts to be highly customizable while relying entirely on the keyboard
1920 for input. These design decisions reflect the growing popularity of
1921 productive, customizable lisp based systems.")
1922 (home-page "https://github.com/stumpwm/stumpwm")
1923 (license license:gpl2+)
1924 (properties `((cl-source-variant . ,(delay cl-stumpwm))))))
1926 (define-public sbcl-stumpwm
1927 (deprecated-package "sbcl-stumpwm" stumpwm))
1929 (define-public cl-stumpwm
1931 (inherit (sbcl-package->cl-source-package stumpwm))
1932 (name "cl-stumpwm")))
1934 (define-public stumpwm+slynk
1937 (name "stumpwm-with-slynk")
1940 `(("stumpwm" ,stumpwm "lib")
1941 ("slynk" ,sbcl-slynk)))
1943 (substitute-keyword-arguments (package-arguments stumpwm)
1945 `(modify-phases ,phases
1946 (replace 'build-program
1947 (lambda* (#:key inputs outputs #:allow-other-keys)
1948 (let* ((out (assoc-ref outputs "out"))
1949 (program (string-append out "/bin/stumpwm")))
1950 (setenv "HOME" "/tmp")
1951 (build-program program outputs
1952 #:entry-program '((stumpwm:stumpwm) 0)
1953 #:dependencies '("stumpwm" "slynk")
1954 #:dependency-prefixes
1955 (map (lambda (input) (assoc-ref inputs input))
1956 '("stumpwm" "slynk")))
1958 (delete 'copy-source)
1961 (delete 'cleanup)))))))
1963 (define stumpwm-contrib
1964 (let ((commit "d0c05077eca5257d33083de949c10bca4aac4242")
1967 (name "stumpwm-contrib")
1968 (version (git-version "0.0.1" revision commit)) ;no upstream release
1973 (url "https://github.com/stumpwm/stumpwm-contrib")
1975 (file-name (git-file-name name version))
1977 (base32 "0zxhqh9wjfk7zas67kmwfx0a47y8rxmh8f1a5rcs300bv1083lkb"))))
1978 (build-system asdf-build-system/sbcl)
1980 `(("stumpwm" ,stumpwm "lib")))
1981 (home-page "https://github.com/stumpwm/stumpwm-contrib")
1982 (synopsis "StumpWM extra modules")
1983 (description "This package provides extra modules for StumpWM.")
1984 (license (list license:gpl2+ license:gpl3+ license:bsd-2)))))
1986 (define-public stumpish
1988 (inherit stumpwm-contrib)
1991 (list bash rlwrap xprop))
1992 (build-system trivial-build-system)
1994 '(#:modules ((guix build utils))
1997 (use-modules (guix build utils))
1998 (copy-recursively (assoc-ref %build-inputs "source") ".")
1999 (chdir "util/stumpish")
2000 (substitute* "stumpish"
2001 (("rlwrap") (search-input-file %build-inputs "/bin/rlwrap"))
2002 (("xprop") (search-input-file %build-inputs "/bin/xprop"))
2003 (("/bin/sh") (search-input-file %build-inputs "/bin/bash")))
2004 (install-file "stumpish" (string-append %output "/bin")))))
2005 (home-page "https://github.com/stumpwm/stumpwm-contrib")
2006 (synopsis "StumpWM interactive shell")
2007 (description "This package provides a StumpWM interactive shell.")
2008 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
2010 (define-public sbcl-stumpwm-pamixer
2011 (let ((commit "aa820533c80ea1af5a0e107cea25eaf34e69dc24")
2014 (name "sbcl-stumpwm-pamixer")
2015 (version (git-version "0.1.1" revision commit))
2019 (url "https://github.com/Junker/stumpwm-pamixer")
2021 (file-name (git-file-name name version))
2024 "0djcrr16bx40l7b60d4j507vk5l42fdgmjpgrnk86z1ba8wlqim8"))))
2025 (inputs (list pamixer `(,stumpwm "lib")))
2026 (build-system asdf-build-system/sbcl)
2028 (list #:asd-systems ''("pamixer")
2030 #~(modify-phases %standard-phases
2031 (add-after 'unpack 'patch-pamixer
2033 (substitute* "pamixer.lisp"
2036 #$(this-package-input "pamixer")
2037 "/bin/pamixer \""))))))))
2038 (home-page "https://github.com/Junker/stumpwm-pamixer")
2039 (synopsis "StumpWM Pamixer Module")
2041 "This package provides a minimalistic Pulseaudio volume and microphone
2042 control module for StumpWM.")
2043 (license license:gpl3))))
2045 (define-public sbcl-stumpwm+slynk
2046 (deprecated-package "sbcl-stumpwm-with-slynk" stumpwm+slynk))
2048 (define-public sbcl-stumpwm-ttf-fonts
2050 (inherit stumpwm-contrib)
2051 (name "sbcl-stumpwm-ttf-fonts")
2053 `(("stumpwm" ,stumpwm "lib")
2054 ("clx-truetype" ,sbcl-clx-truetype)))
2056 '(#:asd-systems '("ttf-fonts")
2059 (modify-phases %standard-phases
2060 (add-after 'unpack 'chdir
2061 (lambda _ (chdir "util/ttf-fonts") #t)))))
2062 (home-page "https://github.com/stumpwm/stumpwm-contrib")
2063 (synopsis "Implementation of TTF font rendering for Lisp")
2064 (description "This package provides a Lisp implementation of TTF font
2066 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
2068 (define-public sbcl-stumpwm-pass
2070 (inherit stumpwm-contrib)
2071 (name "sbcl-stumpwm-pass")
2073 '(#:asd-systems '("pass")
2076 (modify-phases %standard-phases
2077 (add-after 'unpack 'chdir
2078 (lambda _ (chdir "util/pass") #t)))))
2079 (home-page "https://github.com/stumpwm/stumpwm-contrib")
2080 (synopsis "Integrate @code{pass} with StumpWM")
2081 (description "This package provides an interface which integrates
2082 password-store into StumpWM.")
2083 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
2085 (define-public sbcl-stumpwm-globalwindows
2087 (inherit stumpwm-contrib)
2088 (name "sbcl-stumpwm-globalwindows")
2090 '(#:asd-systems '("globalwindows")
2093 (modify-phases %standard-phases
2094 (add-after 'unpack 'chdir
2095 (lambda _ (chdir "util/globalwindows") #t)))))
2096 (home-page "https://github.com/stumpwm/stumpwm-contrib")
2097 (synopsis "Manipulate all windows in the current X session")
2098 (description "This package provides a StumpWM module to manipulate all
2099 windows in the current X session.")
2100 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
2102 (define-public sbcl-stumpwm-swm-gaps
2104 (inherit stumpwm-contrib)
2105 (name "sbcl-stumpwm-swm-gaps")
2107 '(#:asd-systems '("swm-gaps")
2110 (modify-phases %standard-phases
2111 (add-after 'unpack 'chdir
2112 (lambda _ (chdir "util/swm-gaps") #t)))))
2113 (home-page "https://github.com/stumpwm/stumpwm-contrib")
2114 (synopsis "Gaps between windows for StumpWM")
2115 (description "This package provides a StumpWM module which adds gaps
2117 (license (list license:gpl2+ license:gpl3+ license:bsd-2))))
2119 (define-public sbcl-stumpwm-net
2121 (inherit stumpwm-contrib)
2122 (name "sbcl-stumpwm-net")
2124 '(#:asd-systems '("net")
2127 (modify-phases %standard-phases
2128 (add-after 'unpack 'chdir (lambda _ (chdir "modeline/net") #t)))))
2130 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/net")
2131 (synopsis "Modeline support for network connectivity")
2132 (description "Modeline support for network connectivity.")
2134 (filter (lambda (a) (string-contains a "linux")) %supported-systems))
2135 (license license:gpl3+)))
2137 (define-public sbcl-stumpwm-wifi
2139 (inherit stumpwm-contrib)
2140 (name "sbcl-stumpwm-wifi")
2142 '(#:asd-systems '("wifi")
2145 (modify-phases %standard-phases
2146 (add-after 'unpack 'chdir (lambda _ (chdir "modeline/wifi") #t)))))
2148 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/wifi")
2149 (synopsis "Modeline support for wifi connectivity")
2150 (description "Modeline support for wifi connectivity.")
2152 (filter (lambda (a) (string-contains a "linux")) %supported-systems))
2153 (license license:gpl3+)))
2155 (define-public sbcl-stumpwm-stumptray
2157 (inherit stumpwm-contrib)
2158 (name "sbcl-stumpwm-stumptray")
2160 '(#:asd-systems '("stumptray")
2163 (modify-phases %standard-phases
2164 (add-after 'unpack 'chdir (lambda _ (chdir "modeline/stumptray") #t)))))
2166 `(("stumpwm" ,stumpwm "lib")
2167 ("xembed" ,sbcl-clx-xembed)
2168 ("alexandria" ,sbcl-alexandria)))
2170 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/stumptray")
2171 (synopsis "Modeline support for stumptray connectivity")
2172 (description "Modeline support for stumptray connectivity.")
2174 (filter (lambda (a) (string-contains a "linux")) %supported-systems))
2175 (license license:gpl3+)))
2177 (define-public sbcl-stumpwm-kbd-layouts
2179 (inherit stumpwm-contrib)
2180 (name "sbcl-stumpwm-kbd-layouts")
2182 '(#:asd-systems '("kbd-layouts")
2183 #:asd-operation "compile-system"
2186 (modify-phases %standard-phases
2187 (add-after 'unpack 'chdir (lambda _ (chdir "util/kbd-layouts") #t)))))
2189 "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/kbd-layouts")
2190 (synopsis "Keyboard layout switcher for StumpWM")
2191 (description "Keyboard layout switcher for StumpWM")
2192 (license license:gpl3+)))
2194 (define-public sbcl-stumpwm-numpad-layouts
2196 (inherit stumpwm-contrib)
2197 (name "sbcl-stumpwm-numpad-layouts")
2199 '(#:asd-systems '("numpad-layouts")
2202 (modify-phases %standard-phases
2203 (add-after 'unpack 'chdir
2205 (chdir "util/numpad-layouts"))))))
2207 "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/numpad-layouts")
2208 (synopsis "Keyboard numpad layouts for StumpWM")
2209 (description "This is a module for handling different keyboards numpad
2210 layouts in StumpWM.")
2211 (license license:gpl3+)))
2213 (define-public sbcl-stumpwm-cpu
2215 (inherit stumpwm-contrib)
2216 (name "sbcl-stumpwm-cpu")
2218 '(#:asd-systems '("cpu")
2221 (modify-phases %standard-phases
2222 (add-after 'unpack 'chdir
2224 (chdir "modeline/cpu"))))))
2226 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/cpu")
2227 (synopsis "Modeline support for CPU info")
2228 (description "Modeline support for CPU info.")
2229 (license license:gpl3+)))
2231 (define-public sbcl-stumpwm-disk
2233 (inherit stumpwm-contrib)
2234 (name "sbcl-stumpwm-disk")
2236 '(#:asd-systems '("disk")
2239 (modify-phases %standard-phases
2240 (add-after 'unpack 'chdir
2241 (lambda _ (chdir "modeline/disk") #t)))))
2243 `(("stumpwm" ,stumpwm "lib")
2244 ("cl-diskspace" ,sbcl-cl-diskspace)
2245 ("cl-mount-info" ,sbcl-cl-mount-info)))
2246 (home-page "https://github.com/stumpwm/stumpwm-contrib")
2247 (synopsis "StumpWM modeline support to show disk usage")
2248 (description "StumpWM modeline support to show disk usage")
2249 (license (list license:gpl2+ license:gpl3+))))
2251 (define-public sbcl-stumpwm-mem
2253 (inherit stumpwm-contrib)
2254 (name "sbcl-stumpwm-mem")
2256 '(#:asd-systems '("mem")
2259 (modify-phases %standard-phases
2260 (add-after 'unpack 'chdir
2262 (chdir "modeline/mem"))))))
2264 "https://github.com/stumpwm/stumpwm-contrib/tree/master/modeline/mem")
2265 (synopsis "Modeline support for memory info")
2266 (description "Modeline support for memory info.")
2267 (license license:gpl3+)))
2269 (define-public sbcl-stumpwm-winner-mode
2271 (inherit stumpwm-contrib)
2272 (name "sbcl-stumpwm-winner-mode")
2274 '(#:asd-systems '("winner-mode")
2277 (modify-phases %standard-phases
2278 (add-after 'unpack 'chdir
2280 (chdir "util/winner-mode"))))))
2282 "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/winner-mode")
2283 (synopsis "Emacs' winner-mode for StumpWM")
2284 (description "This module provides a winner-mode for StumpWM similar to the
2286 (license license:gpl3+)))
2288 (define-public sbcl-stumpwm-screenshot
2290 (inherit stumpwm-contrib)
2291 (name "sbcl-stumpwm-screenshot")
2293 `(("stumpwm" ,stumpwm "lib")
2294 ("zpng" ,sbcl-zpng)))
2296 '(#:asd-systems '("screenshot")
2299 (modify-phases %standard-phases
2300 (add-after 'unpack 'chdir
2302 (chdir "util/screenshot")))
2303 (add-after 'chdir 'fix-build
2305 (substitute* "screenshot.asd"
2307 "#:stumpwm #:zpng")))))))
2309 "https://github.com/stumpwm/stumpwm-contrib/tree/master/util/screenshot")
2310 (synopsis "Screenshots for StumpWM")
2311 (description "This StumpWM module can take screenshots and store them as
2313 (license license:gpl3+)))
2315 (define-public sbcl-stumpwm-notify
2317 (inherit stumpwm-contrib)
2318 (name "sbcl-stumpwm-notify")
2319 (build-system asdf-build-system/sbcl)
2321 (list sbcl-bordeaux-threads
2324 (list stumpwm "lib")))
2326 '(#:asd-systems '("notify")
2328 (modify-phases %standard-phases
2329 (add-after 'unpack 'chdir
2330 (lambda _ (chdir "util/notify"))))))
2331 (home-page "https://github.com/stumpwm/stumpwm-contrib")
2332 (synopsis "Notifications server for StumpWM")
2333 (description "This module implements org.freedesktop.Notifications
2334 interface[fn:dbus-spec]. It shows notifications using stumpwm:message
2336 (license license:gpl3+)))
2338 (define-public lemonbar
2345 (url "https://github.com/LemonBoy/bar")
2346 (commit (string-append "v" version))))
2347 (file-name (git-file-name name version))
2350 "0sm1lxxf0y2n87nvc8mz6i6mzb32f4qab80ppb28ibrwfir6jsln"))))
2351 (build-system gnu-build-system)
2354 #:tests? #f ;no test suite
2356 #~(list #$(string-append "CC=" (cc-for-target))
2357 (string-append "PREFIX=" #$output))
2359 #~(modify-phases %standard-phases
2360 (delete 'configure))))
2365 (home-page "https://github.com/LemonBoy/bar")
2366 (synopsis "Featherweight status bar")
2368 "@code{lemonbar} (formerly known as @code{bar}) is a lightweight
2369 bar entirely based on XCB. Provides full UTF-8 support, basic
2370 formatting, RandR and Xinerama support and EWMH compliance without
2371 wasting your precious memory.")
2372 (license license:x11)))
2374 (define-public lemonbar-xft
2375 ;; Upstream v2.0 tag is several years behind HEAD
2376 (let ((commit "481e12363e2a0fe0ddd2176a8e003392be90ed02"))
2379 (name "lemonbar-xft")
2380 (version (string-append "2.0." (string-take commit 7)))
2384 (url "https://github.com/drscream/lemonbar-xft")
2386 (file-name (git-file-name name version))
2389 "0588g37h18lv50h7w8vfbwhvc3iajh7sdr53848spaif99nh3mh4"))))
2391 (modify-inputs (package-inputs lemonbar)
2392 (prepend freetype libxft libx11)))
2394 (substitute-keyword-arguments (package-arguments lemonbar)
2395 ((#:make-flags make-flags)
2397 (format #f "CFLAGS=~a -DVERSION='~s'"
2399 "-I" #$(this-package-input "freetype")
2400 "/include/freetype2")
2402 (home-page "https://github.com/drscream/lemonbar-xft")
2405 (package-synopsis lemonbar)
2406 " with fontconfig support"))
2409 (package-description lemonbar)
2410 "This is a fork of the @code{lemonbar} package that adds fontconfig
2411 support, for easier unicode usage.")))))
2413 (define-public xclickroot
2420 (url "https://github.com/phillbush/xclickroot")
2421 (commit (string-append "v" version))))
2422 (file-name (git-file-name name version))
2425 "0wnsfxvh4v02r2jjyh2n6jfkbj2dna2hlm6anl4b36lwji749k2k"))))
2426 (build-system gnu-build-system)
2430 `(#:tests? #f ;no test suite
2432 (list ,(string-append "CC=" (cc-for-target))
2433 (string-append "PREFIX=" %output))
2435 (modify-phases %standard-phases
2436 (delete 'configure))))
2437 (home-page "https://github.com/phillbush/xclickroot")
2438 (synopsis "Run a command when a mouse button is pressed on the root window")
2439 (description "@code{xclickroot} runs a command every time a given mouse
2440 button is pressed on the root window.")
2441 (license license:public-domain)))
2443 (define-public xinitrc-xsession
2444 (let ((commit "cbfc77a1ccaf07b7d8a35f4d8007c7102f365374")
2447 (name "xinitrc-xsession")
2448 (version (git-version "1" revision commit))
2453 (url "https://aur.archlinux.org/xinit-xsession.git")
2455 (file-name (git-file-name name version))
2457 (base32 "12nv3qyjhy2l9mcb547f414d8bj79mhdhsra0g8x7x71b1xxl15b"))))
2458 (build-system copy-build-system)
2462 #~(modify-phases %standard-phases
2463 (add-after 'install 'patch-xsession-file
2465 (let* ((xinitrc-desktop
2466 (string-append #$output "/share/xsessions/xinitrc.desktop"))
2468 (string-append #$output "/bin/xinitrcsession-helper")))
2469 (substitute* xinitrc-desktop
2470 (("Exec=xinitrcsession-helper")
2471 (string-append "Exec=" xinitrc-helper)))))))
2473 #~(list '("xinitrcsession-helper" "bin/")
2474 '("xinitrc.desktop" "share/xsessions/"))))
2475 (home-page "https://aur.archlinux.org/packages/xinit-xsession/")
2476 (synopsis "Use ~/.xinitrc as an xsession from your display manager")
2478 "Xinitrc-xsession allows @code{~/.xinitrc} to be run as a session from
2479 your display manager. Make @code{~/.xinitrc} executable and use this package
2480 in your system configuration have this xsession available to your display
2482 (license license:gpl3))))
2484 (define-public xmenu
2491 (url "https://github.com/phillbush/xmenu")
2492 (commit (string-append "v" version))))
2493 (file-name (git-file-name name version))
2496 "0qgxkrv9jnnnf3px7zh0paf8xsr4bcpf0f2nq9zy012m214223hs"))))
2497 (build-system gnu-build-system)
2499 (list libx11 libxinerama libxft freetype imlib2))
2501 `(#:tests? #f ;no test suite
2503 (list (string-append "CC=" ,(cc-for-target))
2504 (string-append "PREFIX=" %output)
2505 (string-append "CFLAGS="
2506 "-I" (assoc-ref %build-inputs "freetype")
2507 "/include/freetype2"))
2509 (modify-phases %standard-phases
2510 (delete 'configure))))
2511 (home-page "https://github.com/phillbush/xmenu")
2512 (synopsis "Menu utility for X")
2513 (description "@code{xmenu} receives a menu specification in stdin, shows
2514 a menu for the user to select one of the options, and outputs the option
2515 selected to stdout. It can be controlled both via mouse and via keyboard.")
2516 (license license:public-domain)))
2518 (define-public idesk
2526 "mirror://sourceforge/idesk/idesk/idesk-" version
2527 "/idesk-" version ".tar.bz2"))
2530 "1lxk2yvgysxwl514zc82lwr1dwc8cd62slgr5lzdhjbdrxfymdyl"))
2531 (modules '((guix build utils)
2534 '(let* ((file "src/DesktopConfig.cpp")
2535 (template (string-append file ".XXXXXX"))
2536 (out (mkstemp! template))
2538 (mode (stat:mode st)))
2539 (call-with-ascii-input-file file
2541 (format out "~{~a~%~}" '("#include <unistd.h>"
2542 "#include <sys/stat.h>"
2543 "#include <sys/types.h>"))
2546 (chmod template mode)
2547 (rename-file template file)
2549 (build-system gnu-build-system)
2561 `(#:tests? #f)) ;no test suite
2562 (home-page "https://sourceforge.net/projects/idesk/")
2563 (synopsis "Add icons on X desktop and set background image for wallpaper")
2564 (description "Idesk is program that draws desktop icons. Each icon will
2565 execute a shell command on a configurable action. The icons can be moved on
2566 the desktop by dragging them, and the icons will remember their positions on
2568 (license license:bsd-3)))
2570 (define-public xnotify
2577 (url "https://github.com/phillbush/xnotify")
2578 (commit (string-append "v" version))))
2579 (file-name (git-file-name name version))
2582 "1jxms4md2mwfjgm2pgg3vakpp33800jbn9hnl0j4jyfc9f1ckbsv"))))
2583 (build-system gnu-build-system)
2585 (list libx11 libxft libxinerama imlib2))
2588 (list (string-append "CC=" ,(cc-for-target))
2589 (string-append "PREFIX=" %output)
2590 (string-append "CFLAGS="
2591 "-I" (assoc-ref %build-inputs "freetype")
2592 "/include/freetype2"))
2593 #:tests? #f ;no test suite
2595 (modify-phases %standard-phases
2596 (delete 'configure))))
2597 (home-page "https://github.com/phillbush/xnotify")
2598 (synopsis "Displays a notification on the screen")
2599 (description "XNotify receives a notification specification in stdin and
2600 shows a notification for the user on the screen.")
2601 (license license:expat)))
2603 (define-public cagebreak
2610 (url "https://github.com/project-repo/cagebreak")
2612 (file-name (git-file-name name version))
2615 "0296mnzk7qd0zvnhw716jvpp7madjsar373ixx4qcff0m0jwfrxm"))))
2616 (build-system meson-build-system)
2617 (arguments '(#:configure-flags '("-Dxwayland=true")))
2619 (list pandoc pkg-config))
2621 (list libevdev pango wlroots))
2622 (home-page "https://github.com/project-repo/cagebreak")
2623 (synopsis "Tiling wayland compositor inspired by ratpoison")
2625 "@command{cagebreak} is a slim, keyboard-controlled, tiling compositor
2626 for wayland conceptually based on the X11 window manager
2627 @command{ratpoison}.")
2628 (license license:expat)))
2630 (define-public libucl
2638 (url "https://github.com/vstakhov/libucl/")
2640 (file-name (git-file-name name version))
2643 "1h52ldxankyhbbm1qbqz1f2q0j03c1b4mig7343bs3mc6fpm18gf"))))
2645 (list autoconf automake pkg-config libtool))
2646 (build-system gnu-build-system)
2648 `(#:tests? #f)) ;; no tests
2649 (home-page "https://github.com/vstakhov/libucl")
2650 (synopsis "Universal configuration language (UCL) parser")
2651 (description "libucl implements a configuration language that is easy to
2652 read and write, and compatible with JSON.")
2653 (license license:bsd-2)))
2655 (define-public hikari
2662 (uri (string-append "https://hikari.acmelabs.space/releases/"
2663 "hikari-" version ".tar.gz"))
2665 (base32 "1jvy21irh6s7czff2hk63spswqibjcjhrpsgmrki5bii9ddi73wy"))))
2666 (build-system gnu-build-system)
2668 (list bmake pkg-config wayland-protocols))
2671 ("libinput" ,libinput-minimal)
2673 ("libxkbcommon" ,libxkbcommon)
2676 ("wayland" ,wayland)
2677 ("wlroots" ,wlroots)))
2679 `(#:tests? #f ; no tests
2682 (string-append "PREFIX=" (assoc-ref %outputs "out"))
2683 (string-append "CC=" ,(cc-for-target))
2685 "WITH_SCREENCOPY=YES"
2686 "WITH_LAYERSHELL=YES"
2687 "WITH_VIRTUAL_INPUT=YES")
2689 (modify-phases %standard-phases
2692 (lambda* (#:key inputs outputs make-flags #:allow-other-keys)
2693 (apply invoke "bmake" make-flags)))
2695 (lambda* (#:key inputs outputs make-flags #:allow-other-keys)
2696 (apply invoke "bmake" "install" make-flags))))))
2697 (home-page "https://hikari.acmelabs.space/")
2698 (synopsis "Stacking Wayland compositor with tiling capabilities")
2700 "Hikari is a stacking Wayland compositor with additional tiling
2701 capabilities. It is heavily inspired by the Calm Window manager(cwm).")
2702 (license license:bsd-2)))
2704 (define-public devour
2712 (url "https://github.com/salman-abedin/devour")
2714 (file-name (git-file-name name version))
2716 (base32 "1qq5l6d0fn8azg7sj7a4m2jsmhlpswl5793clcxs1p34vy4wb2lp"))))
2717 (build-system gnu-build-system)
2721 `(#:tests? #f ;no tests
2723 (modify-phases %standard-phases
2724 (delete 'configure)) ;no configure script
2726 (list (string-append "CC=" ,(cc-for-target))
2727 (string-append "BIN_DIR=" %output "/bin"))))
2728 (home-page "https://github.com/salman-abedin/devour")
2729 (synopsis "X11 window swallower")
2731 "@command{devour} hides your current window before launching an external
2732 program and unhides it after quitting.")
2733 (license license:gpl2)))
2735 (define-public trayer-srg
2743 (url "https://github.com/sargon/trayer-srg")
2744 (commit (string-append "trayer-" version))))
2745 (file-name (git-file-name name version))
2748 "1mvhwaqa9bng9wh3jg3b7y8gl7nprbydmhg963xg0r076jyzv0cg"))))
2750 (list libxmu pkg-config))
2752 (list libx11 gdk-pixbuf gtk+-2))
2753 (build-system gnu-build-system)
2755 `(#:tests? #f ; There are no tests.
2757 (let ((out (assoc-ref %outputs "out")))
2758 (list (string-append "CC=" ,(cc-for-target))
2759 (string-append "PREFIX=" %output)))
2761 (modify-phases %standard-phases
2763 (lambda* (#:key configure-flags #:allow-other-keys)
2764 (apply invoke "./configure" configure-flags))))))
2765 (home-page "https://github.com/sargon/trayer-srg")
2766 (synopsis "Minimal GTK based system tray")
2768 "@command{trayer} is small program designed to provide systray
2769 functionality present in GNOME/KDE desktop environments for window managers
2770 which do not support it.")
2771 (license license:expat)))
2773 (define-public wlogout
2780 (url "https://github.com/ArtsyMacaw/wlogout")
2782 (file-name (git-file-name name version))
2785 "1swhzkqkzli59c89pvrakfvicd00x7ga860c3x2pbb4y3xziqfvi"))))
2786 (build-system meson-build-system)
2788 (list pkg-config scdoc))
2790 (list gtk-layer-shell gtk+))
2794 (modify-phases %standard-phases
2795 (add-after 'unpack 'patch-source-paths
2796 (lambda* (#:key outputs #:allow-other-keys)
2797 (let ((out (assoc-ref outputs "out")))
2798 (substitute* "main.c"
2799 (("/usr/share") (string-append out "/share"))
2800 (("/etc") (string-append out "/etc"))))
2802 (home-page "https://github.com/ArtsyMacaw/wlogout")
2803 (synopsis "Logout menu for Wayland")
2804 (description "wlogout is a logout menu for Wayland environments.")
2805 (license license:expat)))
2807 (define-public berry
2815 (url "https://github.com/jlervin/berry")
2817 (file-name (git-file-name name version))
2819 (base32 "1qyq3g0m7rb9gpk1i5kfy9nr8sqivjiilbi4g0nw4d400rblvkbj"))))
2820 (build-system gnu-build-system)
2822 `(#:tests? #f ; There are no tests.
2824 ,#~(list (string-append "CC=" #$(cc-for-target))
2825 (string-append "prefix=" #$output)
2826 (string-append "CFLAGS="
2827 "-I" (assoc-ref %build-inputs "freetype")
2828 "/include/freetype2"))
2830 (modify-phases %standard-phases
2832 (add-after 'build 'install-xsession
2833 (lambda* (#:key outputs #:allow-other-keys)
2834 (let* ((output (assoc-ref outputs "out"))
2835 (xsessions (string-append output "/share/xsessions")))
2837 (with-output-to-file (string-append xsessions "/berry.desktop")
2843 Comment=Berry Window Manager~@
2845 TryExec=~@*~a/bin/berry~@
2858 (home-page "https://berrywm.org/")
2859 (synopsis "Healthy, byte-sized window manager")
2861 "@code{berry} is a healthy, bite-sized window manager written in C using XLib.")
2862 (license license:expat)))
2864 (define-public avizo
2871 (url "https://github.com/misterdanb/avizo")
2873 (file-name (git-file-name name version))
2876 "0ddv5ssxfjbzhqskbbhi9qj1yqkraiv3r8svfmp9s5nnfpid8aba"))))
2877 (build-system meson-build-system)
2878 (inputs (list gtk+))
2882 gobject-introspection
2885 (home-page "https://github.com/misterdanb/avizo")
2886 (synopsis "Notification daemon for Sway")
2888 "Avizo is a simple notification daemon for Sway, mainly intended to be
2889 used for multimedia keys.")
2890 (license license:gpl3+)))
2892 (define-public grimshot
2897 (inherit (package-source sway))
2898 (snippet #~(delete-file "contrib/grimshot.1"))))
2899 (build-system copy-build-system)
2901 (list #:install-plan #~`(("grimshot" "bin/")
2902 ("grimshot.1" "usr/share/man/man1/"))
2903 #:phases #~(modify-phases %standard-phases
2904 (add-after 'unpack 'chdir
2907 (add-after 'chdir 'patch-script-dependencies
2908 (lambda* (#:key inputs #:allow-other-keys)
2909 (substitute* "grimshot"
2910 (("\\b(date|grim|jq|notify-send|slurp|swaymsg|wl-copy)\\b"
2913 inputs (string-append "bin/" binary))))))
2914 (add-after 'patch-script-dependencies 'build-man-page
2916 (with-input-from-file "grimshot.1.scd"
2918 (with-output-to-file "grimshot.1"
2920 (invoke "scdoc"))))))))))
2921 (native-inputs (list scdoc))
2922 (inputs (list coreutils
2929 (synopsis "Screenshot utility for the Sway window manager")
2930 (description "Grimshot is a screenshot utility for @code{sway}. It provides
2931 an interface over @code{grim}, @code{slurp} and @code{jq}, and supports storing
2932 the screenshot either directly to the clipboard using @code{wl-copy} or to a