projects/guix·blob javascript-team · refs

4643 lines · 179.1 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2013, 2014, 2015 Andreas Enge <[email protected]>
3;;; Copyright © 2014, 2015, 2016 Mark H Weaver <[email protected]>
4;;; Copyright © 2014 Eric Bavier <[email protected]>
5;;; Copyright © 2014, 2015, 2016 Alex Kost <[email protected]>
6;;; Copyright © 2013, 2015, 2017-2019, 2021-2022 Ludovic Courtès <[email protected]>
7;;; Copyright © 2015, 2016 Mathieu Lirzin <[email protected]>
8;;; Copyright © 2015 Alexander I.Grafov <[email protected]>
9;;; Copyright © 2015 Andy Wingo <[email protected]>
10;;; Copyright © 2015 xd1le <[email protected]>
11;;; Copyright © 2015 Florian Paul Schmidt <[email protected]>
12;;; Copyright © 2016 Christine Lemmer-Webber <[email protected]>
13;;; Copyright © 2016, 2018 Ricardo Wurmus <[email protected]>
14;;; Copyright © 2016-2025 Efraim Flashner <[email protected]>
15;;; Copyright © 2016, 2017 Leo Famulari <[email protected]>
16;;; Copyright © 2016, 2017, 2019, 2020 Marius Bakke <[email protected]>
17;;; Copyright © 2016 Petter <[email protected]>
18;;; Copyright © 2017 宋文武 <[email protected]>
19;;; Copyright © 2017 Mekeor Melire <[email protected]>
20;;; Copyright © 2017 Nikita <[email protected]>
21;;; Copyright © 2017–2021, 2024 Tobias Geerinckx-Rice <[email protected]>
22;;; Copyright © 2017 Marek Benc <[email protected]>
23;;; Copyright © 2017 Mike Gerwitz <[email protected]>
24;;; Copyright © 2018 Thomas Sigurdsen <[email protected]>
25;;; Copyright © 2018, 2019 Rutger Helling <[email protected]>
26;;; Copyright © 2018, 2019 Pierre Neidhardt <[email protected]>
27;;; Copyright © 2018 Nam Nguyen <[email protected]>
28;;; Copyright © 2019 Wiktor Żelazny <[email protected]>
29;;; Copyright © 2019 Kyle Andrews <[email protected]>
30;;; Copyright © 2019, 2020 Josh Holland <[email protected]>
31;;; Copyright © 2019, 2021 Tanguy Le Carrour <[email protected]>
32;;; Copyright © 2020, 2021 Guillaume Le Vaillant <[email protected]>
33;;; Copyright © 2020 David Wilson <[email protected]>
34;;; Copyright © 2020 Ivan Vilata i Balaguer <[email protected]>
35;;; Copyright © 2020, 2021 Brice Waegeneire <[email protected]>
36;;; Copyright © 2020 Damien Cassou <[email protected]>
37;;; Copyright © 2020 John Soo <[email protected]>
38;;; Copyright © 2020 Boris A. Dekshteyn <[email protected]>
39;;; Copyright © 2020 Alex McGrath <[email protected]>
40;;; Copyright © 2020 Ivan Kozlov <[email protected]>
41;;; Copyright © 2020 Brett Gilio <[email protected]>
42;;; Copyright © 2020 Gabriel Arazas <[email protected]>
43;;; Copyright © 2020 James Smith <[email protected]>
44;;; Copyright © 2020 B. Wilson <[email protected]>
45;;; Copyright © 2020-2021, 2023-2025 Zheng Junjie <[email protected]>
46;;; Copyright © 2021, 2022, 2023 Maxim Cournoyer <[email protected]>
47;;; Copyright © 2021, 2022, 2024, 2025 Nicolas Goaziou <[email protected]>
48;;; Copyright © 2021 Xinglu Chen <[email protected]>
49;;; Copyright © 2021 Renzo Poddighe <[email protected]>
50;;; Copyright © 2021 Paul A. Patience <[email protected]>
51;;; Copyright © 2021 Niklas Eklund <[email protected]>
52;;; Copyright © 2021 Calum Irwin <[email protected]>
53;;; Copyright © 2021 Nikita Domnitskii <[email protected]>
54;;; Copyright © 2021 ikasero <[email protected]>
55;;; Copyright © 2021 Felix Gruber <[email protected]>
56;;; Copyright © 2021, 2025 jgart <[email protected]>
57;;; Copyright © 2022, 2024, 2025 John Kehayias <[email protected]>
58;;; Copyright © 2022 Jai Vetrivelan <[email protected]>
59;;; Copyright © 2022 Derek Chuank <[email protected]>
60;;; Copyright © 2022, 2023 Wamm K. D. <[email protected]>
61;;; Copyright © 2022 Tobias Kortkamp <[email protected]>
62;;; Copyright © 2022 Mehmet Tekman <[email protected]>
63;;; Copyright © 2023 Bruno Victal <[email protected]>
64;;; Copyright © 2023 Yovan Naumovski <[email protected]>
65;;; Copyright © 2023 Jake Leporte <[email protected]>
66;;; Copyright © 2023 Hilton Chain <[email protected]>
67;;; Copyright © 2024 Artyom V. Poptsov <[email protected]>
68;;; Copyright © 2024 Igor Goryachev <[email protected]>
69;;; Copyright © 2024-2026 Ashish SHUKLA <[email protected]>
70;;; Copyright © 2024 Spencer Peters <[email protected]>
71;;; Copyright © 2024 Jakob Kirsch <[email protected]>
72;;; Copyright © 2025 Evgeny Pisemsky <[email protected]>
73;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
74;;; Copyright © 2025 iamawacko <[email protected]>
75;;; Copyright © 2025 dan <[email protected]>
76;;; Copyright © 2025 Nicolas Graves <[email protected]>
77;;; Copyright © 2025 Untrusem <[email protected]>
78;;; Copyright © 2026 VnPower <[email protected]>
79;;; Copyright © 2026 Sughosha <[email protected]>
80;;;
81;;; This file is part of GNU Guix.
82;;;
83;;; GNU Guix is free software; you can redistribute it and/or modify it
84;;; under the terms of the GNU General Public License as published by
85;;; the Free Software Foundation; either version 3 of the License, or (at
86;;; your option) any later version.
87;;;
88;;; GNU Guix is distributed in the hope that it will be useful, but
89;;; WITHOUT ANY WARRANTY; without even the implied warranty of
90;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
91;;; GNU General Public License for more details.
92;;;
93;;; You should have received a copy of the GNU General Public License
94;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
95
96(define-module (gnu packages xdisorg)
97 #:use-module (guix build-system cmake)
98 #:use-module (guix build-system copy)
99 #:use-module (guix build-system glib-or-gtk)
100 #:use-module (guix build-system go)
101 #:use-module (guix build-system gnu)
102 #:use-module (guix build-system meson)
103 #:use-module (guix build-system pyproject)
104 #:use-module (guix build-system qt)
105 #:use-module (guix build-system scons)
106 #:use-module (guix deprecation)
107 #:use-module (guix download)
108 #:use-module (guix gexp)
109 #:use-module (guix git-download)
110 #:use-module (guix hg-download)
111 #:use-module ((guix licenses) #:prefix license:)
112 #:use-module (guix packages)
113 #:use-module (guix utils)
114 #:use-module (gnu packages admin)
115 #:use-module (gnu packages algebra)
116 #:use-module (gnu packages autotools)
117 #:use-module (gnu packages base)
118 #:use-module (gnu packages bash)
119 #:use-module (gnu packages bison)
120 #:use-module (gnu packages build-tools)
121 #:use-module (gnu packages check)
122 #:use-module (gnu packages cmake)
123 #:use-module (gnu packages compression)
124 #:use-module (gnu packages cpp)
125 #:use-module (gnu packages crypto)
126 #:use-module (gnu packages curl)
127 #:use-module (gnu packages datastructures)
128 #:use-module (gnu packages docbook)
129 #:use-module (gnu packages documentation)
130 #:use-module (gnu packages file)
131 #:use-module (gnu packages compiler-tools)
132 #:use-module (gnu packages fontutils)
133 #:use-module (gnu packages freedesktop)
134 #:use-module (gnu packages gawk)
135 #:use-module (gnu packages gcc)
136 #:use-module (gnu packages gettext)
137 #:use-module (gnu packages gl)
138 #:use-module (gnu packages gl)
139 #:use-module (gnu packages glib)
140 #:use-module (gnu packages golang-build)
141 #:use-module (gnu packages golang-xyz)
142 #:use-module (gnu packages gnome)
143 #:use-module (gnu packages gtk)
144 #:use-module (gnu packages guile)
145 #:use-module (gnu packages guile-xyz)
146 #:use-module (gnu packages haskell-xyz)
147 #:use-module (gnu packages icu4c)
148 #:use-module (gnu packages image)
149 #:use-module (gnu packages imagemagick)
150 #:use-module (gnu packages image-processing)
151 #:use-module (gnu packages kde-frameworks)
152 #:use-module (gnu packages kde-utils)
153 #:use-module (gnu packages libbsd)
154 #:use-module (gnu packages libevent)
155 #:use-module (gnu packages linux)
156 #:use-module (gnu packages m4)
157 #:use-module (gnu packages man)
158 #:use-module (gnu packages maths)
159 #:use-module (gnu packages ncurses)
160 #:use-module (gnu packages pciutils)
161 #:use-module (gnu packages perl)
162 #:use-module (gnu packages pkg-config)
163 #:use-module (gnu packages polkit)
164 #:use-module (gnu packages python)
165 #:use-module (gnu packages python-xyz)
166 #:use-module (gnu packages python-web)
167 #:use-module (gnu packages python-check)
168 #:use-module (gnu packages python-build)
169 #:use-module (gnu packages qt)
170 #:use-module (gnu packages sphinx)
171 #:use-module (gnu packages tex)
172 #:use-module (gnu packages texinfo)
173 #:use-module (gnu packages tcl)
174 #:use-module (gnu packages terminals)
175 #:use-module (gnu packages video)
176 #:use-module (gnu packages xml)
177 #:use-module (gnu packages version-control)
178 #:use-module (gnu packages window-management)
179 #:use-module (gnu packages webkit)
180 #:use-module (gnu packages xorg)
181 #:use-module (gnu packages logging)
182 #:use-module (gnu packages pretty-print)
183 #:use-module (gnu packages)
184 #:use-module (ice-9 match))
185
186;; packages outside the x.org system proper
187
188(define-public xnee
189 (package
190 (name "xnee")
191 (version "3.19")
192 (source
193 (origin
194 (method url-fetch)
195 (uri (string-append "mirror://gnu/xnee/xnee-"
196 version ".tar.gz"))
197 (sha256
198 (base32
199 "04n2lac0vgpv8zsn7nmb50hf3qb56pmj90dmwnivg09gyrf1x92j"))))
200 (build-system gnu-build-system)
201 (arguments
202 (list
203 #:configure-flags
204 #~(list (string-join
205 (list "CFLAGS=" "-O2" "-g" "-fcommon"
206 "-Wno-error=implicit-function-declaration")
207 " "))
208 #:make-flags #~(list "LIBSEMA=-lpthread")))
209 (inputs
210 (list gtk+-2
211 libx11
212 libxext
213 libxi
214 libxtst
215 xorgproto))
216 (native-inputs
217 (list pkg-config))
218 (home-page "https://www.gnu.org/software/xnee/")
219 (synopsis "Record, replay and distribute user actions under X11")
220 (description
221 "GNU Xnee is a program that can record, replay and distribute user
222actions in X11. It can be used to automate user interactions for testing or
223demonstration purposes.")
224 (license license:gpl3+)))
225
226(define-public xtitle
227 (package
228 (name "xtitle")
229 (version "0.4.4")
230 (source
231 (origin
232 (method git-fetch)
233 (uri (git-reference
234 (url "https://github.com/baskerville/xtitle")
235 (commit version)))
236 (file-name (git-file-name name version))
237 (sha256
238 (base32 "0f5070k2bwarghl1vq886pl52xck1x5p7x3qhlfchsc2y3dcqms9"))))
239 (build-system gnu-build-system)
240 (inputs
241 (list libxcb xcb-util xcb-util-wm))
242 (arguments
243 `(#:tests? #f ;no test suite
244 #:make-flags (list (string-append "CC=" ,(cc-for-target))
245 (string-append "PREFIX=" %output))
246 #:phases (modify-phases %standard-phases (delete 'configure))))
247 (home-page "https://github.com/baskerville/xtitle")
248 (synopsis "Output X window titles")
249 (description
250 "If arguments are given, @code{xtitle} outputs the title of each
251specified window, otherwise it outputs the title of the active window. With
252@emph{snoop} mode on, it continuously monitors the specified windows and
253outputs when titles change.")
254 (license license:unlicense)))
255
256(define-public xvkbd
257 (package
258 (name "xvkbd")
259 (version "4.1")
260 (source
261 (origin
262 (method url-fetch)
263 (uri (string-append "http://t-sato.in.coocan.jp/xvkbd/xvkbd-"
264 version ".tar.gz"))
265 (sha256
266 (base32 "1x5yldv9y99cw5hzzs73ygdn1z80zns9hz0baa355r711zghfbcm"))))
267 (build-system gnu-build-system)
268 (arguments
269 (list #:phases
270 #~(modify-phases %standard-phases
271 (add-after 'unpack 'remove-bugs
272 ;; Both variables are inexplicably but explicitly set to
273 ;; $(pkg-config --variable=VARIABLE xt) instead of our own.
274 (lambda _
275 (substitute* "Makefile.in"
276 (("^(appdefaultdir|datarootdir) = .*" _ variable)
277 (string-append variable " = @" variable "@\n"))))))))
278 (native-inputs
279 (list pkg-config))
280 (inputs
281 (list libxaw libxmu libxtst))
282 (home-page "http://t-sato.in.coocan.jp/xvkbd/")
283 (synopsis "Virtual computer keyboard for the X Window System")
284 (description
285 "The @acronym{xvkbd, X virtual keyboard} displays a drawing of a computer
286keyboard in a window on the screen. Clicking on its keys sends the
287corresponding keystroke(s) to other X clients, as if typed on a physical
288keyboard.
289
290This is useful for systems without keyboard hardware but with a pointing device,
291such as kiosk terminals or handheld devices with touch screens.
292
293A limited number of keyboard layouts are available, as is dictionary completion.
294You can also use xvkbd to send a series of predetermined keystrokes from the
295command line, without displaying a keyboard at all.")
296 (license license:gpl2+)))
297
298(define-public aquamarine
299 (package
300 (name "aquamarine")
301 (version "0.12.1")
302 (source (origin
303 (method git-fetch)
304 (uri (git-reference
305 (url "https://github.com/hyprwm/aquamarine")
306 (commit (string-append "v" version))))
307 (file-name (git-file-name name version))
308 (sha256
309 (base32
310 "13qq2yzsbpslch3wj19yxhcwdxpqp5knlmyvab8g3l37n8sh8i3i"))))
311 (build-system cmake-build-system)
312 (arguments
313 (list ;; TODO: Figure out what's expected in the test environment.
314 #:tests? #f))
315 (native-inputs
316 (list gcc-15 hyprwayland-scanner pkg-config))
317 (inputs
318 (list eudev
319 hwdata
320 hyprutils
321 libdisplay-info
322 libglvnd
323 libinput-minimal
324 libseat
325 mesa
326 pixman
327 wayland
328 wayland-protocols))
329 (home-page "https://github.com/hyprwm/aquamarine")
330 (synopsis "Linux rendering backend library")
331 (description
332 "Aquamarine is a C++-only Linux rendering backend library. It provides
333basic abstractions for an application to render on a Wayland session (in a
334window) or a native DRM session. It is agnostic of the rendering API (Vulkan
335/ OpenGL).")
336 (license license:bsd-3)))
337
338(define-public arandr
339 (package
340 (name "arandr")
341 (version "0.1.11")
342 (source (origin
343 (method url-fetch)
344 (uri (string-append "https://christian.amsuess.com/tools/arandr"
345 "/files/arandr-" version ".tar.gz"))
346 (sha256
347 (base32
348 "00mfhaqjxx4m3y0ml44infpbp500prs031vhawwjp0dvk0vbxjz4"))
349 (modules '((guix build utils)))
350 (snippet
351 #~(begin
352 ;; Do not record a timestamp and file name in gzipped man
353 ;; pages (this is equivalent to 'gzip --no-name'.)
354 (substitute* "setup.py"
355 (("gzip\\.open\\(gzfile, 'w', 9\\)")
356 "gzip.GzipFile('', 'wb', 9, open(gzfile, 'wb'), 0.)"))))))
357 (build-system pyproject-build-system)
358 (arguments
359 (list
360 #:phases
361 #~(modify-phases %standard-phases
362 (add-before 'build 'configure
363 (lambda* (#:key inputs #:allow-other-keys)
364 (let ((xrandr (search-input-file inputs "bin/xrandr")))
365 (substitute* "screenlayout/xrandr.py"
366 (("\"xrandr\"") (string-append "\"" xrandr "\""))))))
367 (add-after 'install 'wrap-gi-typelib
368 (lambda _
369 (let ((gi-typelib-path (getenv "GI_TYPELIB_PATH")))
370 (wrap-program (in-vicinity #$output "bin/arandr")
371 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))))
372 #:tests? #f)) ;no tests
373 (inputs (list bash-minimal gtk+ python-pycairo python-pygobject xrandr))
374 (native-inputs
375 (list gettext-minimal
376 gobject-introspection
377 python-docutils
378 python-setuptools))
379 (home-page "https://christian.amsuess.com/tools/arandr/")
380 (synopsis "Another RandR graphical user interface")
381 ;; TRANSLATORS: "X11 resize-and-rotate" should not be translated.
382 (description "ARandR is designed to provide a simple visual front end for
383the X11 resize-and-rotate (RandR) extension. Relative monitor positions are
384shown graphically and can be changed in a drag-and-drop way. Configurations
385are saved as executable shell scripts which can be loaded without using this
386program.")
387 (license license:gpl3+)))
388
389(define-public autorandr
390 (package
391 (name "autorandr")
392 (version "1.15")
393 (source
394 (origin
395 (method git-fetch)
396 (uri (git-reference
397 (url "https://github.com/phillipberndt/autorandr")
398 (commit version)))
399 (file-name (git-file-name name version))
400 (sha256
401 (base32 "1n4cmgisk1p199zny8zrdpfrbakchd6pvpkp9vzqqdw2f75iylzh"))))
402 (build-system pyproject-build-system)
403 (arguments
404 (list
405 #:tests? #f ;no tests
406 #:phases
407 #~(modify-phases %standard-phases
408 (add-before 'build 'configure
409 (lambda* (#:key inputs outputs #:allow-other-keys)
410 (let ((xrandr (search-input-file inputs "/bin/xrandr")))
411 (substitute* "contrib/etc/xdg/autostart/autorandr.desktop"
412 (("/usr") #$output))
413 (substitute* "autorandr.py"
414 (("popen\\(\"xrandr") (string-append "popen(\"" xrandr))
415 (("\\[\"xrandr") (string-append "[\"" xrandr)))
416 (substitute* "contrib/autorandr_launcher/autorandr_launcher.c"
417 (("/usr/bin/autorandr")
418 (string-append #$output "/bin/autorandr")))
419 (setenv "CC" "gcc"))))
420 (add-after 'install 'install-contrib
421 (lambda* (#:key outputs #:allow-other-keys)
422 (invoke "make"
423 (string-append "DESTDIR=" #$output)
424 "PREFIX="
425 "BASH_COMPLETIONS_DIR=etc/bash_completion.d"
426 "install"
427 "TARGETS=autorandr launcher manpage bash_completion"))))))
428 (native-inputs
429 (list pkg-config
430 python-setuptools))
431 (inputs
432 (list xrandr
433 libxcb))
434 (home-page "https://github.com/phillipberndt/autorandr")
435 (synopsis "Auto-detect connected displays and load appropriate setup")
436 (description "Autorandr wraps around xrandr to help with X11
437multi-screen configuration management. It allows the user to create profiles
438for various multi-screen setups. Autorandr automatically detects the profiles
439that can be activated based on the connected hardware. Hook scripts can be
440used to further tweak the behaviour of the different profiles.")
441 (license license:gpl3+)))
442
443(define-public bemenu
444 (package
445 (name "bemenu")
446 (version "0.6.23")
447 (source
448 (origin
449 (method git-fetch)
450 (uri (git-reference
451 (url "https://github.com/Cloudef/bemenu")
452 (commit version)))
453 (file-name (git-file-name name version))
454 (sha256
455 (base32 "0a4ihg1v1yyfwi4qq2zybhy39vw3nikd5qjrd5x3nxgjd0knmynj"))))
456 (build-system gnu-build-system)
457 (arguments
458 (list
459 #:tests? #f ; there are no tests
460 #:make-flags
461 #~(list (string-append "CC=" #$(cc-for-target))
462 "CFLAGS=-O2 -fPIC"
463 (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib")
464 (string-append "PREFIX=" #$output))
465 #:phases
466 #~(modify-phases %standard-phases
467 (delete 'configure)))) ; no configure script
468 (inputs
469 (list cairo
470 libx11
471 libxkbcommon
472 libxinerama
473 ncurses
474 pango
475 wayland
476 wayland-protocols))
477 (native-inputs
478 (list doxygen pkg-config scdoc))
479 (home-page "https://github.com/Cloudef/bemenu")
480 (synopsis "Dynamic menu library and client program inspired by dmenu")
481 (description
482 "bemenu is a dynamic menu which allows the user to flexibly select from a
483list of options (usually programs to launch). It renders the menu graphically
484with X11 or Wayland, or in a text terminal with ncurses.")
485 (license (list license:gpl3+ ; client program[s] and other sources
486 license:lgpl3+)))) ; library and bindings
487
488(define-public cliphist
489 (package
490 (name "cliphist")
491 (version "0.7.0")
492 (source
493 (origin
494 (method git-fetch)
495 (uri (git-reference
496 (url "https://github.com/sentriz/cliphist")
497 (commit (string-append "v" version))))
498 (file-name (git-file-name name version))
499 (sha256
500 (base32 "0dffcpqmqd9drgc7l95kbqh199ljhhqw468x17m4bwv3y2bm50fb"))))
501 (build-system go-build-system)
502 (arguments
503 (list
504 #:install-source? #f
505 #:import-path "go.senan.xyz/cliphist"))
506 (native-inputs
507 (list go-github-com-rogpeppe-go-internal
508 go-github-com-rivo-uniseg
509 go-go-etcd-io-bbolt
510 go-go-senan-xyz-flagconf
511 go-golang-org-x-image))
512 (home-page "https://github.com/sentriz/cliphist")
513 (synopsis "Clipboard history manager for wayland with support for images")
514 (description
515 "A Wayland clipboard history manager. It can write clipboard changes to
516a history file, recall history with any picker which accepts input from
517stdin (including dmenu, rofi, and wofi), copy and past both images and text,
518and preserve leading and trailing whitespace.")
519 (license license:gpl3)))
520
521(define-public copyq
522 (package
523 (name "copyq")
524 (version "13.0.0")
525 (source (origin
526 (method git-fetch)
527 (uri (git-reference
528 (url "https://github.com/hluk/CopyQ")
529 (commit (string-append "v" version))))
530 (file-name (git-file-name name version))
531 (sha256
532 (base32
533 "0fl5d4jniv32rsyraw7m1svkvc9nfl479zk3ah6h6p46k4px8663"))))
534 (build-system qt-build-system)
535 (arguments
536 (list
537 #:qtbase qtbase
538 #:configure-flags #~(list
539 "-DWITH_QT6=ON"
540 "-DCMAKE_BUILD_TYPE=Release")
541 #:tests? #f)) ; Test suite is a rather manual process.
542 (inputs
543 (list libxkbcommon
544 qtsvg
545 qtdeclarative
546 qtwayland
547 wayland
548 knotifications
549 kstatusnotifieritem
550 kguiaddons
551 libxtst))
552 (native-inputs
553 (list extra-cmake-modules pkg-config qttools))
554 (synopsis "Clipboard manager with advanced features")
555 (description "CopyQ is clipboard manager with editing and scripting
556features. CopyQ monitors system clipboard and saves its content in customized
557tabs. Saved clipboard can be later copied and pasted directly into any
558application.")
559 (home-page "https://hluk.github.io/CopyQ/")
560 (license license:gpl3+)))
561
562(define-public bigbagkbdtrixxkb
563 (let ((commit "d01cfc801fea7118001482b7b2c4184b3aac960e")
564 (revision "0"))
565 (package
566 (name "bigbagkbdtrixxkb")
567 (version (git-version "0" revision commit))
568 (source
569 (origin
570 (method git-fetch)
571 (uri (git-reference
572 (url "https://github.com/DreymaR/BigBagKbdTrixXKB")
573 (commit "d01cfc801fea7118001482b7b2c4184b3aac960e")))
574 (file-name (git-file-name name version))
575 (sha256
576 "1ffvqnnghjvzrqj1rn843lkylapvvb15il1wprp12xfdvhfc16n6")))
577 (build-system copy-build-system)
578 (arguments
579 (list
580 #:install-plan
581 #~'(("xkb-data_xmod/xkb" "share/X11/xkb"))))
582 (home-page "https://dreymar.colemak.org/")
583 (synopsis "DreymaR's Big Bag of Keyboard Tricks")
584 (description
585 "This package includes a variety of xkb keyboard options including
586ergonomic layouts and the 'extend' layer for easy access to modifiers and
587function keys.")
588 (license license:expat))))
589
590(define-public xkeysnail
591 (package
592 (name "xkeysnail")
593 (version "0.4.0")
594 (source
595 (origin
596 (method url-fetch)
597 (uri (pypi-uri "xkeysnail" version))
598 (sha256
599 (base32
600 "1xyqp6yqxcwmxaqj86qcsiz0ly7bwr0a2w835myz909irhip3ngf"))))
601 (build-system pyproject-build-system)
602 (arguments
603 `(#:tests? #f)) ;tests need /dev/uinput
604 (native-inputs (list python-setuptools))
605 (inputs
606 (list python-appdirs python-evdev python-inotify-simple python-xlib
607 python-six))
608 (home-page "https://github.com/mooz/xkeysnail")
609 (synopsis "Keyboard remapping tool for the X11 environment")
610 (description
611 "Xkeysnail is an X environment keyboard remapping tool, featuring
612high-level and flexible remapping mechanisms. It affects the low-level
613layers (evdev and uinput), making remapping work in almost all the places.")
614 (license license:gpl3+))) ; see README.md (no licence headers)
615
616(define-public xkb-switch
617 (package
618 (name "xkb-switch")
619 (version "1.8.5")
620 (source
621 (origin
622 (method git-fetch)
623 (uri
624 (git-reference
625 (url "https://github.com/grwlf/xkb-switch")
626 (commit version)))
627 (file-name (git-file-name name version))
628 (sha256
629 (base32 "1sd6ihgsswp6hjm1i4y092n4gl3gj0bc22grz4n7iy43mwphi40d"))))
630 (build-system cmake-build-system)
631 (arguments
632 `(#:tests? #f)) ;no test target
633 (inputs
634 (list libx11 libxkbfile))
635 (home-page "https://github.com/grwlf/xkb-switch")
636 (synopsis "Switch your X keyboard layouts from the command line")
637 (description
638 "xkb-switch is a C++ program that queries and changes the XKB layout
639state.")
640 (license license:gpl3+)))
641
642(define-public xkblayout
643 ;; Upstream doesn't have any version numbers
644 (let ((version "0.0.0")
645 (revision "0")
646 (commit "c0851b0f4bc9bc1a07240605baac8e50abe63fa8"))
647 (package
648 (name "xkblayout")
649 (version (git-version version revision commit))
650 (home-page "https://gitlab.freedesktop.org/whot/xkblayout")
651 (source
652 (origin
653 (method git-fetch)
654 (uri (git-reference
655 (url home-page)
656 (commit commit)))
657 (file-name (git-file-name name version))
658 (sha256
659 (base32 "0057988l5l7pmwg7dp6cqvj5l4lr0g5z3wq189g6kz36l9rmh675"))))
660 (build-system pyproject-build-system)
661 (arguments '(#:tests? #f)) ;no test
662 (native-inputs (list python-setuptools))
663 (synopsis "XKB layout template generator")
664 (description "xkblayout is a CLI application to generate templates for
665a new XKB layout, either in the user's home directory or the system directory.")
666 (license license:gpl3+))))
667
668(define-public xclip
669 (package
670 (name "xclip")
671 (version "0.13")
672 (source
673 (origin
674 (method git-fetch)
675 (uri (git-reference
676 (url "https://github.com/astrand/xclip")
677 (commit version)))
678 (file-name (git-file-name name version))
679 (sha256
680 (base32
681 "0q0hmvcjlv8arhh1pzhja2wglyj6n7z209jnpnzd281kqqv4czcs"))))
682 (build-system gnu-build-system)
683 (arguments
684 '(#:tests? #f)) ;there is no test suite
685 (native-inputs
686 (list autoconf automake))
687 (inputs (list libxmu libxt))
688 (home-page "https://github.com/astrand/xclip")
689 (synopsis "Command line interface to X11 clipboard")
690 (description "Xclip is a command line interface to the X11 clipboard. It
691can also be used for copying files, as an alternative to sftp/scp, thus
692avoiding password prompts when X11 forwarding has already been setup.")
693 (license license:gpl2+)))
694
695(define-public libxkbcommon
696 (package
697 (name "libxkbcommon")
698 (version "1.13.1")
699 (source (origin
700 (method git-fetch)
701 (uri (git-reference
702 (url "https://github.com/xkbcommon/libxkbcommon")
703 (commit (string-append "xkbcommon-" version))))
704 (file-name (git-file-name name version))
705 (sha256
706 (base32
707 "1440s6w7m7xpxw44d3x9wyn5wy4wxdx33idvklxkhp9irnq32jy1"))))
708 (outputs '("out" "doc"))
709 (build-system meson-build-system)
710 (inputs
711 (list libx11
712 libxcb
713 libxml2
714 wayland
715 wayland-protocols
716 xkeyboard-config))
717 (native-inputs
718 (append
719 (list bison
720 doxygen
721 pkg-config
722 python
723 ;; setxkbmap needed for tests.
724 setxkbmap
725 ;; wayland-scanner is required at build time.
726 wayland
727 ;; Xvfb for tests.
728 xorg-server-for-tests
729 ;; xkbcomp for tests.
730 xkbcomp)
731 (if (%current-target-system)
732 (list pkg-config-for-build)
733 '())))
734 (arguments
735 (list
736 #:configure-flags
737 #~(list (string-append "-Dxkb-config-root="
738 (search-input-directory
739 %build-inputs "share/X11/xkb"))
740 (string-append "-Dx-locale-root="
741 (search-input-directory
742 %build-inputs "share/X11/locale"))
743 "-Denable-docs=true")
744 #:phases
745 #~(modify-phases %standard-phases
746 (add-after 'install 'move-doc
747 (lambda _
748 (let ((old (string-append #$output "/share/doc"))
749 (new (string-append #$output:doc "/share/doc")))
750 (mkdir-p (dirname new))
751 (rename-file old new))))
752 (add-after 'install 'symlink-pc
753 ;; in Requires.private of xkbregistry.pc
754 ;; XXX: Symlink libxml-2.0.pc in order to avoid putting
755 ;; libxml2 as a propagated input.
756 (lambda _
757 (let ((stem "/lib/pkgconfig/libxml-2.0.pc"))
758 (symlink (string-append #$(this-package-input "libxml2") stem)
759 (string-append #$output stem))))))))
760 (home-page "https://xkbcommon.org/")
761 (synopsis "Library to handle keyboard descriptions")
762 (description "Xkbcommon is a library to handle keyboard descriptions,
763including loading them from disk, parsing them and handling their
764state. It is mainly meant for client toolkits, window systems, and other
765system applications; currently that includes Wayland, kmscon, GTK+, Qt,
766Clutter, and more. Despite the name, it is not currently used by anything
767X11 (yet).")
768 (license (license:x11-style "file://COPYING"
769 "See 'COPYING' in the distribution."))
770 (properties '((cpe-name . "xkbcommon")))))
771
772(define-public libfakekey
773 (package
774 (name "libfakekey")
775 (version "0.3")
776 (source
777 (origin
778 (method git-fetch)
779 (uri (git-reference
780 (url "https://git.yoctoproject.org/git/libfakekey")
781 (commit version)))
782 (file-name (git-file-name name version))
783 (sha256
784 (base32 "1jw1d4wc1ysiijirc7apnz3sryrxbl9akgb92mh06dvfkz2nblj0"))))
785 (build-system gnu-build-system)
786 (arguments
787 `(#:make-flags (list "AM_LDFLAGS=-lX11")
788 #:phases
789 (modify-phases %standard-phases
790 (replace 'bootstrap
791 ;; ./autogen.sh calls ./configure before shebangs have been patched.
792 (lambda _
793 (invoke "autoreconf" "-vfi"))))))
794 (native-inputs
795 (list pkg-config
796 ;; For bootstrapping from git.
797 autoconf automake libtool))
798 (inputs
799 (list libxtst libx11))
800 (home-page "https://www.yoctoproject.org/tools-resources/projects/matchbox")
801 (synopsis "X virtual keyboard library")
802 (description
803 "Libfakekey is a virtual keyboard library for X.")
804 (license license:gpl2)))
805
806(define-public xdotool
807 (package
808 (name "xdotool")
809 (version "3.20211022.1")
810 (source
811 (origin
812 (method url-fetch)
813 (uri (string-append
814 "https://github.com/jordansissel/xdotool/releases/download/v"
815 version "/xdotool-" version ".tar.gz"))
816 (sha256
817 (base32
818 "1nlsbwsdsgys607f00sc8xgb7l7cdzsb14avsg5fly3dvv7zmw4n"))))
819 (build-system gnu-build-system)
820 (arguments
821 '(#:tests? #f ; Test suite requires a lot of black magic
822 #:phases
823 (modify-phases %standard-phases
824 (replace 'configure
825 (lambda* (#:key outputs #:allow-other-keys #:rest args)
826 (let ((out (assoc-ref outputs "out")))
827 (mkdir-p (string-append out "/lib"))
828 (setenv "PREFIX" out)
829 (setenv "LDFLAGS" (string-append "-Wl,-rpath=" out "/lib"))
830 (setenv "CC" "gcc")
831 #t))))))
832 (native-inputs (list perl)) ; for pod2man
833 (inputs (list libx11
834 libxext
835 libxi
836 libxinerama
837 libxtst
838 libxkbcommon))
839 (home-page "https://www.semicomplete.com/projects/xdotool/")
840 (synopsis "Fake keyboard/mouse input, window management, and more")
841 (description "Xdotool lets you simulate keyboard input and mouse activity,
842move and resize windows, etc. It does this using X11's XTEST extension and
843other Xlib functions. Additionally, you can search for windows and move,
844resize, hide, and modify window properties like the title. If your window
845manager supports it, you can use xdotool to switch desktops, move windows
846between desktops, and change the number of desktops.")
847 (license license:bsd-3)))
848
849(define-public xdo
850 (package
851 (name "xdo")
852 (version "0.5.7")
853 (source
854 (origin
855 (method git-fetch)
856 (uri (git-reference
857 (url "https://github.com/baskerville/xdo")
858 (commit version)))
859 (file-name (git-file-name name version))
860 (sha256
861 (base32 "1h3jrygcjjbavdbkpx2hscsf0yf97gk487lzjdlvymd7dxdv9hy9"))))
862 (build-system gnu-build-system)
863 (arguments
864 `(#:tests? #f ; no tests
865 #:make-flags
866 (list (string-append "CC=" ,(cc-for-target))
867 (string-append "PREFIX=" %output))
868 #:phases
869 (modify-phases %standard-phases
870 (delete 'configure))))
871 (inputs
872 (list libxcb xcb-util-wm xcb-util))
873 (home-page "https://github.com/baskerville/xdo")
874 (synopsis "Small X utility to perform elementary actions on windows")
875 (description
876 "Apply the given action to the given windows. If no window IDs and no
877options are given, the action applies to the focused window.")
878 (license license:bsd-2)))
879
880(define-public xeyes
881 (package
882 (name "xeyes")
883 (version "1.3.1")
884 (source
885 (origin
886 (method url-fetch)
887 (uri (string-append "https://www.x.org/releases/individual/app/" name
888 "-" version ".tar.xz"))
889 (sha256
890 (base32 "1akfjm5fxk3xp2s343r2jf38ryafsxd6n6rgybbmxb0sgdmxf22n"))))
891 (build-system gnu-build-system)
892 (inputs (list libxext libxi libxmu libxrender libxt))
893 (native-inputs (list pkg-config))
894 (home-page "https://www.x.org/") ;no dedicated Xeyes page exists
895 (synopsis "Follow-the-mouse X demo")
896 (description "Xeyes is a demo program for x.org. It shows eyes
897following the mouse.")
898 (license license:x11)))
899
900(define-public bemoji
901 (package
902 (name "bemoji")
903 (version "0.4.0")
904 (source
905 (origin
906 (method git-fetch)
907 (uri (git-reference
908 (url "https://github.com/marty-oehme/bemoji")
909 (commit (string-append "v" version))))
910 (file-name (git-file-name name version))
911 (sha256
912 (base32 "030zlq4k32zdkpmzc9dkiz2l94z10z1qkk70a9mxc8yi9fij2z0x"))))
913 (build-system copy-build-system)
914 (inputs (list bash-minimal coreutils-minimal curl grep sed))
915 (arguments
916 (list
917 #:install-plan #~'(("bemoji" "bin/bemoji"))
918 #:phases
919 #~(modify-phases %standard-phases
920 (add-after 'install 'wrap-program
921 (lambda _
922 (wrap-program (string-append #$output "/bin/bemoji")
923 `("PATH" prefix
924 ,(search-path-as-list
925 '("bin")
926 '#$(map (lambda (input)
927 (lookup-package-input this-package input))
928 '("coreutils-minimal" "curl" "grep" "sed"))))))))))
929 (home-page "https://github.com/marty-oehme/bemoji")
930 (synopsis "Emoji picker for @code{dmenu}-like launchers")
931 (description
932 "Bemoji is an emoji picker for @code{dmenu}-like launchers
933(e.g. @code{bemenu}, @code{wofi}, @code{rofi}, @code{fuzzel}, etc.) It will
934remember your favorite emojis and give you quick access to them via a separately
935installed clipboard tool (e.g. @command{wl-copy}, @code{xclip}, etc.), or a
936typing tool (@code{wtype}, @code{xdotool}, etc.), or via standard output.")
937 (license license:expat)))
938
939(define-public pixman
940 (package
941 (name "pixman")
942 (version "0.46.4")
943 (source
944 (origin
945 (method url-fetch)
946 (uri (string-append "https://www.cairographics.org/releases/pixman-"
947 version ".tar.gz"))
948 (sha256
949 (base32 "072rd8sd454rzybmxx90fdzvabzvx0pr57y745qfwnxxqgml976h"))
950 (patches (search-patches "pixman-CVE-2016-5296.patch"))))
951 (build-system meson-build-system)
952 (arguments
953 (list
954 #:configure-flags
955 #~(list "-Dtimers=true"
956 "-Dgnuplot=true")))
957 (synopsis "Low-level pixel manipulation library")
958 (description "Pixman is a low-level software library for pixel
959manipulation, providing features such as image compositing and trapezoid
960rasterisation.")
961 (home-page "https://www.pixman.org/")
962 (license license:expat)))
963
964(define-public libdrm
965 (package
966 (name "libdrm")
967 (version "2.4.131")
968 (source (origin
969 (method url-fetch)
970 (uri (string-append
971 "https://dri.freedesktop.org/libdrm/libdrm-"
972 version ".tar.xz"))
973 (sha256
974 (base32
975 "1m8pyv2l7mbkf1wy54b3dsvm7f8ksf0xwm6nlc36928wnn1rkfj5"))))
976 (build-system meson-build-system)
977 (arguments
978 (list #:configure-flags
979 (match (%current-system)
980 ((or "armhf-linux" "aarch64-linux")
981 #~(list "-Dexynos=enabled"
982 "-Domap=enabled"
983 "-Detnaviv=enabled"
984 "-Dtegra=enabled"
985 "-Dfreedreno-kgsl=true"))
986 (_ ''()))
987 #:phases
988 #~(modify-phases %standard-phases
989 ;; A typo in a previous upstream commit disabled building
990 ;; libdrm_intel by default on supported platforms. This was
991 ;; fixed by the following change in upstream commit
992 ;; 8a933c778a0eb36526bf3fc8a289e25add9ff8b0.
993 ;; TODO: Remove on next update of libdrm.
994 (add-after 'unpack 'build-intel-by-default
995 (lambda _
996 (substitute* "meson.build"
997 (("system\\(\\)\\.startswith")
998 "cpu_family().startswith"))))
999 (replace 'check
1000 (lambda* (#:key tests? #:allow-other-keys)
1001 (when tests?
1002 (invoke "meson" "test" "--timeout-multiplier" "5")))))))
1003 (propagated-inputs
1004 (list libpciaccess))
1005 (native-inputs
1006 (list pkg-config))
1007 (home-page "https://dri.freedesktop.org/wiki/")
1008 (synopsis "Direct rendering userspace library")
1009 (description "The Direct Rendering Infrastructure, also known as the DRI,
1010is a framework for allowing direct access to graphics hardware under the
1011X Window System in a safe and efficient manner. It includes changes to the
1012X server, to several client libraries, and to the kernel (DRM, Direct
1013Rendering Manager). The most important use for the DRI is to create fast
1014OpenGL implementations providing hardware acceleration for Mesa.
1015Several 3D accelerated drivers have been written to the DRI specification,
1016including drivers for chipsets produced by 3DFX, AMD (formerly ATI), Intel
1017and Matrox.")
1018 (license license:x11)))
1019
1020(define-public mtdev
1021 (package
1022 (name "mtdev")
1023 (version "1.1.6")
1024 (source
1025 (origin
1026 (method url-fetch)
1027 (uri (string-append
1028 "http://bitmath.org/code/mtdev/mtdev-"
1029 version ".tar.bz2"))
1030 (sha256
1031 (base32
1032 "1q700h9dqcm3zl6c3gj0qxxjcx6ibw2c51wjijydhwdcm26v5mqm"))))
1033 (build-system gnu-build-system)
1034 (arguments
1035 `(#:configure-flags
1036 '("--disable-static")
1037 ,@(if (and (or (target-riscv64?)
1038 (target-aarch64?))
1039 (%current-target-system))
1040 `(#:phases
1041 (modify-phases %standard-phases
1042 (add-after 'unpack 'update-config-scripts
1043 (lambda* (#:key inputs native-inputs #:allow-other-keys)
1044 ;; Replace outdated config.guess and config.sub.
1045 (for-each (lambda (file)
1046 (install-file
1047 (search-input-file
1048 (or native-inputs inputs)
1049 (string-append "/bin/" file)) "./config-aux"))
1050 '("config.guess" "config.sub"))))))
1051 '())))
1052 (native-inputs
1053 (if (and (or (target-riscv64?)
1054 (target-aarch64?))
1055 (%current-target-system))
1056 (list config)
1057 '()))
1058 (home-page "https://bitmath.org/code/mtdev/")
1059 (synopsis "Multitouch protocol translation library")
1060 (description "Mtdev is a stand-alone library which transforms all
1061variants of kernel MT events to the slotted type B protocol. The events
1062put into mtdev may be from any MT device, specifically type A without
1063contact tracking, type A with contact tracking, or type B with contact
1064tracking.")
1065 (license license:x11)))
1066
1067(define-public startup-notification
1068 (package
1069 (name "startup-notification")
1070 (version "0.12")
1071 (source
1072 (origin
1073 (method url-fetch)
1074 (uri (string-append "https://www.freedesktop.org/software/" name
1075 "/releases/" name "-" version ".tar.gz"))
1076 (sha256
1077 (base32
1078 "0jmyryrpqb35y9hd5sgxqy2z0r1snw7d3ljw0jak0n0cjdz1yf9w"))))
1079 (build-system gnu-build-system)
1080 (arguments
1081 (if (and (or (target-riscv64?)
1082 (target-aarch64?))
1083 (%current-target-system))
1084 (list
1085 #:configure-flags #~(list
1086 ;; when cross-compilation, skip realloc checking
1087 "lf_cv_sane_realloc=yes"
1088 (string-append "PKG_CONFIG="
1089 #$(pkg-config-for-target)))
1090 #:phases
1091 #~(modify-phases %standard-phases
1092 (add-after 'unpack 'update-config-scripts
1093 (lambda* (#:key inputs native-inputs #:allow-other-keys)
1094 ;; Replace outdated config.guess and config.sub.
1095 (for-each (lambda (file)
1096 (install-file
1097 (search-input-file
1098 (or native-inputs inputs)
1099 (string-append "/bin/" file)) "."))
1100 '("config.guess" "config.sub"))))))
1101 (list
1102 #:configure-flags
1103 #~(list "CFLAGS=-g -O2 -Wno-error=int-conversion"))))
1104 (native-inputs (append (if (and (or (target-riscv64?)
1105 (target-aarch64?))
1106 (%current-target-system))
1107 (list config)
1108 '())
1109 (list pkg-config)))
1110 (inputs
1111 (list libx11 xcb-util))
1112 (home-page "https://www.freedesktop.org/wiki/Software/startup-notification/")
1113 (synopsis "Application startup notification and feedback library")
1114 (description
1115 "Startup-notification contains a reference implementation of the startup
1116notification protocol. The reference implementation is mostly under an X Window
1117System style license, and has no special dependencies.")
1118 ;; Most of the code is provided under x11 license.
1119 (license license:lgpl2.0+)))
1120
1121(define-public wmctrl
1122 (package
1123 (name "wmctrl")
1124 (version "1.07")
1125 (source (origin
1126 (method url-fetch)
1127 (uri (string-append
1128 "https://sites.google.com/site/tstyblo/wmctrl/wmctrl-"
1129 version ".tar.gz"))
1130 (sha256
1131 (base32
1132 "1afclc57b9017a73mfs9w7lbdvdipmf9q0xdk116f61gnvyix2np"))
1133 (patches (search-patches "wmctrl-64-fix.patch"))))
1134 (build-system gnu-build-system)
1135 (arguments
1136 '(#:configure-flags
1137 (list (string-append "--mandir="
1138 (assoc-ref %outputs "out")
1139 "/share/man"))))
1140 (native-inputs
1141 (list pkg-config))
1142 (inputs
1143 (list libx11 libxmu glib))
1144 (home-page "http://tomas.styblo.name/wmctrl/")
1145 (synopsis "Command-line tool to control X window managers")
1146 (description
1147 "Wmctrl interacts with an X window manager that is compatible
1148with the EWMH/NetWM specification. It can query the window manager for
1149information, and request for certain window management actions (resize and
1150move windows, switch between desktops, etc.).")
1151 (license license:gpl2+)))
1152
1153(define-public scrot
1154 (package
1155 (name "scrot")
1156 (version "1.12.1")
1157 (source
1158 (origin
1159 (method git-fetch)
1160 (uri
1161 (git-reference
1162 (url "https://github.com/resurrecting-open-source-projects/scrot")
1163 (commit version)))
1164 (file-name (git-file-name name version))
1165 (sha256
1166 (base32 "080wh1rb11xzzmwpmb0qxn7zhabkgqaklg4395dzf4p9p3wlf5hk"))))
1167 (build-system gnu-build-system)
1168 (native-inputs
1169 (list autoconf autoconf-archive automake pkg-config))
1170 (inputs
1171 (list giblib
1172 imlib2
1173 libbsd
1174 libx11
1175 libxcomposite
1176 libxext
1177 libxfixes
1178 libxinerama))
1179 (home-page "https://github.com/resurrecting-open-source-projects/scrot")
1180 (synopsis "Command-line screen capture utility for X Window System")
1181 (description
1182 "Scrot saves a screenshot of a full screen, a window or a part
1183of the screen selected by mouse.")
1184 ;; This license removes a clause about X Consortium from the original
1185 ;; X11 license.
1186 (license (license:x11-style "file://COPYING"
1187 "See 'COPYING' in the distribution."))))
1188
1189(define-public slop
1190 (package
1191 (name "slop")
1192 (version "7.6")
1193 (source (origin
1194 (method git-fetch)
1195 (uri (git-reference
1196 (url "https://github.com/naelstrof/slop")
1197 (commit (string-append "v" version))))
1198 (file-name (git-file-name name version))
1199 (sha256
1200 (base32
1201 "1xaka98vka5kh3wmby68ifwi6rp0985dj13fgs96bw8a1z3m1l1d"))))
1202 (build-system cmake-build-system)
1203 (arguments
1204 '(#:tests? #f)) ; no "check" target
1205 (inputs
1206 (list glew
1207 glm
1208 icu4c
1209 libxext
1210 libxrender
1211 mesa))
1212 (home-page "https://github.com/naelstrof/slop")
1213 (synopsis "Select a region and print its bounds to stdout")
1214 (description
1215 "slop (Select Operation) is a tool that queries for a selection from a
1216user and prints the region to stdout. It grabs the mouse and turns it into a
1217crosshair, lets the user click and drag to make a selection (or click on a
1218window) while drawing a pretty box around it, then finally prints the
1219selection's dimensions to stdout.")
1220 (license license:gpl3+)))
1221
1222(define-public maim
1223 (package
1224 (name "maim")
1225 (version "5.8.1")
1226 (source (origin
1227 (method git-fetch)
1228 (uri (git-reference
1229 (url "https://github.com/naelstrof/maim")
1230 (commit (string-append "v" version))))
1231 (file-name (git-file-name name version))
1232 (sha256
1233 (base32
1234 "028h6xcgj5zf5vwyln1d2wd7v7cxxzwxf79150ji0wrmxvgxbf3d"))))
1235 (build-system cmake-build-system)
1236 (arguments
1237 '(#:tests? #f)) ; no "check" target
1238 (inputs
1239 (list glm
1240 libjpeg-turbo
1241 libpng
1242 libxcomposite
1243 libxfixes
1244 libxrandr
1245 libwebp
1246 mesa
1247 slop
1248 zlib))
1249 (home-page "https://github.com/naelstrof/maim")
1250 (synopsis "Screenshot utility for X Window System")
1251 (description
1252 "maim (Make Image) is a tool that takes screenshots of your desktop and
1253saves it in any format. Along with a full screen, it allows you to capture a
1254predefined region or a particular window. Also, it makes it possible to
1255include cursor in the resulting image.")
1256 (license license:gpl3+)))
1257
1258(define-public unclutter
1259 (package
1260 (name "unclutter")
1261 (version "8")
1262 (source (origin
1263 (method url-fetch)
1264 (uri (string-append
1265 "http://ftp.x.org/contrib/utilities/unclutter-"
1266 version ".tar.Z"))
1267 (sha256
1268 (base32
1269 "0ahrr5z6wxqqfyihm112hnq0859zlxisrb3y5232zav58j6sfmdq"))))
1270 (build-system gnu-build-system)
1271 (arguments
1272 '(#:tests? #f ; no check target
1273 #:make-flags
1274 (list (string-append "CFLAGS=-g -O2 "
1275 ;; Relax GCC 14's checks.
1276 "-Wno-error=implicit-int "
1277 "-Wno-error=builtin-declaration-mismatch "
1278 "-Wno-error=implicit-function-declaration"))
1279 #:phases
1280 (modify-phases %standard-phases
1281 (delete 'configure)
1282 (replace 'install
1283 (lambda* (#:key inputs outputs #:allow-other-keys)
1284 (let* ((out (assoc-ref outputs "out"))
1285 (bin (string-append out "/bin"))
1286 (man1 (string-append out "/share/man/man1")))
1287 (mkdir-p bin)
1288 (mkdir-p man1)
1289 (invoke "make" "install" "install.man"
1290 (string-append "BINDIR=" bin)
1291 (string-append "MANDIR=" man1))))))))
1292 (inputs (list libx11))
1293 (home-page "http://ftp.x.org/contrib/utilities/")
1294 (synopsis "Hide idle mouse cursor")
1295 (description
1296 "Unclutter is a program which runs permanently in the background of an
1297X11 session. It checks on the X11 pointer (cursor) position every few
1298seconds, and when it finds it has not moved (and no buttons are pressed
1299on the mouse, and the cursor is not in the root window) it creates a
1300small sub-window as a child of the window the cursor is in. The new
1301window installs a cursor of size 1x1 but a mask of all 0, i.e. an
1302invisible cursor. This allows you to see all the text in an xterm or
1303xedit, for example. The human factors crowd would agree it should make
1304things less distracting.")
1305 (license license:public-domain)))
1306
1307(define-public unclutter-xfixes
1308 (package
1309 (name "unclutter-xfixes")
1310 (version "1.5")
1311 (source
1312 (origin
1313 (method git-fetch)
1314 (uri (git-reference
1315 (url "https://github.com/Airblader/unclutter-xfixes")
1316 (commit (string-append "v" version))))
1317 (file-name (git-file-name name version))
1318 (sha256
1319 (base32
1320 "148m4wx8v57s3l2wb69y9imb00y8ca2li27hsxibwnl1wrkb7z4b"))))
1321 (build-system gnu-build-system)
1322 (arguments `(#:tests? #f
1323 #:make-flags
1324 (list ,(string-append "CC=" (cc-for-target))
1325 (string-append "PREFIX=" (assoc-ref %outputs "out")))
1326 #:phases
1327 (modify-phases %standard-phases
1328 (delete 'configure))))
1329 (inputs
1330 (list libx11 libev libxfixes libxi))
1331 (native-inputs
1332 (list asciidoc pkg-config))
1333 (home-page "https://github.com/Airblader/unclutter-xfixes")
1334 (synopsis "Hide idle mouse cursor")
1335 (description
1336 "unclutter-xfixes is a rewrite of the popular tool unclutter, but
1337using the x11-xfixes extension. This means that this rewrite doesn't
1338use fake windows or pointer grabbing and hence causes less problems
1339with window managers and/or applications.
1340
1341Unclutter is a program which runs permanently in the background of an
1342X11 session. It checks on the X11 pointer (cursor) position every few
1343seconds, and when it finds it has not moved (and no buttons are pressed
1344on the mouse, and the cursor is not in the root window) it creates a
1345small sub-window as a child of the window the cursor is in. The new
1346window installs a cursor of size 1x1 but a mask of all 0, i.e. an
1347invisible cursor. This allows you to see all the text in an xterm or
1348xedit, for example. The human factors crowd would agree it should make
1349things less distracting.")
1350 (license license:expat)))
1351
1352(define-public xautomation
1353 (package
1354 (name "xautomation")
1355 (version "1.09")
1356 (source
1357 (origin
1358 (method url-fetch)
1359 (uri (string-append "https://www.hoopajoo.net/static/projects/"
1360 "xautomation-" version ".tar.gz"))
1361
1362 (sha256
1363 (base32
1364 "03azv5wpg65h40ip2kk1kdh58vix4vy1r9bihgsq59jx2rhjr3zf"))))
1365 (build-system gnu-build-system)
1366 (inputs
1367 (list libpng libx11 libxi libxtst))
1368 (native-inputs
1369 (list xorgproto))
1370 (synopsis "Tools to automate tasks in X such as detecting on screen images")
1371 (description
1372 "Xautomation can control X from the command line for scripts, and
1373do visual scraping to find things on the screen. The control interface
1374allows mouse movement, clicking, button up/down, key up/down, etc, and
1375uses the XTest extension so you don't have the annoying problems that
1376xse has when apps ignore sent events. The visgrep program can find
1377images inside of images and reports the coordinates, allowing programs
1378to find buttons, etc, on the screen to click on.")
1379 (home-page "https://www.hoopajoo.net/projects/xautomation.html")
1380 (license license:gpl2+)))
1381
1382(define-public xbanish
1383 (package
1384 (name "xbanish")
1385 (version "1.8")
1386 (home-page "https://github.com/jcs/xbanish")
1387 (source (origin
1388 (method git-fetch)
1389 (uri (git-reference (url home-page)
1390 (commit (string-append "v" version))))
1391 (file-name (git-file-name name version))
1392 (sha256
1393 (base32
1394 "12mjwn8hvrrhwyg3wi20bqr6k8d57xf9m5qr3s4nn511dcksh04g"))))
1395 (build-system gnu-build-system)
1396 (arguments
1397 `(#:tests? #f ; no tests
1398 #:make-flags (list ,(string-append "CC=" (cc-for-target))
1399 (string-append "PREFIX=" (assoc-ref %outputs "out")))
1400 #:phases (modify-phases %standard-phases
1401 (delete 'configure)))) ; no configure script
1402 (inputs
1403 (list libx11 libxfixes libxi libxt))
1404 (synopsis "Banish the mouse cursor")
1405 (description
1406 "@command{xbanish} hides the mouse cursor when you start typing, and
1407shows it again when the mouse cursor moves or a mouse button is pressed.")
1408 (license license:bsd-3)))
1409
1410(define-public xlockmore
1411 (package
1412 (name "xlockmore")
1413 (version "5.72")
1414 (source (origin
1415 (method url-fetch)
1416 (uri (list (string-append "http://sillycycle.com/xlock/"
1417 "xlockmore-" version ".tar.xz")
1418 ;; Previous releases are moved to a subdirectory.
1419 (string-append "http://sillycycle.com/xlock/"
1420 "recent-releases/"
1421 "xlockmore-" version ".tar.xz")))
1422 (sha256
1423 (base32
1424 "0wn77ri29rhk1w3wik2hpqb8lks1pyqzdk6d583mawxfcxcrf4fm"))))
1425 (build-system gnu-build-system)
1426 (arguments
1427 (list
1428 #:configure-flags
1429 #~(list (string-append "--enable-appdefaultdir="
1430 #$output
1431 "/lib/X11/app-defaults"))
1432 #:tests? #f)) ;no such thing as a test suite
1433 (inputs
1434 (list libx11 libxcrypt libxext libxt linux-pam))
1435 (home-page "https://sillycycle.com/xlockmore.html")
1436 (synopsis "Screen locker for the X Window System")
1437 (description
1438 "XLockMore is a classic screen locker and screen saver for the
1439X Window System.")
1440 (license (license:non-copyleft #f "See xlock.c.")
1441 ))) ; + GPLv2 in modes/glx/biof.c.
1442
1443(define-public xtrlock
1444 (package
1445 (name "xtrlock")
1446 (version "2.15")
1447 (source (origin
1448 (method url-fetch)
1449 (uri (string-append
1450 "mirror://debian/pool/main/x/xtrlock/xtrlock_" version
1451 ".tar.xz"))
1452 (sha256
1453 (base32
1454 "0mgpysbvipd5h6x6zz4hng6b13gp3qjnpgny3azyj8k8dv85bppw"))))
1455 (build-system gnu-build-system)
1456 (arguments
1457 ;; LDLIBS are required for the package to build.
1458 ;; CFLAGS are required for it to use the shadow file, and to
1459 ;; be compatible with multi-touch devices.
1460 (list #:make-flags
1461 #~'("CFLAGS=-O2 -g -Wall -DSHADOW_PWD -DMULTITOUCH"
1462 "LDLIBS=-lX11 -lcrypt -lXi")
1463 #:phases
1464 #~(modify-phases %standard-phases
1465 (delete 'configure)
1466 (delete 'check)
1467 (add-after 'unpack 'rename-makefile
1468 (lambda _
1469 (rename-file "Makefile.noimake" "Makefile")
1470 (rename-file "xtrlock.man" "xtrlock.1")))
1471 (replace 'install
1472 (lambda* (#:key outputs #:allow-other-keys)
1473 (let* ((out (assoc-ref outputs "out")))
1474 (install-file "xtrlock"
1475 (string-append out "/bin/"))
1476 (install-file "xtrlock.1"
1477 (string-append out
1478 "/share/man/man1/"))))))))
1479 (inputs (list libx11 libxcrypt libxi libxfixes))
1480 (home-page "https://packages.debian.org/sid/xtrlock")
1481 (synopsis "Minimal X display lock program")
1482 (description
1483 "xtrlock locks the X server till the user enters their password at the
1484keyboard. While xtrlock is running, the mouse and keyboard are grabbed and
1485the mouse cursor becomes a padlock. Output displayed by X programs, and
1486windows put up by new X clients, continue to be visible, and any new output is
1487displayed normally. The mouse and keyboard are returned when the user types
1488their password, followed by Enter or Newline. If an incorrect password is
1489entered the bell is sounded. Pressing Backspace or Delete erases one
1490character of a password partially typed; pressing Escape or Clear clears
1491anything that has been entered.")
1492 (license license:gpl2+)))
1493
1494(define-public xosd
1495 (package
1496 (name "xosd")
1497 (version "2.2.14")
1498 (source (origin
1499 (method url-fetch)
1500 (uri (string-append
1501 "mirror://sourceforge/libxosd/libxosd/xosd-" version "/"
1502 name "-" version ".tar.gz"))
1503 (sha256
1504 (base32
1505 "025m7ha89q29swkc7s38knnbn8ysl24g2h5s7imfxflm91psj7sg"))))
1506 (build-system gnu-build-system)
1507 (arguments
1508 '(#:configure-flags
1509 (list (string-append "--mandir=" %output "/share/man"))))
1510 (inputs
1511 (list libx11 libxt libxext libxinerama))
1512 (home-page "https://sourceforge.net/projects/libxosd/")
1513 (synopsis "X On Screen Display")
1514 (description
1515 "XOSD provides a C library and a simple utility (osd_cat) for displaying
1516transparent text on your screen.")
1517 (license license:gpl2+)))
1518
1519(define-public wob
1520 (package
1521 (name "wob")
1522 (version "0.16")
1523 (source
1524 (origin
1525 (method url-fetch)
1526 (uri (string-append "https://github.com/francma/wob/releases/download/"
1527 version "/wob-" version ".tar.gz"))
1528 (sha256
1529 (base32 "18p5l045kajnwv8ms751sb29q8ay6ycv9ni7iyx7nr26n5cm3vql"))))
1530 (build-system meson-build-system)
1531 (native-inputs
1532 (list pkg-config scdoc))
1533 (inputs
1534 (list libinih libseccomp wayland wayland-protocols))
1535 (home-page "https://github.com/francma/wob")
1536 (synopsis "Lightweight overlay bar for Wayland")
1537 (description
1538 "Wob, or Wayland Overlay Bar, is a lightweight overlay volume,
1539backlight, progress, or anything bar for Wayland.")
1540 (license license:isc)))
1541
1542(define-public xbindkeys
1543 (package
1544 (name "xbindkeys")
1545 (version "1.8.7")
1546 (source (origin
1547 (method url-fetch)
1548 ;; Download from the savannah mirror list fails
1549 (uri (string-append
1550 "http://www.nongnu.org/xbindkeys/xbindkeys-"
1551 version
1552 ".tar.gz"))
1553 (sha256
1554 (base32
1555 "1wl2vc5alisiwyk8m07y1ryq8w3ll9ym83j27g4apm4ixjl8d6x2"))))
1556 (build-system gnu-build-system)
1557 (arguments
1558 `(#:phases
1559 (modify-phases %standard-phases
1560 (add-after 'unpack 'sanitise-shebang
1561 ;; This wish script uses a strange double shebang that escapes our
1562 ;; patch-shebangs phase. Assume that it's unnecessary & replace it.
1563 (lambda _
1564 (substitute* "xbindkeys_show"
1565 (("^#!.*|^exec wish.*") "")
1566 (("^# \\\\") (string-append "#!" (which "wish"))))
1567 #t))
1568 (add-after 'unpack 'patch-references
1569 (lambda* (#:key outputs #:allow-other-keys)
1570 (let ((out (assoc-ref outputs "out")))
1571 (substitute* "xbindkeys_show"
1572 (("\"(xbindkeys)\"" _ command)
1573 (format #f "\"~a/bin/~a\"" out command)))
1574 #t))))))
1575 (native-inputs
1576 (list pkg-config))
1577 (inputs
1578 (list guile-2.2 libx11 tk))
1579 (home-page "https://www.nongnu.org/xbindkeys/")
1580 (synopsis "Associate a combination of keys with a shell command")
1581 (description
1582 "XBindKeys is a program that allows you to launch shell commands with
1583your keyboard or your mouse under the X Window System. It links commands to
1584keys or mouse buttons, using a configuration file. It's independent of the
1585window manager and can capture all keyboard keys (ex: Power, Wake...). It
1586optionally supports a Guile-based configuration file layout, which enables you
1587to access all XBindKeys internals, so you can have key combinations, double
1588clicks or timed double clicks take actions. Also all functions that work in
1589Guile will work for XBindKeys.")
1590 (license license:gpl2+)))
1591
1592(define-public sxhkd
1593 (package
1594 (name "sxhkd")
1595 (version "0.6.2")
1596 (source
1597 (origin
1598 (method git-fetch)
1599 (uri (git-reference
1600 (url "https://github.com/baskerville/sxhkd")
1601 (commit version)))
1602 (file-name (git-file-name name version))
1603 (sha256
1604 (base32 "1winwzdy9yxvxnrv8gqpigl9y0c2px27mnms62bdilp4x6llrs9r"))))
1605 (build-system gnu-build-system)
1606 (inputs
1607 (list libxcb xcb-util xcb-util-keysyms xcb-util-wm))
1608 (arguments
1609 (list #:phases #~(modify-phases %standard-phases (delete 'configure))
1610 #:tests? #f ; no check target
1611 #:make-flags
1612 #~(list (string-append "CC=" #$(cc-for-target))
1613 (string-append "PREFIX=" #$output)
1614 ;; Keep the documentation where the build system installs LICENSE.
1615 (string-append "DOCPREFIX=" #$output
1616 "/share/doc/" #$name "-" #$version))))
1617 (home-page "https://github.com/baskerville/sxhkd")
1618 (synopsis "Simple X hotkey daemon")
1619 (description "sxhkd is a simple X hotkey daemon with a powerful and
1620compact configuration syntax.")
1621 (license license:bsd-2)))
1622
1623(define-public rxvt-unicode
1624 (package
1625 (name "rxvt-unicode")
1626 (version "9.31")
1627 (source (origin
1628 (method url-fetch)
1629 (uri (string-append "http://dist.schmorp.de/rxvt-unicode/Attic/"
1630 name "-" version ".tar.bz2"))
1631 (patches (search-patches "rxvt-unicode-fix-cursor-position.patch"))
1632 (sha256
1633 (base32
1634 "1s3jcvac40zzp03fvmhjsdpsjx0gb1wk54qz74zhzzj9q75kz8da"))))
1635 (build-system gnu-build-system)
1636 (arguments
1637 ;; This sets the destination when installing the necessary terminal
1638 ;; capability data, which are not provided by 'ncurses'. See
1639 ;; https://lists.gnu.org/archive/html/bug-ncurses/2009-10/msg00031.html
1640 (list #:configure-flags #~(list "--enable-256-color")
1641 #:make-flags #~(list (string-append "TERMINFO=" #$output "/share/terminfo"))
1642 #:phases
1643 #~(modify-phases %standard-phases
1644 (add-after 'install 'install-desktop-entries
1645 (lambda _
1646 (for-each (lambda (exec name)
1647 (make-desktop-entry-file
1648 (string-append #$output "/share/applications/"
1649 exec ".desktop")
1650 #:type "Application"
1651 #:name name
1652 #:comment '((#f #$(package-synopsis this-package)))
1653 #:exec exec
1654 #:try-exec exec
1655 #:icon "utilities-terminal"
1656 #:categories '("System" "TerminalEmulator")))
1657 '("urxvt" "urxvtc")
1658 '("rxvt-unicode" "rxvt-unicode (client)")))))))
1659 (inputs
1660 (list libptytty libxft libx11 libxt libxext))
1661 (native-inputs
1662 (list ncurses ;trigger the installation of terminfo data
1663 perl pkg-config))
1664 ;; FIXME: This should only be located in 'ncurses'. Nonetheless it is
1665 ;; provided for usability reasons. See <https://bugs.gnu.org/22138>.
1666 (native-search-paths
1667 (list (search-path-specification
1668 (variable "TERMINFO_DIRS")
1669 (files '("share/terminfo")))))
1670 (home-page "http://software.schmorp.de/pkg/rxvt-unicode.html")
1671 (synopsis "Rxvt clone with XFT and unicode support")
1672 (description "Rxvt-unicode (urxvt) is a colour vt102 terminal emulator
1673intended as an xterm replacement for users who do not require features such as
1674Tektronix 4014 emulation and toolkit-style configurability. It supports
1675unicode, XFT and may be extended with Perl plugins. It also comes with a
1676client/daemon pair that lets you open any number of terminal windows from
1677within a single process.")
1678 (license license:gpl3+)))
1679
1680(define-public rxvt-unicode-terminfo
1681 (package
1682 (name "rxvt-unicode-terminfo")
1683 (version (package-version rxvt-unicode))
1684 (source rxvt-unicode)
1685 (build-system copy-build-system)
1686 (arguments (list #:install-plan #~'(("share/terminfo" "share/terminfo"))))
1687 (native-search-paths
1688 (list (search-path-specification
1689 (variable "TERMINFO_DIRS")
1690 (files '("share/terminfo")))))
1691 (home-page (package-home-page rxvt-unicode))
1692 (synopsis "Terminfo for rxvt-unicode")
1693 (description "This package provides terminfo files for the
1694@command{rxvt-unicode} terminal.")
1695 (license (package-license rxvt-unicode))))
1696
1697(define-public xcape
1698 (package
1699 (name "xcape")
1700 (version "1.2")
1701 (source (origin
1702 (method git-fetch)
1703 (uri (git-reference
1704 (url "https://github.com/alols/xcape")
1705 (commit (string-append "v" version))))
1706 (file-name (git-file-name name version))
1707 (sha256
1708 (base32
1709 "09a05cxgrip6nqy1qmwblamp2bhknqnqmxn7i2a1rgxa0nba95dm"))))
1710 (build-system gnu-build-system)
1711 (arguments
1712 `(#:tests? #f ; no check target
1713 ;; no configure script
1714 #:phases (modify-phases %standard-phases (delete 'configure))
1715 #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
1716 "MANDIR=/share/man/man1"
1717 ,(string-append "CC=" (cc-for-target)))))
1718 (inputs
1719 (list libxtst libx11))
1720 (native-inputs
1721 (list pkg-config))
1722 (home-page "https://github.com/alols/xcape")
1723 (synopsis "Use a modifier key in X.org as another key")
1724 (description
1725 "This utility for X.org uses a modifier key as another key when
1726pressed and released on its own. The default behaviour is to generate the
1727Escape key when Left Control is pressed and released on its own.")
1728 (license license:gpl3+)))
1729
1730(define-public libwacom
1731 (package
1732 (name "libwacom")
1733 (version "2.13.0")
1734 (source (origin
1735 (method git-fetch)
1736 (uri (git-reference
1737 (url "https://github.com/linuxwacom/libwacom")
1738 (commit (string-append "libwacom-" version))))
1739 (file-name (git-file-name name version))
1740 (sha256
1741 (base32
1742 "0i4svxcg606ph72pv9img3gaw3svi827d2c6bdphlxk7cz81x51q"))))
1743 (build-system meson-build-system)
1744 (arguments
1745 (list
1746 #:configure-flags #~(list "--default-library=shared")))
1747 (native-inputs
1748 (list pkg-config
1749 ;; For tests.
1750 python
1751 python-libevdev
1752 python-pytest
1753 python-pyudev))
1754 (inputs
1755 (list gtk+
1756 eudev
1757 libxml2
1758 python
1759 python-libevdev
1760 python-pyudev))
1761 (propagated-inputs
1762 ;; libwacom.pc 'Requires' these:
1763 (list glib libevdev libgudev))
1764 (home-page "https://linuxwacom.github.io/")
1765 (synopsis "Helper library for graphics tablet settings")
1766 (description
1767 "Libwacom is a library to help implement graphics tablet settings. It is
1768intended to be used by client-programs that need model identification. It is
1769already being used by the gnome-settings-daemon and the GNOME Control Center
1770Wacom tablet applet.")
1771 (license license:hpnd)))
1772
1773(define-public xf86-input-wacom
1774 (package
1775 (name "xf86-input-wacom")
1776 (version "1.2.0")
1777 (source
1778 (origin
1779 (method url-fetch)
1780 (uri (string-append
1781 "https://github.com/linuxwacom/xf86-input-wacom/releases/download/"
1782 "xf86-input-wacom-" version "/"
1783 "xf86-input-wacom-" version ".tar.bz2"))
1784 (sha256
1785 (base32 "0pb8f8fvwm7vy5p3h8nc7x7fb68kpdkscz0j79xzsaxwn8435hhk"))))
1786 (arguments
1787 (list #:configure-flags
1788 #~(list (string-append "--with-sdkdir=" #$output "/include/xorg")
1789 (string-append "--with-xorg-conf-dir=" #$output
1790 "/share/X11/xorg.conf.d"))))
1791 (build-system gnu-build-system)
1792 (native-inputs (list pkg-config))
1793 (inputs (list xorg-server libxrandr libxinerama libxi eudev))
1794 (home-page "https://linuxwacom.github.io/")
1795 (synopsis "Wacom input driver for X")
1796 (description "The xf86-input-wacom driver is the wacom-specific X11 input
1797driver for the X.Org X Server version 1.7 and later (X11R7.5 or later).")
1798 (license license:x11)))
1799
1800(define-public redshift
1801 (package
1802 (name "redshift")
1803 ;; redshift 1.12 does not support Python 3.12, so use latest commit.
1804 (properties '((commit . "490ba2aae9cfee097a88b6e2be98aeb1ce990050")
1805 (revision . "0")))
1806 (version (git-version "1.12"
1807 (assoc-ref properties 'revision)
1808 (assoc-ref properties 'commit)))
1809 (source
1810 (origin
1811 (method git-fetch)
1812 (uri
1813 (git-reference
1814 (url "https://github.com/jonls/redshift/")
1815 (commit (assoc-ref properties 'commit))))
1816 (file-name (git-file-name name version))
1817 (sha256
1818 (base32
1819 "1qn2xp174f77lkkiq8k66k9180anj5c7d84by7lgyv7azdqflwkj"))))
1820 (build-system gnu-build-system)
1821 (arguments
1822 (list
1823 #:imported-modules %pyproject-build-system-modules
1824 #:phases
1825 #~(modify-phases %standard-phases
1826 (add-after 'install 'split-outputs
1827 (lambda* (#:key outputs #:allow-other-keys)
1828 (let ((out (assoc-ref outputs "out"))
1829 (gtk (assoc-ref outputs "gtk"))
1830 (desktop-file "/share/applications/redshift-gtk.desktop"))
1831 (mkdir-p (string-append gtk "/bin"))
1832 (link (string-append out "/bin/redshift-gtk")
1833 (string-append gtk "/bin/redshift-gtk"))
1834 (delete-file (string-append out "/bin/redshift-gtk"))
1835 (copy-recursively (string-append out "/lib")
1836 (string-append gtk "/lib"))
1837 (delete-file-recursively (string-append out "/lib"))
1838 (mkdir-p (string-append gtk "/share/applications"))
1839 (link (string-append out desktop-file)
1840 (string-append gtk desktop-file))
1841 (delete-file (string-append out desktop-file))
1842 (with-directory-excursion (string-append out "/share")
1843 (for-each (lambda (dir)
1844 (copy-recursively
1845 (string-append out "/share/" dir)
1846 (string-append gtk "/share/" dir))
1847 (delete-file-recursively dir))
1848 '("appdata" "icons"))))))
1849 (add-after 'split-outputs 'wrap
1850 (lambda* (#:key inputs outputs #:allow-other-keys)
1851 (let* ((gtk (assoc-ref outputs "gtk"))
1852 (site-packages (@ (guix build pyproject-build-system)
1853 site-packages))
1854 (site (site-packages inputs outputs)))
1855 (wrap-program (string-append gtk "/bin/redshift-gtk")
1856 `("GUIX_PYTHONPATH" ":" prefix
1857 (,(string-append site ":" (getenv "GUIX_PYTHONPATH"))))
1858 `("GI_TYPELIB_PATH" ":" prefix
1859 (,(getenv "GI_TYPELIB_PATH"))))))))))
1860 (outputs '("out" "gtk"))
1861 (native-inputs
1862 (list autoconf
1863 automake
1864 intltool
1865 libtool
1866 pkg-config))
1867 (inputs
1868 (list bash-minimal
1869 libdrm
1870 libx11
1871 libxcb
1872 libxxf86vm
1873 glib ;for Geoclue2 support
1874 ;; To build the GTK3 GUI, we need these.
1875 gtk+
1876 python
1877 python-pygobject
1878 python-pyxdg))
1879 (home-page "https://github.com/jonls/redshift")
1880 (synopsis "Adjust the color temperature of your screen")
1881 (description
1882 "Redshift adjusts the color temperature according to the position of the
1883sun. A different color temperature is set during night and daytime. During
1884twilight and early morning, the color temperature transitions smoothly from
1885night to daytime temperature to allow your eyes to slowly adapt. At night the
1886color temperature should be set to match the lamps in your room.")
1887 (license license:gpl3+)))
1888
1889(define-public wayout
1890 (package
1891 (name "wayout")
1892 (version "0.1.5")
1893 (home-page "https://git.sr.ht/~proycon/wayout")
1894 (source (origin
1895 (method git-fetch)
1896 (uri (git-reference (url home-page) (commit version)))
1897 (file-name (git-file-name name version))
1898 (sha256
1899 (base32
1900 "1i7bab1dcdyybwarhy44xawb6661zv4z8rfdicjyljg320vj79a2"))))
1901 (build-system meson-build-system)
1902 (native-inputs (list cmake-minimal pkg-config scdoc))
1903 (inputs (list cairo pango wayland wayland-protocols))
1904 (synopsis "Output simple text to a wayland desktop widget")
1905 (description
1906 "Wayout takes text from standard input and outputs it to a desktop-widget
1907on Wayland desktops.")
1908 (license license:gpl3+)))
1909
1910(define-public redshift-wayland
1911 (let ((commit "7da875d34854a6a34612d5ce4bd8718c32bec804")
1912 (revision "1"))
1913 (package
1914 (name "redshift-wayland")
1915 (version (string-append "1.12-"
1916 revision "." (string-take commit 7)))
1917 (source (origin
1918 (method git-fetch)
1919 (uri (git-reference
1920 (url "https://github.com/minus7/redshift")
1921 (commit commit)))
1922 (file-name (string-append name "-" version))
1923 (sha256
1924 (base32
1925 "0nbkcw3avmzjg1jr1g9yfpm80kzisy55idl09b6wvzv2sz27n957"))))
1926 (build-system gnu-build-system)
1927 (arguments
1928 '(#:phases (modify-phases %standard-phases
1929 (add-after 'install 'create-desktop-file
1930 (lambda* (#:key outputs #:allow-other-keys)
1931 ;; For the GeoClue provider to work, a .desktop file
1932 ;; needs to be provided. A template is available,
1933 ;; but it only gets installed when the GUI is enabled.
1934 ;; Install it manually for this Wayland variant.
1935 (let* ((out (assoc-ref outputs "out"))
1936 (desktop-file
1937 (string-append
1938 out "/share/applications/redshift.desktop")))
1939 (mkdir-p (dirname desktop-file))
1940 (copy-file "data/applications/redshift.desktop.in"
1941 desktop-file)
1942 (substitute* desktop-file
1943 (("^_") ""))
1944 #t))))))
1945 (native-inputs
1946 (list autoconf automake libtool pkg-config intltool))
1947 (inputs
1948 (list libdrm
1949 libx11
1950 libxcb
1951 libxxf86vm
1952 glib ; for Geoclue2 support
1953 wayland))
1954 (home-page "https://github.com/minus7/redshift")
1955 (synopsis "Adjust the color temperature of your screen (with Wayland support)")
1956 (description
1957 "Redshift adjusts the color temperature according to the position of the
1958sun. A different color temperature is set during night and daytime. During
1959twilight and early morning, the color temperature transitions smoothly from
1960night to daytime temperature to allow your eyes to slowly adapt. At night the
1961color temperature should be set to match the lamps in your room.
1962
1963This is a fork with added support for Wayland using the wlr-gamma-control
1964protocol.")
1965 (license license:gpl3+))))
1966
1967(define-public xwhite
1968 (package
1969 (name "xwhite")
1970 (version "0.0.2")
1971 (source (origin
1972 (method url-fetch)
1973 (uri (string-append "https://github.com/derekchuank/xwhite/"
1974 "releases/download/v" version
1975 "/xwhite-" version ".tar.gz"))
1976 (sha256
1977 (base32
1978 "0jbnlj5a91ib4anprmylqqnbv9wa73cr7fsc1s54df0a0w5yq8sz"))))
1979 (build-system meson-build-system)
1980 (arguments
1981 `(#:tests? #f)) ;No test suite.
1982 (native-inputs (list pkg-config))
1983 (inputs (list libxrandr))
1984 (home-page "https://github.com/derekchuank/xwhite")
1985 (synopsis "Adjust the color balance")
1986 (description
1987 "@command{xwhite} is a command line tool for adjusting the colour
1988balance of screen. It is based on xrandr's gamma correction and brightness adjustment.
1989As such, it can only be used for X displays and not Wayland displays. It is typically
1990used for tuning the color balance and color temperature. It has a similar function as
1991@command{redshift -P -g R:G:B -O temperature}, but @command{xwhite} is more flexible
1992in that it does not keep the white color fixed, suitable for setting the white color
1993to an arbitrary balanced color.")
1994 (license license:gpl2)))
1995
1996(define-public gammastep
1997 (package
1998 (name "gammastep")
1999 (version "2.0.11")
2000 (source
2001 (origin
2002 (method git-fetch)
2003 (uri (git-reference
2004 (url "https://gitlab.com/chinstrap/gammastep")
2005 (commit (string-append "v" version))))
2006 (file-name (git-file-name name version))
2007 (sha256
2008 (base32 "0i8042ks83h5hcm0cbwfv9s7lca5nclpfnrg92rqnbf7n506khkk"))))
2009 (build-system gnu-build-system)
2010 (arguments
2011 (list
2012 #:phases
2013 #~(modify-phases %standard-phases
2014 (add-after 'install 'wrap-python-and-typelib
2015 (lambda _
2016 ;; Gammastep GUI needs Typelib files from GTK and access to
2017 ;; Python libraries.
2018 (wrap-program (string-append #$output "/bin/gammastep-indicator")
2019 `("PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
2020 `("GI_TYPELIB_PATH" ":" prefix
2021 (,(getenv "GI_TYPELIB_PATH")))))))))
2022 (native-inputs
2023 (list autoconf
2024 automake
2025 gettext-minimal
2026 intltool
2027 libtool
2028 pkg-config))
2029 (inputs
2030 (list bash-minimal
2031 glib
2032 gtk+
2033 libappindicator
2034 libdrm
2035 libx11
2036 libxxf86vm
2037 libxcb
2038 python
2039 python-pygobject-3.50
2040 python-pyxdg
2041 wayland))
2042 (home-page "https://gitlab.com/chinstrap/gammastep")
2043 (synopsis "Adjust the color temperature of your screen")
2044 (description
2045 "Gammastep automatically adjusts the color temperature of your
2046screen according to your surroundings. This may help your eyes hurt
2047less if you are working in front of the screen at night.")
2048 (license license:gpl3)))
2049
2050(define-public xscreensaver
2051 (package
2052 (name "xscreensaver")
2053 (version "6.12")
2054 (source
2055 (origin
2056 (method url-fetch)
2057 (uri
2058 (string-append "https://www.jwz.org/xscreensaver/xscreensaver-"
2059 version ".tar.gz"))
2060 (sha256
2061 (base32 "0hvn67qs0rns6qi9phhs601vzbryx2kyvginfcybrfz32y17kxjg"))
2062 (modules '((guix build utils)))
2063 (snippet
2064 ;; 'configure.ac' checks for $ac_unrecognized_opts and exits if it's
2065 ;; non-empty. Since the default 'configure' phases passes options
2066 ;; that may or may not be recognized, such as '--enable-fast-install',
2067 ;; these need to be tolerated, hence this snippet.
2068 '(substitute* "configure"
2069 (("exit 2") "true")))))
2070 (build-system gnu-build-system)
2071 (arguments
2072 `(#:tests? #f ; no check target
2073 #:phases
2074 (modify-phases %standard-phases
2075 (add-before 'configure 'adjust-gtk-resource-paths
2076 (lambda _
2077 (substitute* '("driver/Makefile.in" "po/Makefile.in.in")
2078 (("@GTK_DATADIR@") "@datadir@")
2079 (("@PO_DATADIR@") "@datadir@"))
2080 #t)))
2081 #:configure-flags '("--with-pam"
2082
2083 ;; Don't check /proc/interrupts in the build
2084 ;; environment to avoid non-deterministic failures
2085 ;; of the 'configure' script.
2086 "--without-proc-interrupts"
2087
2088 "--without-readdisplay")
2089 #:make-flags (list (string-append "AD_DIR="
2090 (assoc-ref %outputs "out")
2091 "/lib/X11/app-defaults"))))
2092 (native-inputs
2093 (list pkg-config intltool))
2094 (inputs
2095 (list libx11
2096 libxcrypt
2097 libxext
2098 libxi
2099 libxt
2100 libxft
2101 libxmu
2102 libxpm
2103 libglade
2104 libxml2
2105 libsm
2106 libjpeg-turbo
2107 linux-pam
2108 pango
2109 gtk+
2110 perl
2111 cairo
2112 bc
2113 libxrandr
2114 glu
2115 `(,glib "bin")))
2116 (home-page "https://www.jwz.org/xscreensaver/")
2117 (synopsis "Classic screen saver suite supporting screen locking")
2118 (description
2119 "xscreensaver is a popular screen saver collection with many entertaining
2120demos. It also acts as a nice screen locker.")
2121 ;; xscreensaver doesn't have a single copyright file and instead relies on
2122 ;; source comment headers, though most files have the same lax
2123 ;; permissions. To reduce complexity, we're pointing at Debian's
2124 ;; breakdown of the copyright information.
2125 (license (license:non-copyleft
2126 (string-append
2127 "http://metadata.ftp-master.debian.org/changelogs/"
2128 "/main/x/xscreensaver/xscreensaver_5.36-1_copyright")))))
2129
2130(define-public xssproxy
2131 (package
2132 (name "xssproxy")
2133 (version "1.1.2")
2134 (source (origin
2135 (method git-fetch)
2136 (uri (git-reference
2137 (url "https://github.com/vincentbernat/xssproxy")
2138 (commit (string-append "v" version))))
2139 (file-name (string-append name "-" version "-checkout"))
2140 (sha256
2141 (base32
2142 "02sqa5fki82xhrx5m02pw95ych0pq3664f3c0jckm0jw0s0kdkz8"))))
2143 (build-system gnu-build-system)
2144 (arguments
2145 (list
2146 #:make-flags
2147 #~(list "bindir=/bin"
2148 "man1dir=/share/man/man1"
2149 (string-append "DESTDIR=" #$output)
2150 (string-append "CC=" #$(cc-for-target)))
2151 #:phases
2152 #~(modify-phases %standard-phases
2153 (delete 'configure)
2154 (delete 'check))))
2155 (native-inputs
2156 (list pkg-config))
2157 (inputs
2158 (list glib libx11 libxext libxscrnsaver dbus))
2159 (synopsis "Forward freedesktop.org Idle Inhibition Service calls to Xss")
2160 (description "xssproxy implements the @code{org.freedesktop.ScreenSaver}
2161D-Bus interface described in the Idle Inhibition Service Draft by the
2162freedesktop.org developers. The inhibition of the screensaver is then
2163controlled using the XScreenSaverSuspend function from the Xss (X11 Screen
2164Saver extension) library.")
2165 (home-page "https://github.com/timakro/xssproxy")
2166 (license license:expat)))
2167
2168(define-public xsel
2169 ;; The 1.2.0 release no longer compiles with GCC 8 and upper, see:
2170 ;; https://github.com/kfish/xsel/commit/d88aa9a8dba9228e6780d6bb5a5720a36f854918.
2171 (let ((commit "062e6d373537c60829fa9b5dcddbcd942986b3c3")
2172 (revision "1"))
2173 (package
2174 (name "xsel")
2175 (version (git-version "1.2.0" revision commit))
2176 (source (origin
2177 (method git-fetch)
2178 (uri (git-reference
2179 (url "https://github.com/kfish/xsel")
2180 (commit commit)))
2181 (file-name (git-file-name name version))
2182 (sha256
2183 (base32
2184 "0fbf80zsc22vcqp59r9fdx4icxhrkv7l3lphw83326jrmkzy6kri"))))
2185 (build-system gnu-build-system)
2186 (arguments
2187 `(#:phases
2188 (modify-phases %standard-phases
2189 (replace 'bootstrap
2190 (lambda _
2191 (invoke "autoreconf" "-vfi"))))))
2192 (native-inputs (list autoconf automake libtool))
2193 (inputs
2194 (list libxt))
2195 (home-page "https://www.vergenet.net/~conrad/software/xsel/")
2196 (synopsis "Manipulate X selection and/or clipboard from the command line")
2197 (description
2198 "XSel is a command-line program for getting and setting the contents of
2199the X selection and/or clipboard. Normally this is only accessible by manually
2200highlighting information and pasting it with the middle mouse button.
2201
2202XSel reads from standard input and writes to standard output by default, but can
2203also follow a growing file, display contents, delete entries and more.")
2204 (license (license:x11-style "file://COPYING"
2205 "See COPYING in the distribution.")))))
2206
2207(define-public xdpyprobe
2208 (package
2209 (name "xdpyprobe")
2210 (version "0.1")
2211 (source (origin
2212 (method url-fetch)
2213 (uri (string-append "https://github.com/alezost/" name
2214 "/releases/download/v" version
2215 "/" name "-" version ".tar.gz"))
2216 (sha256
2217 (base32
2218 "1h09wd2qcg08rj5hcakvdh9q01hkrj8vxly94ax3ch2x06lm0zq8"))))
2219 (build-system gnu-build-system)
2220 (inputs
2221 (list libx11))
2222 (home-page "https://github.com/alezost/xdpyprobe")
2223 (synopsis "Probe X server for connectivity")
2224 (description
2225 "Xdpyprobe is a tiny C program whose only purpose is to probe a
2226connectivity of the X server running on a particular @code{DISPLAY}.")
2227 (license license:gpl3+)))
2228
2229(define-public ulauncher
2230 (let ((commit "901ce03beb157ff8fb354558594495eb74c6de7b")
2231 (revision "18"))
2232 (package
2233 (name "ulauncher")
2234 (version (git-version "6.0.0" revision commit))
2235 (source
2236 (origin
2237 (method git-fetch)
2238 (uri (git-reference
2239 (url "https://github.com/Ulauncher/Ulauncher")
2240 (commit commit)))
2241 (file-name (git-file-name name version))
2242 (sha256
2243 (base32 "0qrqpbqrrklfgqr48zafzggrbzns2q6h27nh63skfd9w582nsajg"))))
2244 (build-system pyproject-build-system)
2245 (arguments
2246 (list
2247 #:test-flags
2248 ;; XXX: Most likely require a running X server.
2249 #~(list "--ignore=tests/ui/test_preferences_server.py"
2250 "--ignore=tests/ui/test_result_widget.py")
2251 #:phases
2252 #~(modify-phases %standard-phases
2253 (add-after 'unpack 'fix-libX11
2254 (lambda* (#:key inputs #:allow-other-keys)
2255 (substitute* "ulauncher/utils/xinit.py"
2256 (("libX11.so.6")
2257 (search-input-file inputs "/lib/libX11.so")))))
2258 (add-after 'unpack 'fix-bash
2259 (lambda* (#:key inputs #:allow-other-keys)
2260 (substitute* "tests/modes/shortcuts/test_run_script.py"
2261 (("/bin/bash")
2262 (search-input-file inputs "bin/bash")))))
2263 (add-after 'unpack 'fix-os-release
2264 (lambda _
2265 (define (touch file)
2266 (call-with-output-file file
2267 (const #t)))
2268 (let* ((hard-path "/etc/os-release")
2269 (fixed-path (string-append #$output hard-path)))
2270 ;; Make it relative
2271 ;; Update hardcoded path to something
2272 ;; within the build environment.
2273 (substitute* "ulauncher/utils/environment.py"
2274 ((hard-path)
2275 fixed-path))
2276 ;; Create directory for the dummy file.
2277 (mkdir-p (string-append #$output "/etc"))
2278 (touch fixed-path))))
2279 (add-before 'check 'env-setup
2280 ;; The test require access to home to put temporary files.
2281 (lambda _
2282 (setenv "HOME"
2283 (getcwd)))))))
2284 (native-inputs (list gobject-introspection
2285 intltool
2286 python-mock
2287 python-pytest
2288 python-pytest-mock
2289 python-setuptools
2290 python-wheel))
2291 (inputs (list libx11 python-levenshtein python-pycairo))
2292 (propagated-inputs (list keybinder
2293 libwnck
2294 gsettings-desktop-schemas
2295 python-pygobject
2296 python-xlib
2297 webkitgtk-with-libsoup2))
2298 (home-page "https://ulauncher.io")
2299 (synopsis "Application launcher for Linux")
2300 (description
2301 "Ulauncher is a fast application launcher for Linux. It is written in
2302Python, using GTK+, and features: App Search (fuzzy matching), Calculator,
2303Extensions, Shortcuts, File browser mode and Custom Color Themes.")
2304 (license license:gpl3+))))
2305
2306(define-public rofi
2307 (package
2308 (name "rofi")
2309 (version "2.0.0")
2310 (source (origin
2311 (method url-fetch)
2312 (uri (string-append "https://github.com/davatorium/rofi/"
2313 "releases/download/"
2314 version "/rofi-" version ".tar.xz"))
2315 (sha256
2316 (base32
2317 "13cd39973aahijhcgayq6345snw08sqjk8yf6la9mvw9y4kywmba"))))
2318 (build-system meson-build-system)
2319 (native-inputs
2320 (list bison
2321 check
2322 flex
2323 `(,glib "bin")
2324 pkg-config))
2325 (inputs
2326 (list libjpeg-turbo
2327 (librsvg-for-system)
2328 libxcb
2329 libxkbcommon
2330 startup-notification
2331 wayland
2332 wayland-protocols
2333 xcb-util
2334 xcb-util-cursor
2335 xcb-util-keysyms
2336 xcb-util-wm
2337 xcb-util-xrm))
2338 (propagated-inputs
2339 (list cairo glib pango)) ;in Requires.private of rofi.pc
2340 (native-search-paths
2341 ;; This is where rofi will search for plugins by default.
2342 (list (search-path-specification
2343 (variable "ROFI_PLUGIN_PATH")
2344 (files '("lib/rofi")))))
2345 (arguments
2346 `(#:parallel-tests? #f ; fails in some circumstances
2347 #:phases
2348 (modify-phases %standard-phases
2349 (add-before 'configure 'adjust-tests
2350 (lambda _
2351 (substitute* '("test/helper-expand.c")
2352 (("~root") "/root")
2353 (("~") "")
2354 (("g_get_home_dir\\(\\)") "\"/\"")))))))
2355 (home-page "https://github.com/davatorium/rofi")
2356 (synopsis "Application launcher")
2357 (description "Rofi is a minimalist application launcher. It memorizes which
2358applications you regularly use and also allows you to search for an application
2359by name.")
2360 (license license:expat)))
2361
2362(define-public rofi-calc
2363 (package
2364 (name "rofi-calc")
2365 (version "2.3.0")
2366 (source
2367 (origin
2368 (method git-fetch)
2369 (uri (git-reference
2370 (url "https://github.com/svenstaro/rofi-calc")
2371 (commit (string-append "v" version))))
2372 (file-name (git-file-name name version))
2373 (sha256
2374 (base32
2375 "041i50rbk7cdbrmn43hz4kx4ijdzff4pw1jv2symwfn07z9a6f30"))))
2376 (build-system gnu-build-system)
2377 (arguments
2378 (list
2379 #:phases
2380 #~(modify-phases %standard-phases
2381 ;; Don't try to install directly to rofi, instead install
2382 ;; to lib/rofi to match rofi's search-path ROFI_PLUGIN_PATH.
2383 (add-after 'unpack 'patch-plugindir
2384 (lambda _
2385 (substitute* "Makefile.am"
2386 (("plugindir=\\$\\{rofi_PLUGIN_INSTALL_DIR\\}\\/")
2387 "plugindir=${libdir}/rofi/"))))
2388 (add-after 'unpack 'patch-qalc-path
2389 (lambda* (#:key inputs #:allow-other-keys)
2390 (substitute* "src/calc.c"
2391 (("\"qalc\"")
2392 (string-append "\""
2393 (search-input-file inputs "bin/qalc")
2394 "\""))))))))
2395 (inputs
2396 (list cairo libqalculate rofi))
2397 (native-inputs
2398 (list autoconf automake libtool pkg-config))
2399 (home-page
2400 "https://github.com/svenstaro/rofi-calc")
2401 (synopsis "Do live calculations in rofi with qalc")
2402 (description
2403 "@code{rofi-calc} is a rofi plugin that uses qalculate's @code{qalc} to parse
2404natural language input and provide results.")
2405 (license license:expat)))
2406
2407(define-public tint2
2408 (package
2409 (name "tint2")
2410 (version "17.0.2")
2411 (source (origin
2412 (method git-fetch)
2413 (uri (git-reference
2414 (url (string-append "https://gitlab.com/o9000/" name "/"))
2415 (commit version)))
2416 (file-name (git-file-name name version))
2417 (sha256
2418 (base32
2419 "123apmgs6x2zfv1q57dyl4mwqf0vsw5ndh5jsg6p3fvhr66l1aja"))))
2420 (build-system cmake-build-system)
2421 (arguments
2422 (list
2423 #:tests? #f ; no test target
2424 #:phases
2425 #~(modify-phases %standard-phases ; add missing libm dependency
2426 (add-before 'configure 'fix-tint2conf-link
2427 (lambda _
2428 (substitute* "src/tint2conf/CMakeLists.txt"
2429 (("\\$\\{RSVG_LIBRARIES\\} \\)")
2430 "${RSVG_LIBRARIES} m )")))))))
2431 (inputs
2432 (list gtk+
2433 imlib2
2434 (librsvg-for-system)
2435 libxcomposite
2436 libxdamage
2437 libxft
2438 libxinerama
2439 libxrandr
2440 startup-notification))
2441 (native-inputs
2442 (list gettext-minimal pkg-config))
2443 (home-page "https://gitlab.com/o9000/tint2")
2444 (synopsis "Lightweight task bar")
2445 (description
2446 "Tint2 is a simple task bar made for modern X window managers. It was
2447specifically made for Openbox but it should also work with other window
2448managers (GNOME, KDE, XFCE etc.).
2449
2450The taskbar includes transparency and color settings for the font, icons,
2451border, and background. It also supports multihead setups, customized mouse
2452actions, a built-in clock, a battery monitor and a system tray.")
2453 (license license:gpl2)))
2454
2455(define-public stalonetray
2456 (package
2457 (name "stalonetray")
2458 (version "0.8.5")
2459 (source
2460 (origin
2461 (method git-fetch)
2462 (uri
2463 (git-reference
2464 (url "https://github.com/kolbusa/stalonetray")
2465 (commit (string-append "v" version))))
2466 (file-name (git-file-name name version))
2467 (sha256
2468 (base32
2469 "074wy1xppfycillbxq6fwrq87ik9glc95083df5vgm20mhzni7pz"))))
2470 (arguments
2471 (list
2472 #:phases
2473 #~(modify-phases %standard-phases
2474 (add-after 'unpack 'fix-docbook-root
2475 (lambda _
2476 (substitute* "configure.ac"
2477 (("AC_SUBST\\(DOCBOOK_ROOT\\)" all)
2478 (string-append "DOCBOOK_ROOT="
2479 #$(this-package-native-input "docbook-xsl")
2480 "/xml/xsl/docbook-xsl-"
2481 #$(package-version (this-package-native-input "docbook-xsl"))
2482 "; " all))))))))
2483 (inputs (list libx11 libxpm))
2484 (native-inputs (list autoconf automake docbook-xsl libxslt))
2485 (build-system gnu-build-system)
2486 (home-page "https://kolbusa.github.io/stalonetray")
2487 (synopsis "Standalone freedesktop.org and KDE systray implementation")
2488 (description
2489 "Stalonetray is a stand-alone freedesktop.org and KDE system
2490tray (notification area) for X Window System/X11 (e.g. X.Org or XFree86). It
2491has full XEMBED support and minimal dependencies: an X11 lib only. Stalonetray
2492works with virtually any EWMH-compliant window manager.")
2493 (license license:gpl2+)))
2494
2495(define-public tofi
2496 (package
2497 (name "tofi")
2498 (version "0.9.1")
2499 (source (origin
2500 (method git-fetch)
2501 (uri (git-reference
2502 (url "https://github.com/philj56/tofi")
2503 (commit (string-append "v" version))))
2504 (file-name (git-file-name name version))
2505 (sha256
2506 (base32
2507 "1paknsgfsgan27lqwhb2ndsk4gi8ciq9r49b0fpbbdwxk7ljk2cn"))
2508 (patches (search-patches "tofi-32bit-compat.patch"))))
2509 (build-system meson-build-system)
2510 (native-inputs (list pkg-config scdoc))
2511 (inputs (list cairo
2512 harfbuzz
2513 libxkbcommon
2514 pango
2515 wayland
2516 wayland-protocols))
2517 (home-page "https://github.com/philj56/tofi")
2518 (synopsis "Application launcher for Wayland")
2519 (description
2520 "Tofi is a Dmenu and Rofi replacement for wlroots-based Wayland
2521compositors such as Sway.")
2522 (license license:expat)))
2523
2524(define-public dzen
2525 (let ((commit "488ab66019f475e35e067646621827c18a879ba1")
2526 (revision "1"))
2527 (package
2528 (name "dzen")
2529 (version (string-append "0.9.5-" ; Taken from `config.mk`.
2530 revision "." (string-take commit 7)))
2531 (source (origin
2532 (method git-fetch)
2533 (uri (git-reference
2534 (url "https://github.com/robm/dzen")
2535 (commit commit)))
2536 (file-name (string-append name "-" version))
2537 (sha256
2538 (base32
2539 "0y47d6ii87vf4a517gi4fh0yl06f8b085sra77immnsasbq9pxnw"))))
2540 (build-system gnu-build-system)
2541 (arguments
2542 `(#:tests? #f ; No test suite.
2543 #:make-flags ; Replacement for `config.mk`.
2544 (list
2545 (string-append "VERSION = " ,version)
2546 (string-append "PREFIX = " %output)
2547 "MANPREFIX = ${PREFIX}/share/man"
2548 "INCS = -I."
2549 "LIBS = -lc -lX11 -lXinerama -lXpm $(shell pkg-config --libs xft)"
2550 "CFLAGS = -Wall -Os ${INCS} -DVERSION=\\\"${VERSION}\\\"\
2551 -DDZEN_XINERAMA -DDZEN_XPM -DDZEN_XFT $(shell pkg-config --cflags xft)"
2552 "LDFLAGS = ${LIBS}"
2553 "CC = gcc"
2554 "LD = ${CC}")
2555 #:phases
2556 (modify-phases %standard-phases
2557 (delete 'configure) ; No configuration script.
2558 ;; Use own make-flags instead of `config.mk`.
2559 (add-before 'build 'dont-include-config-mk
2560 (lambda _
2561 (substitute* "Makefile" (("include config.mk") ""))
2562 #t)))))
2563 (inputs
2564 (list libx11 libxft libxpm libxinerama))
2565 (native-inputs (list pkg-config))
2566 (synopsis "General purpose messaging, notification and menuing program for X11")
2567 (description "Dzen is a general purpose messaging, notification and menuing
2568program for X11. It was designed to be fast, tiny and scriptable in any language.")
2569 (home-page "https://github.com/robm/dzen")
2570 (license license:expat))))
2571
2572(define-public xftwidth
2573 (package
2574 (name "xftwidth")
2575 (version "20170402")
2576 (source
2577 (origin
2578 (method git-fetch)
2579 (uri (git-reference
2580 (url "http://github.com/vixus0/xftwidth")
2581 (commit "35ff963908d41a8a6a7101c434c88255728025ee")))
2582 (sha256
2583 (base32
2584 "1jwl25785li24kbp0m1wxfwk4dgxkliynn03nsj813cjr34kq16h"))
2585 (file-name (string-append name "-" version "-checkout"))))
2586 (build-system gnu-build-system)
2587 (inputs `(("freetype" ,freetype)
2588 ("libx11" ,libx11)
2589 ("fontconfig" ,fontconfig)
2590 ("libxft" ,libxft)))
2591 (native-inputs
2592 (list pkg-config))
2593 (arguments
2594 '(#:phases
2595 (modify-phases %standard-phases
2596 (add-after 'unpack 'fix-makefile ; /usr/bin doesn't show up in PATH
2597 (lambda _ (substitute* "Makefile" (("usr/") "")) #t))
2598 (delete 'check) ; no check included in Makefile
2599 (delete 'configure))
2600 #:make-flags
2601 (let ((out (assoc-ref %outputs "out")))
2602 (list (string-append "DESTDIR=" out)))))
2603 (home-page "https://github.com/vixus0/xftwidth")
2604 (synopsis "Calculator for determining pixel widths of displayed text using Xft fonts")
2605 (description "xftwidth is a small C program for calculating the pixel
2606widths of displayed text using Xft fonts. It is especially useful in scripts
2607for displaying text in graphical panels, menus, popups, and notification
2608windows generated using dzen. These scripts are often used in conjunction
2609with minimalistic tiling window managers such as herbstluftwm and bspwm.")
2610 (license license:expat)))
2611
2612(define-public xcb-util-xrm
2613 (package
2614 (name "xcb-util-xrm")
2615 (version "1.3")
2616 (source (origin
2617 (method url-fetch)
2618 (uri (string-append
2619 "https://github.com/Airblader/xcb-util-xrm/releases"
2620 "/download/v" version "/xcb-util-xrm-" version ".tar.bz2"))
2621 (sha256
2622 (base32
2623 "118cj1ybw86pgw0l5whn9vbg5n5b0ijcpx295mwahzi004vz671h"))
2624 (modules '((guix build utils)))
2625 (snippet
2626 ;; Drop bundled m4.
2627 '(begin
2628 (delete-file-recursively "m4")
2629 #t))))
2630 (build-system gnu-build-system)
2631 (native-inputs
2632 (list pkg-config m4 libx11)) ; for tests
2633 (inputs
2634 (list libxcb xcb-util libx11))
2635 (home-page "https://github.com/Airblader/xcb-util-xrm")
2636 (synopsis "XCB utility functions for the X resource manager")
2637 (description
2638 "The XCB util module provides a number of libraries which sit on
2639top of libxcb, the core X protocol library, and some of the extension
2640libraries. These experimental libraries provide convenience functions
2641and interfaces which make the raw X protocol more usable. Some of the
2642libraries also provide client-side code which is not strictly part of
2643the X protocol but which has traditionally been provided by Xlib.
2644
2645XCB util-xrm module provides the following libraries:
2646
2647- xrm: utility functions for the X resource manager.")
2648 (license license:x11)))
2649
2650(define-public xcalib
2651 (package
2652 (name "xcalib")
2653 (version "0.10")
2654 (home-page "https://github.com/OpenICC/xcalib")
2655 (source (origin
2656 (method git-fetch)
2657 (uri (git-reference
2658 (url home-page)
2659 (commit version)))
2660 (file-name (git-file-name name version))
2661 (sha256
2662 (base32
2663 "05fzdjmhiafgi2jf0k41i3nm0837a78sb6yv59cwc23nla8g0bhr"))
2664 (patches
2665 (list
2666 ;; Add missing documentation for the new --output option.
2667 ;; This upstream patch can be removed on the next update.
2668 (origin
2669 (method url-fetch)
2670 (uri (string-append
2671 home-page "/commit/"
2672 "ae03889b91fe984b18e925ad2b5e6f2f7354e058.patch"))
2673 (file-name "xcalib-update-man-page.patch")
2674 (sha256
2675 (base32
2676 "0f7b4d5484x4b9n1bwhqmar0kcaa029ffff7bp3xpr734n1qgqb6")))))))
2677 (build-system cmake-build-system)
2678 (arguments
2679 '(#:tests? #f)) ; no test suite
2680 (inputs (list libx11 libxext libxrandr libxxf86vm))
2681 (synopsis "Tiny monitor calibration loader for XFree86 (or X.org)")
2682 (description "xcalib is a tiny tool to load the content of vcgt-Tags in ICC
2683profiles to the video card's gamma ramp. It does work with most video card
2684drivers except the generic VESA driver. Alter brightness, contrast, RGB, and
2685invert colors on a specific display/screen.")
2686 (license license:gpl2)))
2687
2688(define-public nxbelld
2689 (package
2690 (name "nxbelld")
2691 (version "0.1.2")
2692 (source (origin
2693 (method git-fetch)
2694 (uri (git-reference
2695 (url "https://github.com/dusxmt/nxbelld")
2696 (commit version)))
2697 (sha256
2698 (base32
2699 "04qwhmjs51irinz5mjlxdb3dc6vr79dqmc5fkj80x1ll3ylh5n3z"))
2700 (file-name (git-file-name name version))))
2701 (build-system gnu-build-system)
2702 (arguments '(#:configure-flags `("--enable-sound"
2703 "--enable-wave"
2704 "--enable-alsa")))
2705 (native-inputs (list autoconf automake pkg-config perl))
2706 (inputs (list libx11 alsa-lib))
2707 (synopsis "Daemon that performs an action every time the X11 bell is rung")
2708 (description "nxbelld is a tiny utility to aid people who either don't
2709like the default PC speaker beep, or use a sound driver that doesn't have
2710support for the PC speaker. The utility performs a given action every time
2711the X bell is rung. The actions nxbelld can currently perform include running
2712a specified program, emulating the PC speaker beep using the sound card (default),
2713or playing a PCM encoded WAVE file.")
2714 (home-page "https://github.com/dusxmt/nxbelld")
2715 (license license:gpl3+)))
2716
2717(define-public xautolock
2718 (package
2719 (name "xautolock")
2720 (version "2.2")
2721 (source (origin
2722 (method url-fetch)
2723 (uri (string-append "https://www.ibiblio.org/pub/linux/X11/"
2724 "screensavers/xautolock-" version ".tgz"))
2725 (sha256
2726 (base32
2727 "18jd3k3pvlm5x1adyqw63z2b3f4ixh9mfvz9asvnskk3fm8jgw0i"))))
2728 (build-system gnu-build-system)
2729 (native-inputs
2730 (list imake))
2731 (inputs
2732 (list libx11 libxext libxscrnsaver))
2733 (arguments
2734 `(#:tests? #f
2735 #:phases
2736 (modify-phases %standard-phases
2737 (replace 'configure
2738 (lambda* (#:key inputs outputs #:allow-other-keys)
2739 (let ((imake (assoc-ref inputs "imake"))
2740 (out (assoc-ref outputs "out")))
2741 ;; Generate Makefile
2742 (invoke "xmkmf")
2743 (substitute* "Makefile"
2744 ;; These imake variables somehow remain undefined
2745 (("DefaultGcc2[[:graph:]]*Opt") "-O2")
2746 ;; Reset a few variable defaults that are set in imake templates
2747 ((imake) out)
2748 (("(MANPATH = )[[:graph:]]*" _ front)
2749 (string-append front out "/share/man")))
2750 ;; Old BSD-style 'union wait' is unneeded (defining
2751 ;; _USE_BSD did not seem to fix it)
2752 (substitute* "src/engine.c"
2753 (("union wait status") "int status = 0"))
2754 #t)))
2755 (add-after 'install 'install/man
2756 (lambda _
2757 (invoke "make" "install.man"))))))
2758 (home-page "https://ibiblio.org/pub/Linux/X11/screensavers/")
2759 (synopsis "Program launcher for idle X sessions")
2760 (description "Xautolock monitors input devices under the X Window
2761System, and launches a program of your choice if there is no activity after
2762a user-configurable period of time.")
2763 (license license:gpl2)))
2764
2765(define-public screen-message
2766 (package
2767 (name "screen-message")
2768 (version "0.26")
2769 (source (origin
2770 (method url-fetch)
2771 (uri (string-append
2772 "https://www.joachim-breitner.de/archive/screen-message"
2773 "/screen-message-" version ".tar.gz"))
2774 (sha256
2775 (base32
2776 "0dwgm4z3dfk6xz41w8xiv0hmnwr74gf3ykb91b090hc4ffwsf4mw"))))
2777 (build-system gnu-build-system)
2778 (inputs `(("gtk3" ,gtk+)
2779 ("gdk" ,gdk-pixbuf)
2780 ("pango" ,pango)))
2781 (native-inputs (list pkg-config))
2782 (arguments
2783 ;; The default configure puts the 'sm' binary in games/ instead of bin/ -
2784 ;; this fixes it:
2785 `(#:make-flags (list (string-append "execgamesdir=" %output "/bin"))))
2786 (synopsis "Print messages on your screen")
2787 (description "@code{screen-message} is a tool for displaying text on
2788your screen. It will make the text as large as possible and display it
2789with black color on a white background (colors are configurable on the
2790commandline).")
2791 (home-page "https://www.joachim-breitner.de/projects#screen-message")
2792 (license license:gpl2+)))
2793
2794(define-public xss-lock
2795 ;; xss-lock does not seem to be maintained any longer, but the last commits
2796 ;; fix important issues so we package them.
2797 (let ((version "0.3.0")
2798 (revision "1")
2799 (commit "1e158fb20108058dbd62bd51d8e8c003c0a48717"))
2800 (package
2801 (name "xss-lock")
2802 (version (git-version version revision commit))
2803 (source (origin
2804 (method git-fetch)
2805 (uri (git-reference
2806 (url "https://bitbucket.org/raymonad/xss-lock.git")
2807 (commit commit)))
2808 (file-name (git-file-name name version))
2809 (sha256
2810 (base32
2811 "10hx7k7ga8g08akwz8qrsvj8iqr5nd4siiva6sjx789jvf0sak7r"))))
2812 (build-system cmake-build-system)
2813 (inputs (list glib xcb-util))
2814 (native-inputs
2815 (list python-docutils pkg-config))
2816 (arguments
2817 `(#:tests? #f))
2818 (synopsis "Use external screen locker on events")
2819 (description "@code{xss-lock} listens to X signals to fire up a
2820user-defined screensaver. In effect this automatically locks the
2821screen when closing a laptop lid or after a period of user inactivity (as set
2822with @code{xset s TIMEOUT}). The notifier command, if specified, is executed
2823first. Additionally, xss-lock uses the inhibition logic to lock the screen
2824before the system goes to sleep.")
2825 (home-page "https://bitbucket.org/raymonad/xss-lock")
2826 (license license:expat))))
2827
2828(define-public physlock
2829 (package
2830 (name "physlock")
2831 (version "13")
2832 (source (origin
2833 (method git-fetch)
2834 (uri (git-reference
2835 (url "https://github.com/xyb3rt/physlock")
2836 (commit (string-append "v" version))))
2837 (file-name (git-file-name name version))
2838 (sha256
2839 (base32
2840 "1mz4xxjip5ldiw9jgfq9zvqb6w10bcjfx6939w1appqg8f521a7s"))))
2841 (build-system gnu-build-system)
2842 (arguments
2843 (list #:tests? #f ;no tests
2844 #:phases
2845 #~(modify-phases %standard-phases
2846 (delete 'configure)
2847
2848 (add-after 'unpack 'fix-makefile
2849 (lambda _
2850 (substitute* "main.c" ; remove extra newline in the prompt
2851 (("(fprintf.vt.ios, .%s.)\\n(., options->prompt)" all start end)
2852 (string-append start end)))
2853 (substitute* "Makefile" (("-m 4755 -o root -g root") "")))))
2854
2855 #:make-flags
2856 #~(list "HAVE_SYSTEMD=0" "HAVE_ELOGIND=1"
2857 (string-append "CC=" #$(cc-for-target))
2858 (string-append "PREFIX=" #$output))))
2859 (native-inputs (list linux-pam elogind))
2860 (synopsis "Screen lock utility")
2861 (description
2862 "@command{physlock} locks all virtual terminals at once, only allowing the
2863user of the active session (the user logged into the foreground virtual
2864terminal) to unlock the computer. It is an alternative to @command{vlock -an},
2865written to overcome vlock's limitations regarding hibernate and suspend.")
2866 (home-page "https://github.com/xyb3rt/physlock")
2867 (license license:gpl2+)))
2868
2869(define-public python-pyclip
2870 (package
2871 (name "python-pyclip")
2872 (version "0.7.0")
2873 (source
2874 (origin
2875 (method git-fetch)
2876 (uri (git-reference
2877 (url "https://github.com/spyoungtech/pyclip")
2878 (commit (string-append "v" version))))
2879 (file-name (git-file-name name version))
2880 (sha256
2881 (base32 "10q698snlid09jmlvsqlljj2r0w6cixncjcgbhnjqp7w0hva8wyj"))))
2882 (build-system pyproject-build-system)
2883 (arguments
2884 (list
2885 #:phases
2886 #~(modify-phases %standard-phases
2887 (add-before 'check 'start-xorg-server
2888 (lambda _
2889 (system "Xvfb :1 &")
2890 (setenv "DISPLAY" ":1"))))))
2891 (native-inputs
2892 (list python-pytest
2893 python-setuptools
2894 python-wheel
2895 xorg-server-for-tests))
2896 (propagated-inputs
2897 (list wl-clipboard
2898 xclip))
2899 (home-page "https://github.com/spyoungtech/pyclip")
2900 (synopsis "Cross-platform clipboard module for Python")
2901 (description
2902 "This library implements cross-platform clipboard utilities supporting
2903both binary and text data.")
2904 (license license:asl2.0)))
2905
2906(define-public python-pyperclip
2907 (package
2908 (name "python-pyperclip")
2909 (version "1.9.0")
2910 (source
2911 (origin
2912 (method url-fetch)
2913 (uri (pypi-uri "pyperclip" version))
2914 (sha256
2915 (base32 "046k4wjmwjprra363fa8nm925f90m6fs3vh7fmfgq6y8vm103pmp"))))
2916 (build-system pyproject-build-system)
2917 (arguments
2918 '(#:tests? #f)) ; Not clear how to make tests pass.
2919 (native-inputs
2920 (list python-setuptools))
2921 (inputs
2922 (list xclip xsel))
2923 (home-page "https://github.com/asweigart/pyperclip")
2924 (synopsis "Python clipboard module")
2925 (description
2926 "Pyperclip is a clipboard module for Python, handling copy/pasting from
2927the X11 clipboard")
2928 (license license:bsd-3)))
2929
2930(define-public python-wmctrl
2931 (package
2932 (name "python-wmctrl")
2933 (version "0.5")
2934 (source
2935 (origin
2936 (method url-fetch)
2937 (uri (pypi-uri "wmctrl" version))
2938 (sha256
2939 (base32 "0qp9adzsabcbjgm864m4dc8x5knvfb1mskih4byxdqp9dxms6fbq"))))
2940 (build-system pyproject-build-system)
2941 (arguments
2942 (list
2943 #:tests? #f ;XXX: all tests fail, require some set up
2944 #:phases
2945 #~(modify-phases %standard-phases
2946 (add-after 'unpack 'patch-paths
2947 (lambda _
2948 (substitute* "wmctrl.py"
2949 (("'wmctrl")
2950 (string-append "'" #$(this-package-input "wmctrl")
2951 "/bin/wmctrl"))))))))
2952 (native-inputs
2953 (list python-setuptools))
2954 (inputs
2955 (list wmctrl))
2956 (propagated-inputs
2957 (list python-attrs))
2958 (home-page "https://github.com/antocuni/wmctrl")
2959 (synopsis "Tool to programmatically control Xorg windows")
2960 (description
2961 "This package provides a library for programmatically controlling Xorg
2962windows using Python. The library relies on the @command{wmctrl} to do so.")
2963 (license license:expat)))
2964
2965(define-public python-xdo
2966 (package
2967 (name "python-xdo")
2968 (version "0.5")
2969 (source (origin
2970 (method url-fetch)
2971 (uri (string-append
2972 "http://deb.debian.org/debian/pool/main/p/python-xdo/"
2973 "python-xdo_" version ".orig.tar.gz"))
2974 (sha256
2975 (base32
2976 "109fm7crafkjwbnx6k01vy8xiyisgadi6fln4w0yc9s8b4ifb3qc"))))
2977 (build-system pyproject-build-system)
2978 (arguments
2979 (list
2980 #:tests? #f ; no tests provided
2981 #:phases
2982 #~(modify-phases %standard-phases
2983 (add-after 'unpack 'patch-libxdo-path
2984 ;; Hardcode the path of dynamically loaded libxdo library.
2985 (lambda* (#:key inputs #:allow-other-keys)
2986 (let ((libxdo (string-append
2987 (assoc-ref inputs "xdotool")
2988 "/lib/libxdo.so"))
2989 (libc (string-append
2990 (assoc-ref inputs "libc")
2991 "/lib/libc.so.6")))
2992 (substitute* "xdo/_xdo.py"
2993 (("find_library\\(\"xdo\"\\)")
2994 (simple-format #f "\"~a\"" libxdo))
2995 (("ctypes\\.util\\.find_library\\('libc'\\)")
2996 (simple-format #f "\"~a\"" libc)))))))))
2997 (native-inputs
2998 (list python-setuptools))
2999 (inputs
3000 (list xdotool
3001 libx11))
3002 (home-page "https://tracker.debian.org/pkg/python-xdo")
3003 (synopsis "Python library for simulating X11 keyboard/mouse input")
3004 (description "Provides bindings to libxdo for manipulating X11 via simulated
3005input. (Note that this is mostly a legacy library; you may wish to look at
3006python-xdo for newer bindings.)")
3007 (license license:bsd-3)))
3008
3009(define-public numlockx
3010 (package
3011 (name "numlockx")
3012 (version "1.2")
3013 (source (origin
3014 (method git-fetch)
3015 (uri (git-reference
3016 ;; It seems that upstream is gone.
3017 (url "https://github.com/rg3/numlockx")
3018 (commit version)))
3019 (file-name (git-file-name name version))
3020 (sha256
3021 (base32
3022 "1w49fayhwzn5rx0z1q2lrvm7z8jrd34lgb89p853a024bixc3cf2"))))
3023 (build-system gnu-build-system)
3024 (inputs
3025 (list xorg-server))
3026 (home-page "https://github.com/rg3/numlockx")
3027 (synopsis "Turns on the numlock key in X11")
3028 (description "@command{numlockx} is a tiny program that lets you turn on
3029the numlock key in X11. It can be called from the user's initialization files
3030to automatically turn it on on login.")
3031 (license license:expat)))
3032
3033(define-public xrandr-invert-colors
3034 (package
3035 (name "xrandr-invert-colors")
3036 (version "0.02")
3037 (source (origin
3038 (method git-fetch)
3039 (uri (git-reference
3040 (url "https://github.com/zoltanp/xrandr-invert-colors")
3041 (commit (string-append "v" version))))
3042 (file-name (git-file-name name version))
3043 (sha256
3044 (base32
3045 "0gk1fgxb2kjyr78xn8m0ckjdic99ras7msa67piwnhj3j4scg1ih"))))
3046 (build-system gnu-build-system)
3047 (arguments
3048 `(#:make-flags (list ,(string-append "CC=" (cc-for-target)))
3049 #:tests? #f ; there are none
3050 #:phases
3051 (modify-phases %standard-phases
3052 (delete 'configure)
3053 (replace 'install
3054 ;; It's simpler to install the single binary ourselves than to patch
3055 ;; the Makefile's install target into working.
3056 (lambda* (#:key outputs #:allow-other-keys)
3057 (let* ((out (assoc-ref outputs "out"))
3058 (bin (string-append out "/bin")))
3059 (mkdir-p bin)
3060 (copy-file "xrandr-invert-colors.bin"
3061 (string-append bin "/xrandr-invert-colors"))))))))
3062 (inputs
3063 (list libxrandr))
3064 (home-page "https://github.com/zoltanp/xrandr-invert-colors")
3065 (synopsis "Invert display colors")
3066 (description "This package provides a small utility for inverting the
3067colors on all monitors attached to an XRandR-capable X11 display server.")
3068 (license license:gpl3+)))
3069
3070(define-public sct
3071 (package
3072 (name "sct")
3073 (version "0.5")
3074 (source
3075 (origin
3076 (method url-fetch)
3077 (uri
3078 (string-append "https://www.umaxx.net/dl/sct-"
3079 version ".tar.gz"))
3080 (sha256
3081 (base32 "0lrhx771iccbw04wrhj0ygids1pzmjfc4hvklm30m3p3flvhqf0m"))))
3082 (build-system gnu-build-system)
3083 (arguments
3084 `(#:make-flags
3085 (list ,(string-append "CC=" (cc-for-target)))
3086 #:tests? #f ; no test suite
3087 #:phases
3088 (modify-phases %standard-phases
3089 (delete 'configure)
3090 (add-after 'unpack 'fix-sctd-paths
3091 (lambda* (#:key outputs inputs #:allow-other-keys)
3092 (let ((out (assoc-ref outputs "out"))
3093 (coreutils (assoc-ref inputs "coreutils"))
3094 (inetutils (assoc-ref inputs "inetutils"))
3095 (sed (assoc-ref inputs "sed")))
3096 (substitute* "sctd.sh"
3097 (("\\$\\(which sct\\)") (string-append out "/bin/sct"))
3098 (("date") (string-append coreutils "/bin/date"))
3099 (("printf") (string-append coreutils "/bin/printf"))
3100 (("sleep") (string-append coreutils "/bin/sleep"))
3101 (("logger") (string-append inetutils "/bin/logger"))
3102 (("sed") (string-append sed "/bin/sed"))))))
3103 (replace 'install
3104 (lambda* (#:key outputs #:allow-other-keys)
3105 (let ((out (assoc-ref outputs "out")))
3106 (install-file "sct" (string-append out "/bin"))
3107 (install-file "sctd.sh" (string-append out "/bin"))
3108 (install-file "sct.1" (string-append out "/man/man1"))
3109 (install-file "sctd.1" (string-append out "/man/man1"))
3110 (rename-file (string-append out "/bin/sctd.sh")
3111 (string-append out "/bin/sctd"))
3112 #t))))))
3113 (inputs
3114 (list coreutils ; sctd uses "date", "printf" and "sleep"
3115 inetutils ; sctd uses "logger"
3116 libxrandr
3117 sed)) ; sctd uses "sed"
3118 (home-page "https://www.umaxx.net")
3119 (synopsis "Set the color temperature of the screen")
3120 (description "@code{sct} is a lightweight utility to set the color
3121temperature of the screen.")
3122 (license (license:non-copyleft "file://sct.c")))) ; "OpenBSD" license
3123
3124(define-public xsecurelock
3125 (package
3126 (name "xsecurelock")
3127 (version "1.9.0")
3128 (source (origin
3129 (method git-fetch)
3130 (uri (git-reference
3131 (url "https://github.com/google/xsecurelock")
3132 (commit (string-append "v" version))))
3133 (sha256
3134 (base32
3135 "0knafjzdzxjh2b1mrrxbcqvg76ia6vazv8shklb6ggp6kj5srxiq"))))
3136 (build-system gnu-build-system)
3137 (arguments
3138 (list
3139 #:make-flags
3140 #~(list (string-append "GIT_VERSION=v" #$(package-version this-package)))
3141 #:configure-flags
3142 #~(list
3143 "--with-pam-service-name=login"
3144 "--with-xkb"
3145 "--with-default-authproto-module=/run/privileged/bin/authproto_pam"
3146 (string-append "--with-mpv="
3147 #$(this-package-input "mpv") "/bin/mpv")
3148 (string-append "--with-xscreensaver="
3149 #$(this-package-input "xscreensaver")
3150 "/libexec/xscreensaver"))
3151 #:phases
3152 #~(modify-phases %standard-phases
3153 (add-after 'unpack 'patch-paths
3154 (lambda* (#:key inputs #:allow-other-keys)
3155 (substitute* "helpers/saver_xscreensaver.in"
3156 (("xrdb") (search-input-file inputs "bin/xrdb"))))))))
3157 (native-inputs
3158 (list autoconf automake pandoc pkg-config))
3159 (inputs
3160 (list fontconfig
3161 libx11
3162 libxcomposite
3163 libxext
3164 libxfixes
3165 libxft
3166 libxmu
3167 libxrandr
3168 libxscrnsaver
3169 linux-pam
3170 mpv
3171 xscreensaver
3172 xrdb))
3173 (home-page "https://github.com/google/xsecurelock")
3174 (synopsis "X11 screen lock utility with the primary goal of security")
3175 (description
3176 "@code{xsecurelock} is an X11 screen locker which uses a modular design
3177to avoid the usual pitfalls of screen locking utility design.
3178
3179As a consequence of this design, you shouldn't use the usual screen locker
3180service with @code{xsecurelock}. Instead, add a helper binary to your
3181@code{operating-system}'s @code{privileged-programs} field:
3182
3183@example
3184(privileged-programs
3185 (cons*
3186 (privileged-program
3187 (program (file-append xsecurelock \"/libexec/xsecurelock/authproto_pam\"))
3188 (setuid? #t))
3189 %default-privileged-programs))
3190@end example")
3191 (license license:asl2.0)))
3192
3193(define-public gtk-session-lock
3194 (package
3195 (name "gtk-session-lock")
3196 (version "0.2.0")
3197 (source (origin
3198 (method git-fetch)
3199 (uri (git-reference
3200 (url "https://github.com/Cu3PO42/gtk-session-lock")
3201 (commit (string-append "v" version))))
3202 (sha256
3203 (base32 "0a1y0b05ka136ldd5rs5k719hnj8bx5fkm8z8hl4zgsycxi80wj8"))
3204 (file-name (git-file-name name version))))
3205 (build-system meson-build-system)
3206 (arguments
3207 (list #:glib-or-gtk? #t
3208 #:tests? #f ; tests require more dependencies
3209 #:configure-flags #~(list "-Dtests=false")))
3210 (inputs
3211 (list gtk+ wayland vala))
3212 (native-inputs
3213 (list pkg-config gobject-introspection))
3214 (home-page "https://github.com/Cu3PO42/gtk-session-lock")
3215 (synopsis "GTK Session Lock library for GTK3")
3216 (description "@code{gtk-session-lock} is a fork of @code{gtk-layer-shell} to
3217build screen lockers using the secure @code{ext-session-lock-v1} protocol. This
3218library is compatible with C, C++ and any language that supports GObject
3219introspection files (Python, Vala, etc, see using the library below).")
3220 (license (list license:gpl3
3221 license:expat))))
3222
3223(define-public wl-color-picker
3224 (package
3225 (name "wl-color-picker")
3226 (version "1.4")
3227 (home-page "https://github.com/jgmdev/wl-color-picker")
3228 (source (origin
3229 (method git-fetch)
3230 (uri (git-reference
3231 (url home-page)
3232 (commit (string-append "v" version))))
3233 (file-name (git-file-name name version))
3234 (sha256
3235 (base32
3236 "0z0pmfk99zicny9308zf4b4aygrb6r6c6zc8296l080zjhxiwkmv"))))
3237 (build-system copy-build-system)
3238 (arguments
3239 `(#:install-plan '(("wl-color-picker.sh" "bin/wl-color-picker")
3240 ("wl-color-picker.png" "share/pixmaps/")
3241 ("wl-color-picker.svg"
3242 "share/icons/hicolor/scalable/apps/")
3243 ("wl-color-picker.desktop" "share/applications/"))
3244 #:phases (modify-phases %standard-phases
3245 (add-after 'install 'wrap-program
3246 (lambda* (#:key outputs #:allow-other-keys)
3247 (wrap-program (string-append (assoc-ref outputs "out")
3248 "/bin/wl-color-picker")
3249 `("PATH" =
3250 (,(dirname (which "convert"))
3251 ,(dirname (which "cut"))
3252 ,(dirname (which "grep"))
3253 ,(dirname (which "grim"))
3254 ,(dirname (which "notify-send"))
3255 ,(dirname (which "slurp"))
3256 ,(dirname (which "wl-copy"))
3257 ,(dirname (which "zenity"))))))))))
3258 (inputs (list bash-minimal
3259 coreutils-minimal
3260 grim
3261 hicolor-icon-theme
3262 imagemagick
3263 libnotify
3264 slurp
3265 wl-clipboard
3266 zenity))
3267 (synopsis "Wayland color picker")
3268 (description
3269 "@command{wl-color-picker} is a script that provides color picker for
3270Wayland and @code{wlroots} by leveraging @command{grim} and @command{slurp}.")
3271 (license license:expat)))
3272
3273(define-public wl-clipboard
3274 (package
3275 (name "wl-clipboard")
3276 (version "2.3.0")
3277 (source
3278 (origin
3279 (method git-fetch)
3280 (uri (git-reference
3281 (url "https://github.com/bugaevc/wl-clipboard")
3282 (commit (string-append "v" version))))
3283 (file-name (git-file-name name version))
3284 (sha256
3285 (base32 "0rrh7nyyavl2g6g1p61c0z3sjj35garmi5flg4ig67rqn271zwbk"))))
3286 (build-system meson-build-system)
3287 (arguments
3288 (list #:configure-flags
3289 #~(list (string-append "-Dfishcompletiondir=" #$output
3290 "/share/fish/vendor_completions.d"))
3291 #:phases
3292 #~(modify-phases %standard-phases
3293 (add-after 'unpack 'patch-file-names
3294 (lambda* (#:key inputs #:allow-other-keys)
3295 (substitute* (find-files "src" "\\.c$")
3296 (("\"(cat)\"" _ command)
3297 (string-append "\"" (assoc-ref inputs "coreutils")
3298 "/bin/" command "\""))
3299 (("\"xdg-mime\"")
3300 (string-append "\"" (assoc-ref inputs "xdg-utils")
3301 "/bin/xdg-mime\""))))))))
3302 (native-inputs
3303 (list pkg-config))
3304 (inputs
3305 (list coreutils wayland wayland-protocols xdg-utils))
3306 (home-page "https://github.com/bugaevc/wl-clipboard")
3307 (synopsis "Command-line copy/paste utilities for Wayland")
3308 (description "Wl-clipboard is a set of command-line copy/paste utilities for
3309Wayland.")
3310 (license license:gpl3+)))
3311
3312(define-public wl-clipboard-x11
3313 (package
3314 (name "wl-clipboard-x11")
3315 (version "5")
3316 (source
3317 (origin
3318 (method git-fetch)
3319 (uri (git-reference
3320 (url "https://github.com/brunelli/wl-clipboard-x11")
3321 (commit (string-append "v" version))))
3322 (file-name (git-file-name name version))
3323 (sha256
3324 (base32 "1y7jv7rps0sdzmm859wn2l8q4pg2x35smcrm7mbfxn5vrga0bslb"))))
3325 (build-system copy-build-system)
3326 (arguments
3327 `(#:install-plan
3328 '(("src/" "bin/")
3329 ("man/" "man/man1"))
3330 #:phases
3331 (modify-phases %standard-phases
3332 (add-after 'install 'wrap-binary
3333 (lambda* (#:key inputs outputs #:allow-other-keys)
3334 (let ((out (assoc-ref outputs "out"))
3335 (wl-clipboard (assoc-ref inputs "wl-clipboard")))
3336 (wrap-program (string-append out "/bin/wl-clipboard-x11")
3337 `("PATH" prefix (,(string-append wl-clipboard "/bin")))))))
3338 (add-after 'wrap-binary 'symlink-utilities
3339 ;; As seen in the Makefile.
3340 (lambda* (#:key outputs #:allow-other-keys)
3341 (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
3342 (symlink "wl-clipboard-x11" (string-append bin "xclip"))
3343 (symlink "wl-clipboard-x11" (string-append bin "xsel"))))))))
3344 (inputs
3345 (list bash-minimal wl-clipboard))
3346 (home-page "https://github.com/brunelli/wl-clipboard-x11")
3347 (synopsis "Use wl-clipboard as a drop-in replacement to X11 clipboard tools")
3348 (description "This package provides a wrapper script around
3349@code{x11-clipboard} to use it as a clipboard on X11 also. It also contains
3350helper scripts for @code{xclip} and @code{xsel} to assist with the transition.")
3351 (license license:gpl3+)))
3352
3353(define-public wl-kbptr
3354 (package
3355 (name "wl-kbptr")
3356 (version "0.4.1")
3357 (source
3358 (origin
3359 (method git-fetch)
3360 (uri (git-reference
3361 (url "https://github.com/moverest/wl-kbptr")
3362 (commit (string-append "v" version))))
3363 (file-name (git-file-name name version))
3364 (sha256
3365 (base32 "0fqgv4fbr7asf9chjk4wwbmqjgr6i8diac08vag122h934ph4hb7"))))
3366 (build-system meson-build-system)
3367 (arguments (list #:configure-flags #~'("-Dopencv=enabled")))
3368 (native-inputs (list pkg-config))
3369 (inputs (list gtk
3370 libxkbcommon
3371 opencv
3372 pixman
3373 wayland
3374 wayland-protocols))
3375 (home-page "https://github.com/moverest/wl-kbptr")
3376 (synopsis "Control the mouse pointer with the keyboard on Wayland")
3377 (description
3378 "This package provides a utility called @code{wl-kbptr} short for
3379Wayland Keyboard Pointer, to help move the mouse pointer with the
3380keyboard on Wayland.")
3381 (license license:gpl3+)))
3382
3383(define-public autocutsel
3384 (package
3385 (name "autocutsel")
3386 (version "0.10.1")
3387 (source (origin
3388 (method url-fetch)
3389 (uri (string-append "https://github.com/sigmike/autocutsel"
3390 "/releases/download/" version "/"
3391 "autocutsel-" version ".tar.gz"))
3392 (sha256
3393 (base32
3394 "05zb85imp42birvrc320q20r98qddc5vxx169dnl753l5za0czpi"))))
3395 (build-system gnu-build-system)
3396 (arguments
3397 '(#:tests? #f)) ; no "check" target
3398 (native-inputs (list libx11 libxaw))
3399 (home-page "https://www.nongnu.org/autocutsel/")
3400 (synopsis "Automated X11 clipboard and cutbuffer synchronization")
3401 (description "@code{autocutsel} tracks changes in the server's cutbuffer
3402and clipboard selection. When the clipboard is changed, it updates the
3403cutbuffer. When the cutbuffer is changed, it owns the clipboard selection.
3404The cutbuffer and clipboard selection are always synchronized.")
3405 (license license:gpl2+)))
3406
3407(define-public jgmenu
3408 (package
3409 (name "jgmenu")
3410 (version "4.4.1")
3411 (source
3412 (origin
3413 (method git-fetch)
3414 (uri (git-reference
3415 (url "https://github.com/johanmalm/jgmenu")
3416 (commit (string-append "v" version))))
3417 (file-name (git-file-name name version))
3418 (sha256
3419 (base32 "1a9irlrpa3mi3101cn9hi1ch5k1v4p0h83ni5j63qmlc5g7pcbsh"))))
3420 (build-system gnu-build-system)
3421 (native-inputs
3422 (list cppcheck perl pkg-config))
3423 (inputs
3424 (list cairo
3425 glib
3426 librsvg
3427 libx11
3428 libxml2
3429 libxrandr
3430 pango))
3431 (arguments
3432 `(#:test-target "test"
3433 #:phases
3434 (modify-phases %standard-phases
3435 (replace 'configure
3436 (lambda* (#:key outputs #:allow-other-keys)
3437 (setenv "CC" ,(cc-for-target))
3438 (invoke "./configure"
3439 (string-append "--prefix=" (assoc-ref outputs "out"))))))))
3440 (synopsis "Simple X11 menu")
3441 (description
3442 "This is a simple menu for X11 designed for scripting and tweaking. It
3443can optionally use some appearance settings from XSettings, tint2 and GTK.")
3444 (home-page "https://jgmenu.github.io/")
3445 (license license:gpl2)))
3446
3447(define-public x-resize
3448 (package
3449 (name "x-resize")
3450 (version "0.3")
3451 (source (origin
3452 (method git-fetch)
3453 (uri (git-reference
3454 (url "https://gitlab.com/Apteryks/x-resize")
3455 (commit version)))
3456 (file-name (git-file-name name version))
3457 (sha256
3458 (base32
3459 "0bkzc57p8j7cfpcw36hp7bwn16mfby9p1kgfq1lijfqq7d56ps0x"))))
3460 (build-system gnu-build-system)
3461 (arguments
3462 (list
3463 #:tests? #f ;no test suite
3464 #:modules `(((guix build guile-build-system)
3465 #:select (target-guile-effective-version))
3466 ,@%default-gnu-imported-modules
3467 (srfi srfi-26))
3468 #:phases
3469 (with-imported-modules `((guix build guile-build-system)
3470 ,@%default-gnu-imported-modules)
3471 #~(modify-phases %standard-phases
3472 (add-after 'install 'wrap
3473 (lambda* (#:key inputs #:allow-other-keys)
3474 (let* ((version (target-guile-effective-version))
3475 (site-ccache (string-append "/lib/guile/" version
3476 "/site-ccache"))
3477 (site (string-append "/share/guile/site/" version))
3478 (dep-path
3479 (lambda (env path)
3480 (list env '=
3481 (map (cut string-append <> path)
3482 (list #$output
3483 #$(this-package-input
3484 "guile-lib")
3485 #$(this-package-input
3486 "guile-udev"))))))
3487 (bin (string-append #$output "/bin/")))
3488 (wrap-program (string-append bin "x-resize")
3489 (dep-path "GUILE_LOAD_PATH" site)
3490 (dep-path "GUILE_LOAD_COMPILED_PATH" site-ccache)
3491 (dep-path "GUILE_EXTENSIONS_PATH" "/lib")))))))))
3492 (native-inputs (list autoconf automake guile-3.0 pkg-config))
3493 (inputs (list guile-lib guile-udev xrandr))
3494 (home-page "https://gitlab.com/Apteryks/x-resize/")
3495 (synopsis "Dynamic display resizing leveraging udev events")
3496 (description "The @command{x-resize} command detects physical display
3497resolution changes via udev and invokes the @command{xrandr} command to
3498reconfigure the active display resolution accordingly. It can be used to
3499implement dynamic resize support for desktop environments that lack native
3500support such as Xfce.")
3501 (license license:gpl3+)))
3502
3503(define-public xwallpaper
3504 (package
3505 (name "xwallpaper")
3506 (version "0.7.6")
3507 (source
3508 (origin
3509 (method git-fetch)
3510 (uri (git-reference
3511 (url "https://github.com/stoeckmann/xwallpaper")
3512 (commit (string-append "v" version))))
3513 (file-name (git-file-name name version))
3514 (sha256
3515 (base32 "1hqc5z4qgfl8s2wzg1f9nq3ww2xg0vihdahhprjpmj9lgla50m7i"))))
3516 (build-system gnu-build-system)
3517 (arguments
3518 (list
3519 #:phases
3520 #~(modify-phases %standard-phases
3521 (add-after 'unpack 'fix-cross-compile
3522 (lambda _
3523 (substitute* "autogen.sh"
3524 (("pkg-config")
3525 #$(pkg-config-for-target))))))))
3526 (native-inputs
3527 (list autoconf automake pkg-config))
3528 (inputs
3529 (list libjpeg-turbo
3530 libpng
3531 libxpm
3532 pixman
3533 xcb-util
3534 xcb-util-image))
3535 (home-page "https://github.com/stoeckmann/xwallpaper")
3536 (synopsis "Wallpaper setting utility for X")
3537 (description
3538 "The xwallpaper utility allows you to set image files as your X
3539wallpaper. JPEG, PNG, and XPM file formats are supported.
3540
3541The wallpaper is also advertised to programs which support semi-transparent
3542backgrounds.")
3543 (license license:isc)))
3544
3545(define-public xwrits
3546 (package
3547 (name "xwrits")
3548 (version "2.26")
3549 (source
3550 (origin
3551 (method url-fetch)
3552 (uri (string-append "https://www.lcdf.org/~eddietwo/xwrits/"
3553 "xwrits-" version ".tar.gz"))
3554 (sha256
3555 (base32 "1n7y0fqpcvmzznvbsn14hzy5ddaa3lilm8aw6ckscqndnh4lijma"))))
3556 (build-system gnu-build-system)
3557 (arguments
3558 `(#:phases
3559 (modify-phases %standard-phases
3560 (add-after 'install 'install-docs
3561 (lambda* (#:key outputs #:allow-other-keys)
3562 (let* ((out (assoc-ref outputs "out"))
3563 (doc (string-append out "/share/doc/xwrits")))
3564 (install-file "GESTURES" doc)
3565 (install-file "README" doc)
3566 #t))))))
3567 (inputs
3568 (list libx11 libxinerama))
3569 (home-page "https://www.lcdf.org/~eddietwo/xwrits/")
3570 (synopsis "Reminds you to take wrist breaks")
3571 (description "Xwrits reminds you to take wrist breaks for prevention or
3572management of repetitive stress injuries. When you should take a break, it
3573pops up an X window, the warning window. You click on the warning window,
3574then take a break. The window changes appearance while you take the break.
3575It changes again when your break is over. Then you just resume typing.
3576Xwrits hides itself until you should take another break.")
3577 (license license:gpl2)))
3578
3579(define-public wlrctl
3580 (package
3581 (name "wlrctl")
3582 (version "0.2.2")
3583 (source (origin
3584 (method git-fetch)
3585 (uri (git-reference
3586 (url "https://git.sr.ht/~brocellous/wlrctl")
3587 (commit (string-append "v" version))))
3588 (file-name (git-file-name name version))
3589 (sha256
3590 (base32
3591 "1g8w7nypxvfnisxwg7jsmafg6hl433p00b5rbpgwcr6v444xqq76"))))
3592 (build-system meson-build-system)
3593 (native-inputs (list pkg-config scdoc))
3594 (inputs (list libxkbcommon wayland))
3595 (home-page "https://git.sr.ht/~brocellous/wlrctl")
3596 (synopsis "Command line utility for wlroots automation and extensions")
3597 (description
3598 "wlrctl is a command line utility for miscellaneous wlroots Wayland
3599extensions. At this time, wlrctl supports the foreign-toplevel-mangement
3600(window/toplevel command), virtual-keyboard (keyboard command), and
3601virtual-pointer (pointer command) protocols.")
3602 (license license:expat)))
3603
3604(define-public xsettingsd
3605 (package
3606 (name "xsettingsd")
3607 (version "1.0.2")
3608 (source
3609 (origin
3610 (method git-fetch)
3611 (uri (git-reference
3612 (url "https://github.com/derat/xsettingsd")
3613 (commit (string-append "v" version))))
3614 (file-name (git-file-name name version))
3615 (sha256
3616 (base32 "14gnkz18dipsa2v24f4nm9syxaa7g21iqjm7y65jn849ka2jr1h8"))))
3617 (build-system cmake-build-system)
3618 (arguments
3619 (list #:phases #~(modify-phases %standard-phases
3620 (add-after 'unpack 'disable-problematic-tests
3621 (lambda _
3622 (substitute* "config_parser_test.cc"
3623 ;; This test fails for unknown reasons (see:
3624 ;; https://github.com/derat/xsettingsd/issues/30).
3625 (("TEST\\(CharStreamTest, Basic")
3626 "TEST(CharStreamTest, DISABLED_Basic")))))))
3627 (inputs (list libx11))
3628 (native-inputs (list pkg-config googletest))
3629 (home-page "https://github.com/derat/xsettingsd")
3630 (synopsis "Xorg settings daemon")
3631 (description "@command{xsettingsd} is a lightweight daemon that provides settings to
3632Xorg applications via the XSETTINGS specification. It is used for defining
3633font and theme settings when a complete desktop environment (GNOME, KDE) is
3634not running. With a simple @file{.xsettingsd} configuration file one can avoid
3635configuring visual settings in different UI toolkits separately.")
3636 (license license:bsd-3)))
3637
3638(define-public clipnotify
3639 (package
3640 (name "clipnotify")
3641 (version "1.0.2")
3642 (source
3643 (origin
3644 (method git-fetch)
3645 (uri (git-reference
3646 (url "https://github.com/cdown/clipnotify")
3647 (commit version)))
3648 (file-name (git-file-name name version))
3649 (sha256
3650 (base32
3651 "1v3ydm5ljy8z1savmdxrjyx7a5bm5013rzw80frp3qbbjaci0wbg"))))
3652 (build-system gnu-build-system)
3653 (arguments
3654 `(#:phases
3655 (modify-phases %standard-phases
3656 (delete 'configure)
3657 (replace 'install
3658 (lambda* (#:key inputs outputs #:allow-other-keys)
3659 (let* ((out (assoc-ref outputs "out"))
3660 (bin (string-append out "/bin"))
3661 (doc (string-append %output "/share/doc/" ,name "-" ,version)))
3662 (install-file "clipnotify" bin)
3663 (install-file "README.md" doc)
3664 #t))))
3665 #:make-flags
3666 (list ,(string-append "CC=" (cc-for-target)))
3667 #:tests? #f)) ; no test suite
3668 (inputs
3669 `(("libx11" ,libx11)
3670 ("libXfixes" ,libxfixes)))
3671 (home-page "https://github.com/cdown/clipnotify")
3672 (synopsis "Notify on new X clipboard events")
3673 (description "@command{clipnotify} is a simple program that, using the
3674XFIXES extension to X11, waits until a new selection is available and then
3675exits.
3676
3677It was primarily designed for clipmenu, to avoid polling for new selections.
3678
3679@command{clipnotify} doesn't try to print anything about the contents of the
3680selection, it just exits when it changes. This is intentional -- X11's
3681selection API is verging on the insane, and there are plenty of others who
3682have already lost their sanity to bring us xclip/xsel/etc. Use one of those
3683tools to complement clipnotify.")
3684 (license license:public-domain)))
3685
3686(define-public clipmenu
3687 (let ((commit "7c34ace1fbab76eb1c1dc9b30dd4ac1a7fe4b90b")
3688 (revision "1"))
3689 (package
3690 (name "clipmenu")
3691 (version (string-append "6.2.0-"
3692 revision "." (string-take commit 7)))
3693 (source
3694 (origin
3695 (method git-fetch)
3696 (uri (git-reference
3697 (url "https://github.com/cdown/clipmenu")
3698 (commit commit)))
3699 (file-name (git-file-name name version))
3700 (sha256
3701 (base32
3702 "1403sw49ccb8xsd8v611fzp0csaglfz8nmz3wcjsk8x11h9jvxwy"))))
3703 (build-system gnu-build-system)
3704 (arguments
3705 (list
3706 #:phases
3707 #~(modify-phases %standard-phases
3708 (delete 'configure)
3709 (delete 'build)
3710 (replace 'install
3711 (lambda _
3712 (let ((bin (string-append #$output "/bin"))
3713 (doc (string-append #$output "/share/doc/"
3714 #$name "-" #$version)))
3715 (install-file "clipdel" bin)
3716 (install-file "clipmenu" bin)
3717 (install-file "clipmenud" bin)
3718 (install-file "clipfsck" bin)
3719 (install-file "clipctl" bin)
3720 (install-file "README.md" doc))))
3721 (add-after 'install 'wrap-script
3722 (lambda* (#:key inputs outputs #:allow-other-keys)
3723 (let* ((out (assoc-ref outputs "out"))
3724 (clipnotify (assoc-ref inputs "clipnotify"))
3725 (coreutils-minimal (assoc-ref inputs "coreutils-minimal"))
3726 (gawk (assoc-ref inputs "gawk"))
3727 (util-linux (assoc-ref inputs "util-linux"))
3728 (xdotool (assoc-ref inputs "xdotool"))
3729 (xsel (assoc-ref inputs "xsel"))
3730 (guile (search-input-file inputs "bin/guile")))
3731 (for-each
3732 (lambda (prog)
3733 (wrap-script (string-append out "/bin/" prog)
3734 #:guile guile
3735 `("PATH" ":" prefix
3736 ,(map (lambda (dir)
3737 (string-append dir "/bin"))
3738 (list clipnotify coreutils-minimal
3739 gawk util-linux xdotool xsel)))))
3740 '("clipmenu" "clipmenud" "clipdel" "clipfsck" "clipctl")))))
3741 (replace 'check
3742 (lambda* (#:key inputs outputs #:allow-other-keys)
3743 ;; substitute a shebang appearing inside a string (the test
3744 ;; file writes this string to a temporary file):
3745 (substitute* "tests/test-clipmenu"
3746 (("#!/usr/bin/env bash")
3747 (string-append "#!" (which "bash"))))
3748 (invoke "tests/test-clipmenu"))))))
3749 (inputs
3750 (list clipnotify
3751 coreutils-minimal
3752 gawk
3753 guile-3.0 ; for wrap-script
3754 util-linux
3755 xdotool
3756 xsel))
3757 (home-page "https://github.com/cdown/clipmenu")
3758 (synopsis "Simple clipboard manager using dmenu or rofi and xsel")
3759 (description "Start @command{clipmenud}, then run @command{clipmenu} to
3760select something to put on the clipboard.
3761
3762When @command{clipmenud} detects changes to the clipboard contents, it writes
3763them out to the cache directory. @command{clipmenu} reads the cache directory
3764to find all available clips and launches @command{dmenu} (or @command{rofi},
3765depending on the value of @code{CM_LAUNCHER}) to let the user select a clip.
3766After selection, the clip is put onto the PRIMARY and CLIPBOARD X selections.")
3767 (license license:public-domain))))
3768
3769(define-public clipman
3770 (package
3771 (name "clipman")
3772 (version "1.6.4")
3773 (source
3774 (origin
3775 (method git-fetch)
3776 (uri (git-reference
3777 (url "https://github.com/chmouel/clipman")
3778 (commit (string-append "v" version))))
3779 (file-name (git-file-name name version))
3780 (sha256
3781 (base32 "05hsv0v69pn79adx8lz9fzb19qr27finiq7xb4ag4b8m4pibprcj"))))
3782 (build-system go-build-system)
3783 (arguments
3784 (list
3785 #:import-path "github.com/yory8/clipman"
3786 #:install-source? #f
3787 #:phases
3788 #~(modify-phases %standard-phases
3789 (add-before 'build 'patch-wl-copy-path
3790 (lambda _
3791 (substitute* "src/github.com/yory8/clipman/main.go"
3792 (("\"wl-copy\"")
3793 (string-append "\"" (which "wl-copy") "\""))))))))
3794 (inputs
3795 (list go-github-com-alecthomas-kingpin-v2
3796 go-github-com-kballard-go-shellquote
3797 libnotify
3798 wl-clipboard))
3799 (synopsis "Basic clipboard manager with support for persisting copy buffers")
3800 (description
3801 "A clipboard manager for Wayland that relies on an external selector,
3802such as @code{wofi}, @code{bemenu}, @code{dmenu}, or @code{rofi}.
3803
3804Run the binary in your session by adding @command{exec wl-paste -t text --watch
3805clipman store} (or @command{exec wl-paste -t text --watch clipman store 1>>
3806PATH/TO/LOGFILE 2>&1 &} to log errors) at the beginning of wherever you
3807initialize programs.")
3808 (home-page "https://github.com/chmouel/clipman")
3809 (license license:gpl3)))
3810
3811(define-public kbdd
3812 (package
3813 (name "kbdd")
3814 (version "0.7.1")
3815 (source
3816 (origin
3817 (method git-fetch)
3818 (uri (git-reference
3819 (url "https://github.com/qnikst/kbdd")
3820 (commit (string-append "v" version))))
3821 (file-name (git-file-name name version))
3822 (sha256
3823 (base32
3824 "0qkq75grbd4wkx4nlvswgavpijk9ad0pzqyj89a0ayjsbsn36pqy"))))
3825 (build-system gnu-build-system)
3826 (native-inputs
3827 (list autoconf automake
3828 dbus-glib ;; for dbus-binding-tool
3829 `(,glib "bin") pkg-config))
3830 (inputs
3831 (list dbus-glib glib libx11))
3832 (home-page "https://github.com/qnikst/kbdd")
3833 (synopsis "Per-window keyboard layout switching daemon for X")
3834 (description "@command{kbdd} is a simple keyboard layout switching
3835program, which is designed to run in an X11 session and remember
3836keyboard layouts on a per-window basis. That can be very handy for a
3837user of a non-US keyboard who does not want to jump through layouts back
3838and forth while typing in terminals (mostly in a latin alphabet) and
3839some kind of chat (in native language).
3840
3841@command{kbdd} also supports D-Bus signals, which makes it possible to
3842create layout indicator widgets.")
3843 (license license:bsd-2)))
3844
3845(define-public j4-dmenu-desktop
3846 (package
3847 (name "j4-dmenu-desktop")
3848 (version "3.2")
3849 (source (origin
3850 (method git-fetch)
3851 (uri (git-reference
3852 (url "https://github.com/enkore/j4-dmenu-desktop")
3853 (commit (string-append "r" version))))
3854 (file-name (git-file-name name version))
3855 (sha256
3856 (base32
3857 "15jlb0si77sndnl5annys0dq2gkwwvzn1d2jwjay9i3xdivzmfb2"))))
3858 (build-system meson-build-system)
3859 (native-inputs
3860 (list catch2 pkg-config))
3861 (inputs (list spdlog))
3862 (arguments
3863 (list
3864 #:configure-flags
3865 #~(list #$(string-append
3866 "-Denable-tests="
3867 (if (%current-target-system)
3868 "false"
3869 "true")))
3870 #:phases
3871 #~(modify-phases %standard-phases
3872 (add-after 'unpack 'fix-shell-path-in-tests
3873 (lambda _
3874 (substitute* (list "tests/ShellUnquote.cc"
3875 "tests/TestFieldCodes.cc")
3876 (("/bin/sh")
3877 (which "sh"))))))))
3878 (synopsis "Fast desktop menu")
3879 (description
3880 "j4-dmenu-desktop is a replacement for i3-dmenu-desktop. Its purpose
3881is to find @file{.desktop} files and offer you a menu to start an application
3882using @command{dmenu}.")
3883 (home-page "https://github.com/enkore/j4-dmenu-desktop")
3884 (license license:gpl3+)))
3885
3886(define-public fuzzel
3887 (package
3888 (name "fuzzel")
3889 (version "1.15.0")
3890 (home-page "https://codeberg.org/dnkl/fuzzel")
3891 (source (origin
3892 (method git-fetch)
3893 (uri (git-reference (url home-page) (commit version)))
3894 (file-name (git-file-name name version))
3895 (sha256
3896 (base32
3897 "0plgypisiwb486ngwvbnyrpjqixbl90qcclnlwg14nmzids43fcj"))))
3898 (build-system meson-build-system)
3899 (arguments
3900 (list #:build-type "release"
3901 #:configure-flags #~(list "-Denable-cairo=enabled"
3902 "-Dpng-backend=libpng"
3903 "-Dsvg-backend=librsvg")))
3904 (native-inputs (append (list pkg-config scdoc tllist)
3905 (if (%current-target-system)
3906 ;; for wayland-scanner
3907 (list pkg-config-for-build
3908 wayland)
3909 (list))))
3910 (inputs (list cairo
3911 fcft
3912 fontconfig
3913 libpng
3914 libxkbcommon
3915 (librsvg-for-system) ;if librsvg is not used, bundled nanosvg is used
3916 pixman
3917 wayland
3918 wayland-protocols))
3919 (synopsis "Wayland-native application launcher")
3920 (description
3921 "@command{fuzzel} is a Wayland-native application launcher, similar to
3922rofi's drun mode. It has Emacs key bindings and remembers frequently launched
3923applications. The font and colors can be configured.")
3924 (license (list license:expat ;fuzzel
3925 license:zlib)))) ;; bundled nanosvg
3926
3927(define-public fyi
3928 (package
3929 (name "fyi")
3930 (version "1.0.4")
3931 (source (origin
3932 (method git-fetch)
3933 (uri (git-reference
3934 (url "https://codeberg.org/dnkl/fyi")
3935 (commit version)))
3936 (file-name (git-file-name name version))
3937 (sha256
3938 (base32
3939 "1hm0xr807fgv19dmb9204033hpnpsdanq985j49l8i72gj214sah"))))
3940 (build-system meson-build-system)
3941 (native-inputs (list pkg-config))
3942 (inputs (list dbus))
3943 (home-page "https://codeberg.org/dnkl/fyi")
3944 (synopsis "Lightweight alternative to @code{notify-send}")
3945 (description
3946 "@acronym{FYI, For Your Information} is a command line utility to send
3947desktop notifications to the user via a notification daemon implementing XDG
3948desktop notifications.")
3949 (license license:expat)))
3950
3951(define-public wofi
3952 (package
3953 (name "wofi")
3954 (version "1.5.3")
3955 (source (origin
3956 (method hg-fetch)
3957 (uri (hg-reference
3958 (url "https://hg.sr.ht/~scoopta/wofi")
3959 (changeset (string-append "v" version))))
3960 (file-name (git-file-name name version))
3961 (sha256
3962 (base32
3963 "0arfwr9ih8h34c8za993zmj7cg7znx3vfrg1i5yhvvblkicc7jxc"))))
3964 (build-system meson-build-system)
3965 (arguments
3966 (list #:glib-or-gtk? #t))
3967 (native-inputs
3968 (list pkg-config))
3969 (inputs
3970 (list gtk+ wayland))
3971 (synopsis "Launcher/menu program for wayland")
3972 (description
3973 "Wofi is a launcher/menu program for wlroots based wayland compositors
3974such as sway, similar to @command{rofi}.")
3975 (home-page "https://hg.sr.ht/~scoopta/wofi")
3976 (license license:gpl3+)))
3977
3978;; XXX: Deprecated on <2026-0624>
3979(define-deprecated/public-alias nwg-launchers
3980 (@ (gnu packages nwg-shell) nwg-launchers))
3981
3982(define-public dex
3983 (package
3984 (name "dex")
3985 (version "0.10.1")
3986 (source (origin
3987 (method git-fetch)
3988 (uri (git-reference
3989 (url (string-append "https://github.com/jceb/dex"))
3990 (commit (string-append "v" version))))
3991 (sha256
3992 (base32
3993 "1d7fqy63i4q0mw316i5ws1sgdq3f7h3bsf3avvmy0nzshz7i5y6m"))
3994 (file-name (git-file-name name version))))
3995 (build-system gnu-build-system)
3996 (arguments
3997 (list
3998 #:make-flags #~(list (string-append "PREFIX=" #$output))
3999 #:phases
4000 #~(modify-phases %standard-phases
4001 (delete 'configure)
4002 (replace 'check
4003 (lambda* (#:key tests? #:allow-other-keys)
4004 (when tests?
4005 (invoke "./dex" "--test" "--verbose")))))))
4006 (inputs
4007 (list python))
4008 (native-inputs
4009 (list python-sphinx))
4010 (home-page "https://github.com/jceb/dex")
4011 (synopsis "Execute DesktopEntry files")
4012 (description
4013 "@command{dex}, @dfn{DesktopEntry Execution}, is a program to generate and
4014execute @file{.desktop} files of the Application type. It is also an
4015autostarter compliant with the XDG autostart specification.")
4016 (properties
4017 '((lint-hidden-cpe-vendors . ("samsung" "linuxfoundation"))))
4018 (license license:gpl3+)))
4019
4020(define-public sx
4021 (package
4022 (name "sx")
4023 (version "3.0")
4024 (source (origin
4025 (method git-fetch)
4026 (uri (git-reference
4027 (url "https://github.com/Earnestly/sx")
4028 (commit version)))
4029 (file-name (git-file-name name version))
4030 (sha256
4031 (base32
4032 "05179dxlw5z5yr648dklyl33l2rr0afd619xxhlwdcxfmgn37al4"))))
4033 (build-system gnu-build-system)
4034 (arguments
4035 '(#:tests? #f ; no tests
4036 #:make-flags
4037 (let ((out (assoc-ref %outputs "out")))
4038 (list (string-append "PREFIX=" out)))
4039 #:phases
4040 (modify-phases %standard-phases
4041 (add-after 'unpack 'refer-to-xauth
4042 (lambda* (#:key inputs #:allow-other-keys)
4043 (substitute* "sx"
4044 (("\\bxauth\\b" command)
4045 (string-append (assoc-ref inputs "xauth") "/bin/" command)))))
4046 (delete 'configure)))) ; no configure script
4047 (inputs
4048 (list xauth))
4049 (home-page "https://github.com/Earnestly/sx")
4050 (synopsis "Start an xorg server")
4051 (description
4052 "@command{sx} is a simple alternative to both @command{xinit} and
4053@command{startx} for starting an Xorg server.")
4054 (license license:x11)))
4055
4056(define-public hsetroot
4057 (package
4058 (name "hsetroot")
4059 (version "1.0.5")
4060 (home-page "https://github.com/himdel/hsetroot")
4061 (source (origin
4062 (method git-fetch)
4063 (file-name (git-file-name name version))
4064 (uri (git-reference
4065 (url home-page)
4066 (commit version)))
4067 (sha256
4068 (base32
4069 "1jbk5hlxm48zmjzkaq5946s58rqwg1v1ds2sdyd2ba029hmvr722"))))
4070 (build-system gnu-build-system)
4071 (arguments
4072 `(#:tests? #f
4073 #:make-flags
4074 (list
4075 ,(string-append "CC=" (cc-for-target))
4076 (string-append "PREFIX=" (assoc-ref %outputs "out")))
4077 #:phases
4078 (modify-phases %standard-phases
4079 (delete 'configure)
4080 (add-before 'install 'mkdir-install-path
4081 (lambda* (#:key outputs #:allow-other-keys)
4082 (let ((out (assoc-ref outputs "out")))
4083 (mkdir-p (string-append out "/bin"))))))))
4084 (inputs
4085 (list libx11 imlib2 libxinerama))
4086 (native-inputs
4087 (list pkg-config))
4088 (synopsis "Imlib2-based wallpaper changer")
4089 (description
4090 "The @command{hsetroot} command composes wallpapers for X.
4091This package is the fork of hsetroot by Hyriand.")
4092 (license license:gpl2+)))
4093
4094(define-public hyprcursor
4095 (package
4096 (name "hyprcursor")
4097 (version "0.1.13")
4098 (source (origin
4099 (method git-fetch)
4100 (uri (git-reference
4101 (url "https://github.com/hyprwm/hyprcursor")
4102 (commit (string-append "v" version))))
4103 (file-name (git-file-name name version))
4104 (sha256
4105 (base32
4106 "08vqkyfws2v4w0631xij4qbnncmci3vs0iyw0373zvsqy1nrm2ll"))))
4107 (build-system cmake-build-system)
4108 (arguments (list #:tests? #f)) ;TODO: No themes currently packaged.
4109 (native-inputs (list gcc-15 pkg-config))
4110 (inputs (list cairo hyprlang (librsvg-for-system) libzip tomlplusplus))
4111 (home-page "https://standards.hyprland.org/hyprcursor/")
4112 (synopsis "Cursor theme format")
4113 (description
4114 "This package provides Hyprland cursor format, library and utilities.")
4115 (license license:bsd-3)))
4116
4117(define-public hyprsunset
4118 (package
4119 (name "hyprsunset")
4120 (version "0.3.3")
4121 (source
4122 (origin
4123 (method git-fetch)
4124 (uri (git-reference
4125 (url "https://github.com/hyprwm/hyprsunset")
4126 (commit (string-append "v" version))))
4127 (file-name (git-file-name name version))
4128 (sha256
4129 (base32 "1k2gzbin4k18n81a0jpj8gbfphnib6kz4bbhbyhygb4p607sfkk2"))))
4130 (build-system cmake-build-system)
4131 (arguments
4132 (list #:tests? #f)) ;No tests.
4133 (native-inputs
4134 (list gcc-15
4135 pkg-config))
4136 (inputs
4137 (list hyprwayland-scanner
4138 hyprutils
4139 hyprlang
4140 wayland
4141 hyprland-protocols
4142 wayland-protocols))
4143 (home-page "https://wiki.hypr.land/Hypr-Ecosystem/hyprsunset/")
4144 (synopsis "Blue-light filter for Hyprland")
4145 (description
4146 "This is a small utility to provide a blue light filter for your system.
4147This method is preferred to screen shaders as it will not be captured via
4148recording / screenshots.
4149
4150hyprsunset also provides a gamma filter, which can be used to adjust perceived
4151display brightness on monitors that do not support software control, or to
4152reduce perceived brightness below the monitor's minimum.")
4153 (license license:bsd-3)))
4154
4155(define-public hyprlock
4156 (package
4157 (name "hyprlock")
4158 (version "0.9.5")
4159 (source
4160 (origin
4161 (method git-fetch)
4162 (uri (git-reference
4163 (url "https://github.com/hyprwm/hyprlock")
4164 (commit (string-append "v" version))))
4165 (file-name (git-file-name name version))
4166 (sha256
4167 (base32 "0rxbrm0i4fcrm8m4ap52v4vq1gxw7gl6v6grdl06b3kqqgalqnal"))))
4168 (build-system cmake-build-system)
4169 (arguments
4170 `(#:phases
4171 (modify-phases %standard-phases
4172 ;; remove when fixed
4173 (add-after 'unpack 'fixgldiscover
4174 (lambda* (#:key inputs native-inputs #:allow-other-keys)
4175 (substitute* "CMakeLists.txt"
4176 ((" opengl")
4177 " gl")
4178 (("OpenGL REQUIRED")
4179 "OpenGL REQUIRED COMPONENTS GLES2 EGL")))))
4180 #:tests? #f)) ;; no test
4181 (native-inputs (list gcc-15 pkg-config))
4182 (inputs (list cairo
4183 file
4184 hyprgraphics
4185 hyprlang
4186 hyprutils
4187 hyprwayland-scanner
4188 libdrm
4189 libjpeg-turbo
4190 libwebp
4191 libxkbcommon
4192 linux-pam
4193 mesa
4194 pango
4195 sdbus-c++
4196 wayland
4197 wayland-protocols))
4198 (home-page "https://hypr.land/")
4199 (synopsis "Hyprland's screen locking utility")
4200 (description
4201 "This package provides Hyprland's simple, yet multi-threaded and
4202GPU-accelerated screen locking utility.")
4203 (license license:bsd-3)))
4204
4205(define-public hyprpaper
4206 (package
4207 (name "hyprpaper")
4208 (version "0.8.4")
4209 (source (origin
4210 (method git-fetch)
4211 (uri (git-reference
4212 (url "https://github.com/hyprwm/hyprpaper")
4213 (commit (string-append "v" version))))
4214 (file-name (git-file-name name version))
4215 (sha256
4216 (base32
4217 "1dki39irswyz0p21l6rpin5br35nrx2m7gbhqgry3d2pvrp9d1zz"))))
4218 (build-system cmake-build-system)
4219 (arguments '(#:tests? #f)) ;; no test
4220 (native-inputs (list gcc-15 pkg-config))
4221 (inputs
4222 (list aquamarine
4223 cairo
4224 file
4225 hyprgraphics
4226 hyprlang
4227 hyprutils
4228 hyprtoolkit
4229 hyprwire
4230 hyprwayland-scanner
4231 libglvnd
4232 mesa
4233 pango
4234 wayland
4235 wayland-protocols))
4236 (home-page "https://hyprland.org/")
4237 (synopsis "Wallpaper utility for Hyprland")
4238 (description
4239 "Hyprpaper is a blazing fast wallpaper utility for Hyprland with the ability to
4240dynamically change wallpapers through sockets. It will work on all wlroots-based
4241compositors, though.")
4242 (license license:bsd-3)))
4243
4244(define-public hyprpicker
4245 (package
4246 (name "hyprpicker")
4247 (version "0.4.7")
4248 (source (origin
4249 (method git-fetch)
4250 (uri (git-reference
4251 (url "https://github.com/hyprwm/hyprpicker")
4252 (commit (string-append "v" version))))
4253 (file-name (git-file-name name version))
4254 (sha256
4255 (base32
4256 "11iy86c2hbjhx4y7b787aqp423wcfvrf585yfpnipw049dxac6q0"))))
4257 (build-system cmake-build-system)
4258 (arguments
4259 (list #:tests? #f ;No tests.
4260 #:phases
4261 #~(modify-phases %standard-phases
4262 (add-after 'unpack 'fix-path
4263 (lambda* (#:key inputs #:allow-other-keys)
4264 (substitute* "src/clipboard/Clipboard.cpp"
4265 (("wl-copy" cmd)
4266 (search-input-file
4267 inputs (string-append "bin/" cmd)))))))))
4268 (native-inputs (list gcc-15 hyprwayland-scanner pkg-config))
4269 (inputs
4270 (list cairo
4271 hyprutils
4272 libjpeg-turbo
4273 libxkbcommon
4274 pango
4275 wayland
4276 wayland-protocols
4277 wl-clipboard))
4278 (home-page "https://github.com/hyprwm/hyprpicker")
4279 (synopsis "Wayland color picker compatible with @code{wlroots}")
4280 (description
4281 "This package provides a @code{wlroots}-compatible Wayland color picker.")
4282 (license license:bsd-3)))
4283
4284(define-public jumpapp
4285 (package
4286 (name "jumpapp")
4287 (version "1.2")
4288 (source
4289 (origin
4290 (method git-fetch)
4291 (uri (git-reference
4292 (url "https://github.com/mkropat/jumpapp")
4293 (commit (string-append "v" version))))
4294 (file-name (git-file-name name version))
4295 (sha256
4296 (base32 "05shgw4agkhgk5vbvc05s12q7m0djc0m4qrd328hmis37bxp9j7n"))))
4297 (build-system gnu-build-system)
4298 (arguments `(#:phases
4299 (modify-phases %standard-phases
4300 (delete 'configure)
4301 (delete 'check)
4302 (add-before 'install 'set-prefix-in-makefile
4303 (lambda* (#:key outputs #:allow-other-keys)
4304 (let ((out (assoc-ref outputs "out")))
4305 (substitute* "Makefile"
4306 (("PREFIX =.*")
4307 (string-append "PREFIX = " out "\n")))))))))
4308 (propagated-inputs
4309 (list wmctrl xdotool xprop))
4310 (native-inputs
4311 (list pandoc perl))
4312 (synopsis "Run-or-raise application switcher for any X11 desktop")
4313 (description
4314 "Bind a key for any given application that will launch the application,
4315if it's not already running, or focus the application's window,if it is running.
4316Pressing the key again will cycle to the application's next window,
4317if there's more than one.")
4318 (home-page "https://github.com/mkropat/jumpapp")
4319 (license license:expat)))
4320
4321(define-public xkbset
4322 (package
4323 (name "xkbset")
4324 (version "0.8")
4325 (source
4326 (origin
4327 (method git-fetch)
4328 (uri (git-reference
4329 (url "https://github.com/stephenmontgomerysmith/xkbset")
4330 (commit (string-append "v" version))))
4331 (file-name (git-file-name name version))
4332 (sha256
4333 (base32 "1xa6sgvnwynl2qrjnsppvb2vg4p5v1pisrfhrmnlymw1fzhh6s9p"))))
4334 (build-system gnu-build-system)
4335 (inputs
4336 (list bash-minimal libx11 perl perl-tk))
4337 (arguments
4338 `(#:tests? #f ; There are none.
4339 #:make-flags
4340 `(,,(string-append "CC=" (cc-for-target))
4341 ,(string-append "X11PREFIX=" %output)
4342 ,(string-append "X11BASE=" (assoc-ref %build-inputs "libx11"))
4343 ,(string-append "INSTALL_MAN1=" %output "/share/man/man1"))
4344 #:phases
4345 (modify-phases %standard-phases
4346 (delete 'configure)
4347 (add-before 'install 'create-install-directories
4348 (lambda* (#:key outputs #:allow-other-keys)
4349 (let ((out (assoc-ref outputs "out")))
4350 (mkdir-p out)
4351 (with-directory-excursion out
4352 (for-each mkdir-p '("bin" "share/man/man1"))))
4353 #t))
4354 (add-after 'install 'wrap-perl-script
4355 (lambda* (#:key outputs #:allow-other-keys)
4356 (wrap-program (string-append (assoc-ref outputs "out")
4357 "/bin/xkbset-gui")
4358 `("PERL5LIB" ":" prefix (,(getenv "PERL5LIB"))))))
4359 (replace 'install-license-files
4360 (lambda* (#:key outputs #:allow-other-keys)
4361 (install-file "COPYRIGHT"
4362 (string-append
4363 (assoc-ref outputs "out")
4364 "/share/doc/" ,name "-" ,version)))))))
4365 (home-page "https://stephenmontgomerysmith.github.io/software/#xkbset")
4366 (synopsis "User-preference utility for XKB extensions for X")
4367 (description
4368 "This is a program to help manage many of the XKB features of the X Window
4369System. This includes such features as MouseKeys, AccessX, StickyKeys,
4370BounceKeys, and SlowKeys. It includes a graphical program to help with
4371MouseKeys-acceleration management.")
4372 (license license:bsd-3)))
4373
4374(define-public wlsunset
4375 (package
4376 (name "wlsunset")
4377 (version "0.4.0")
4378 (source
4379 (origin
4380 (method git-fetch)
4381 (uri (git-reference
4382 (url "https://git.sr.ht/~kennylevinsen/wlsunset/")
4383 (commit version)))
4384 (file-name (git-file-name name version))
4385 (sha256
4386 (base32
4387 "1n60b2qq4ihw0g2dwisrvsvbhpml4mlv42425j0r7xhlm4w93z2k"))))
4388 (build-system meson-build-system)
4389 (inputs
4390 (list wayland wayland-protocols))
4391 (native-inputs
4392 (list pkg-config scdoc))
4393 (synopsis "Day/night gamma adjustments for Wayland compositors")
4394 (home-page "https://sr.ht/~kennylevinsen/wlsunset/")
4395 (description
4396 "Wlsunset adjusts gamma based on day-night cycles on Wayland compositors
4397that support @samp{wlr-gamma-control-unstable-v1}. It is also known as a blue
4398light filter or night light.")
4399 (license license:expat)))
4400
4401(define-public ydotool
4402 (package
4403 (name "ydotool")
4404 (version "1.0.4")
4405 (source
4406 (origin
4407 (method git-fetch)
4408 (uri (git-reference
4409 (url "https://github.com/ReimuNotMoe/ydotool")
4410 (commit (string-append "v" version))))
4411 (file-name (git-file-name name version))
4412 (sha256
4413 (base32 "0y2n1r6hx0ar1yn636a7j4ywm17qqji84ryhdina3kriwx3sgmij"))))
4414 (build-system cmake-build-system)
4415 (arguments '(#:tests? #f)) ; no tests
4416 (native-inputs (list scdoc))
4417 (home-page "https://github.com/ReimuNotMoe/ydotool")
4418 (synopsis "Generic Linux command-line automation tool (no X!)")
4419 (description "@code{ydotool} is a Linux command-line tool that simulates
4420keyboard input, mouse actions, etc. programmatically or manually.")
4421 (license license:agpl3+)))
4422
4423(define-public wvkbd
4424 (package
4425 (name "wvkbd")
4426 (version "0.18")
4427 (source (origin
4428 (method git-fetch)
4429 (uri (git-reference
4430 (url "https://git.sr.ht/~proycon/wvkbd")
4431 (commit (string-append "v" version))))
4432 (file-name (git-file-name name version))
4433 (sha256
4434 (base32
4435 "03c1rvkg8vb3gvm3acqq97hijr6pidsga6f5n5w41wcz0qy5pxj5"))))
4436 (build-system gnu-build-system)
4437 (arguments
4438 (list #:tests? #f ;no tests
4439 #:make-flags #~(list (string-append "CC="
4440 #$(cc-for-target))
4441 (string-append "PREFIX="
4442 #$output))
4443 #:phases #~(modify-phases %standard-phases
4444 (add-after 'unpack 'fix-cross-compile
4445 (lambda _
4446 (substitute* "Makefile"
4447 (("pkg-config")
4448 #$(pkg-config-for-target)))))
4449 (delete 'configure))))
4450 (native-inputs
4451 (list scdoc
4452 wayland ; For wayland-scanner.
4453 pkg-config))
4454 (inputs (list libxkbcommon cairo pango harfbuzz wayland))
4455 (home-page "https://git.sr.ht/~proycon/wvkbd")
4456 (synopsis "On-screen keyboard for wlroots compositors")
4457 (description
4458 "This package provides on-screen keyboard for wlroots compositors with
4459the following features:
4460
4461@itemize
4462@item Typing, modifier locking, layout switching
4463@item Positive visual feedback on key presses
4464@item On-the-fly layout and keymap switching
4465@item Custom color schemes
4466@item International layouts (cyrillic, arabic)
4467@item Emoji support
4468@item Compose key for character variants (e.g. diacritics)
4469@item Show/hide keyboard on signals (SIGUSR1 = hide, SIGUSR2 = show, SIGRTMIN = toggle)
4470@item Automatic portrait/landscape detection and subsequent layout switching
4471@end itemize")
4472 (license (list license:expat ;3 files under Expat license (see 'LICENSE')
4473 license:gpl3+)))) ;the rest is GPLv3+
4474
4475(define-public xforms
4476 ;; The latest stable release is ancient (2014) and fails with a linker
4477 ;; error, so use the last commit.
4478 (let ((revision "1")
4479 (commit "2c1a9f151baf50887a517280645ec23379fb96f8"))
4480 (package
4481 (name "xforms")
4482 (version (git-version "1.3.0" revision commit))
4483 (source (origin
4484 (method git-fetch)
4485 (uri (git-reference
4486 (url "https://git.savannah.gnu.org/git/xforms.git/")
4487 (commit commit)))
4488 (file-name (git-file-name name version))
4489 (sha256
4490 (base32
4491 "12qc1j5g03n2zigvbwilx2zszr8sgv5wd259js7cwf8ffw4lzjf2"))))
4492 (build-system gnu-build-system)
4493 (arguments
4494 (list #:phases #~(modify-phases %standard-phases
4495 (add-after 'unpack 'patch-doc-makefile
4496 (lambda _
4497 (substitute* "doc/Makefile.am"
4498 (("/bin/mkdir")
4499 "mkdir")))))
4500 #:configure-flags #~(list "--enable-docs")))
4501 (native-inputs (list autoconf
4502 automake
4503 libtool
4504 texinfo
4505 texi2html
4506 (texlive-local-tree (list texlive-epsf
4507 texlive-texinfo))
4508 imagemagick))
4509 (propagated-inputs (list libx11 libxpm libjpeg-turbo))
4510 (home-page "http://xforms-toolkit.org/")
4511 (synopsis "GUI toolkit for X based on the X11 Xlib library")
4512 (description
4513 "XForms is a graphical user interface toolkit for X based on the X11
4514Xlib library. It allows you to create windows, containing all kinds of
4515widgets (buttons, sliders, browsers, menus etc.) with a few lines of code and
4516then attach actions to the widgets, i.e., have some function called when a
4517button is pressed. To make this even easier XForms comes with a program
4518called @code{fdesign} that allows you to design a GUI for a program directly
4519on the screen and which then writes out the necessary C code for it.")
4520 (license license:lgpl2.1+))))
4521
4522(define-public xforms-gl
4523 (package/inherit xforms
4524 (name "xforms-gl")
4525 (propagated-inputs (modify-inputs propagated-inputs
4526 (append mesa)))
4527 (synopsis
4528 "GUI toolkit for X based on the X11 Xlib library, with OpenGL support")))
4529
4530(define-public xiccd
4531 (let* ((version "0.4.1")
4532 (tag (string-append "v" version)))
4533 (package
4534 (name "xiccd")
4535 (version version)
4536 (source
4537 (origin
4538 (method git-fetch)
4539 (uri (git-reference
4540 (url "https://github.com/agalakhov/xiccd")
4541 (commit tag)))
4542 (file-name (git-file-name name version))
4543 (sha256
4544 (base32 "01favi5v4qbpj6v6k6iab7wxhjy4vjnqwcykhhv2rgcqw5dx4w4a"))
4545 (modules '((guix build utils)))
4546 (snippet '(begin
4547 (substitute* "configure.ac"
4548 (("m4_esyscmd_s\\([^\n\\(\\)\\[\\]]*\\)")
4549 #$tag)
4550 (("tar-ustar")
4551 "tar-ustar foreign")) #t))))
4552 (build-system gnu-build-system)
4553 (inputs (list colord glib libx11 libxrandr))
4554 (native-inputs (list autoconf automake gettext-minimal libtool
4555 pkg-config))
4556 (home-page "https://github.com/agalakhov/xiccd")
4557 (synopsis "X color profile daemon")
4558 (description
4559 "@command{xiccd} provides color profile support for desktop environments
4560other than GNOME and KDE. It does the following tasks:
4561@itemize
4562@item Enumerates displays and register them in colord.
4563@item Creates default ICC profiles based on EDID data.
4564@item Applies ICC profiles provided by colord.
4565@item Maintains user's private ICC storage directory.
4566@end itemize")
4567 (license license:gpl3))))
4568
4569(define-public darkman
4570 ;; Pick the commit after the last version tag which fixes a bug detecting
4571 ;; executable scripts.
4572 (let ((revision "0")
4573 (commit "b7c84de3990977eb4ace8c9719ae708a45739d0d"))
4574 (package
4575 (name "darkman")
4576 (version (git-version "2.3.0" revision commit))
4577 (source
4578 (origin
4579 (method git-fetch)
4580 (uri (git-reference
4581 (url "https://gitlab.com/WhyNotHugo/darkman")
4582 (commit commit)))
4583 (file-name (git-file-name name version))
4584 (sha256
4585 (base32
4586 "1rkwjs3rjrzw6gkcm4q91d0axhdhnrwfp4f503dji2jvs8wqa33m"))
4587 (modules '((guix build utils)))
4588 (snippet
4589 '(begin
4590 (substitute* "Makefile"
4591 ;; Avoid building the binary again when installing.
4592 (("install: build") "install: darkman.1")
4593 ;; Don't install the systemd service.
4594 (("install.*contrib/darkman.service") "true")
4595 ;; Don't install the openrc service.
4596 (("install.*openrc") "true")
4597 ;; The binary will be installed by `go install'.
4598 ((".@install.*bin.*") ""))))))
4599 (build-system go-build-system)
4600 (arguments
4601 (list
4602 #:tests? #f ; No tests.
4603 #:install-source? #f
4604 #:import-path "gitlab.com/WhyNotHugo/darkman/cmd/darkman"
4605 #:unpack-path "gitlab.com/WhyNotHugo/darkman"
4606 #:build-flags
4607 #~(list (string-append "-ldflags= -X main.Version=" #$version))
4608 #:phases
4609 #~(modify-phases %standard-phases
4610 (add-after 'unpack 'patch-paths
4611 (lambda* (#:key unpack-path #:allow-other-keys)
4612 (substitute*
4613 (find-files (string-append "src/" unpack-path "/contrib/dbus/")
4614 "\\.service$")
4615 (("/usr") #$output))))
4616 (replace 'install
4617 (lambda* (#:key unpack-path #:allow-other-keys)
4618 (with-directory-excursion (string-append "src/" unpack-path)
4619 (let ((darkman (string-append #$output "/bin/darkman")))
4620 (with-output-to-file "_darkman.zsh"
4621 (lambda ()
4622 (invoke darkman "completion" "zsh")))
4623 (with-output-to-file "darkman.bash"
4624 (lambda ()
4625 (invoke darkman "completion" "bash")))
4626 (with-output-to-file "darkman.fish"
4627 (lambda ()
4628 (invoke darkman "completion" "fish"))))
4629 (invoke "make" "install" (string-append "PREFIX=" #$output))))))))
4630 (native-inputs
4631 (list gnu-make
4632 go-github-com-goccy-go-yaml
4633 go-github-com-godbus-dbus-v5
4634 go-github-com-lmittmann-tint
4635 go-github-com-sj14-astral
4636 go-github-com-spf13-cobra
4637 scdoc))
4638 (home-page "https://gitlab.com/WhyNotHugo/darkman")
4639 (synopsis "Control dark-mode and light-mode transitions")
4640 (description
4641 "Darkman is a framework for dark-mode and light-mode transitions on Unix-like
4642desktops.")
4643 (license license:bsd-0))))