projects/guix·blob ruby-team · refs

5349 lines · 209.0 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2019, 2020 John Soo <[email protected]>
3;;; Copyright © 2019-2026 Efraim Flashner <[email protected]>
4;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
5;;; Copyright © 2020 Michael Rohleder <[email protected]>
6;;; Copyright © 2020 Leo Famulari <[email protected]>
7;;; Copyright © 2020 Mark H Weaver <[email protected]>
8;;; Copyright © 2020 Gabriel Arazas <[email protected]>
9;;; Copyright © 2020-2026 Nicolas Goaziou <[email protected]>
10;;; Copyright © 2020 Arun Isaac <[email protected]>
11;;; Copyright © 2021 Tobias Geerinckx-Rice <[email protected]>
12;;; Copyright © 2021 Sharlatan Hellseher <[email protected]>
13;;; Copyright © 2021, 2022, 2025, 2026 Zheng Junjie <[email protected]>
14;;; Copyright © 2021 Alexandru-Sergiu Marton <[email protected]>
15;;; Copyright © 2021, 2023-2025 Maxim Cournoyer <[email protected]>
16;;; Copyright © 2021, 2022 Petr Hodina <[email protected]>
17;;; Copyright © 2021, 2026 jgart <[email protected]>
18;;; Copyright © 2021 Nicolas Graves <[email protected]>
19;;; Copyright © 2022 Aleksandr Vityazev <[email protected]>
20;;; Copyright © 2022 Gabriel Arazas <[email protected]>
21;;; Copyright © 2022 Ricardo Wurmus <[email protected]>
22;;; Copyright © 2022 Mathieu Laparie <[email protected]>
23;;; Copyright © 2022 ( <[email protected]>
24;;; Copyright © 2022, 2025, 2026 John Kehayias <[email protected]>
25;;; Copyright © 2022 Greg Hogan <[email protected]>
26;;; Copyright © 2023 Arnav Andrew Jose <[email protected]>
27;;; Copyright © 2023 Wilko Meyer <[email protected]>
28;;; Copyright © 2023, 2024 Jaeme Sifat <[email protected]>
29;;; Copyright © 2023 Steve George <[email protected]>
30;;; Copyright © 2024 Troy Figiel <[email protected]>
31;;; Copyright © 2024 Herman Rimm <[email protected]>
32;;; Copyright © 2024 Tomas Volf <[email protected]>
33;;; Copyright © 2024 Suhail Singh <[email protected]>
34;;; Copyright © 2024 Jordan Moore <[email protected]>
35;;; Copyright © 2024 muradm <[email protected]>
36;;; Copyright © 2024 normally_js <[email protected]>
37;;; Copyright © 2025 Divya Ranjan Pattanaik <[email protected]>
38;;; Copyright © 2025 Andrew Wong <[email protected]>
39;;; Copyright © 2024 Danny Milosavljevic <[email protected]>
40;;; Copyright © 2024 David Elsing <[email protected]>
41;;; Copyright © 2025 Gabriel Santos <[email protected]>
42;;; Copyright © 2025 Timo Wilken <[email protected]>
43;;; Copyright © 2025 Igorj Gorjaĉev <[email protected]>
44;;; Copyright © 2025 Raven Hallsby <[email protected]>
45;;; Copyright © 2025 Samuel Sehnert <[email protected]>
46;;; Copyright © 2025 Julian Flake <[email protected]>
47;;; Copyright © 2025 Ahmad Jarara <[email protected]>
48;;; Copyright © 2025 Cayetano Santos <[email protected]>
49;;; Copyright © 2025 dan <[email protected]>
50;;; Copyright © 2026 Daniel Khodabakhsh <[email protected]>
51;;; Copyright © 2026 Luis Guilherme Coelho <[email protected]>
52;;; Copyright © 2026 Sughosha <[email protected]>
53;;; Copyright © 2026 Ashish SHUKLA <[email protected]>
54;;; Copyright © 2026 Daniel Martins <[email protected]>
55;;; Copyright © 2026 Yappaholic <[email protected]>
56;;;
57;;; This file is part of GNU Guix.
58;;;
59;;; GNU Guix is free software; you can redistribute it and/or modify it
60;;; under the terms of the GNU General Public License as published by
61;;; the Free Software Foundation; either version 3 of the License, or (at
62;;; your option) any later version.
63;;;
64;;; GNU Guix is distributed in the hope that it will be useful, but
65;;; WITHOUT ANY WARRANTY; without even the implied warranty of
66;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
67;;; GNU General Public License for more details.
68;;;
69;;; You should have received a copy of the GNU General Public License
70;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
71
72(define-module (gnu packages rust-apps)
73 #:use-module (guix build-system cargo)
74 #:use-module (guix build-system copy)
75 #:use-module (guix build-system glib-or-gtk)
76 #:use-module (guix build-system meson)
77 #:use-module (guix build-system pyproject)
78 #:use-module (guix deprecation)
79 #:use-module (guix download)
80 #:use-module (guix gexp)
81 #:use-module (guix git-download)
82 #:use-module ((guix licenses) #:prefix license:)
83 #:use-module (guix packages)
84 #:use-module (guix utils)
85 #:use-module (gnu packages)
86 #:use-module (gnu packages admin)
87 #:use-module (gnu packages base)
88 #:use-module (gnu packages bash)
89 #:use-module (gnu packages build-tools)
90 #:use-module (gnu packages c)
91 #:use-module (gnu packages cmake)
92 #:use-module (gnu packages compression)
93 #:use-module (gnu packages crypto)
94 #:use-module (gnu packages curl)
95 #:use-module (gnu packages databases)
96 #:use-module (gnu packages documentation)
97 #:use-module (gnu packages emacs)
98 #:use-module (gnu packages engineering)
99 #:use-module (gnu packages fontutils)
100 #:use-module (gnu packages freedesktop)
101 #:use-module (gnu packages haskell-xyz)
102 #:use-module (gnu packages glib)
103 #:use-module (gnu packages gnome)
104 #:use-module (gnu packages gnupg)
105 #:use-module (gnu packages gtk)
106 #:use-module (gnu packages ibus)
107 #:use-module (gnu packages icu4c)
108 #:use-module (gnu packages image)
109 #:use-module (gnu packages jemalloc)
110 #:use-module (gnu packages kde-internet)
111 #:use-module (gnu packages libusb)
112 #:use-module (gnu packages libunwind)
113 #:use-module (gnu packages linux)
114 #:use-module (gnu packages llvm)
115 #:use-module (gnu packages libffi)
116 #:use-module (gnu packages lua)
117 #:use-module (gnu packages ncurses)
118 #:use-module (gnu packages networking)
119 #:use-module (gnu packages shells)
120 #:use-module (gnu packages ssh)
121 #:use-module (gnu packages pcre)
122 #:use-module (gnu packages pdf)
123 #:use-module (gnu packages perl)
124 #:use-module (gnu packages pkg-config)
125 #:use-module (gnu packages protobuf)
126 #:use-module (gnu packages pulseaudio)
127 #:use-module (gnu packages python)
128 #:use-module (gnu packages python-build)
129 #:use-module (gnu packages python-xyz)
130 #:use-module (gnu packages ruby-xyz)
131 #:use-module (gnu packages regex)
132 #:use-module (gnu packages rust)
133 #:use-module (gnu packages security-token)
134 #:use-module (gnu packages sqlite)
135 #:use-module (gnu packages terminals)
136 #:use-module (gnu packages tls)
137 #:use-module (gnu packages tree-sitter)
138 #:use-module (gnu packages version-control)
139 #:use-module (gnu packages webkit)
140 #:use-module (gnu packages video)
141 #:use-module (gnu packages xdisorg)
142 #:use-module (gnu packages xorg)
143 #:use-module (gnu packages wxwidgets))
144
145(define-public aardvark-dns
146 (package
147 (name "aardvark-dns")
148 (version "2.0.0")
149 (source
150 (origin
151 (method url-fetch)
152 (uri (crate-uri "aardvark-dns" version))
153 (file-name (string-append name "-" version ".tar.gz"))
154 (sha256
155 (base32 "0ypbiqkzdlw8zk36ggkzmglqgyq6ya7g7zz4fxf2qy0j9w1l48j2"))))
156 (build-system cargo-build-system)
157 (arguments
158 `(#:install-source? #f))
159 (inputs (cargo-inputs 'aardvark-dns))
160 (home-page "https://github.com/containers/aardvark-dns")
161 (synopsis "Container-focused DNS A/AAAA record server")
162 (description
163 "Aardvark-dns is an authoritative DNS server for A/AAAA container
164records. It can forward other requests to configured resolvers.")
165 (license license:asl2.0)))
166
167(define-public agate
168 (package
169 (name "agate")
170 (version "3.3.14")
171 (source
172 (origin
173 (method url-fetch)
174 (uri (crate-uri "agate" version))
175 (file-name (string-append name "-" version ".tar.gz"))
176 (sha256
177 (base32 "1g1zrk3zmyckafcy8rjqjpk9hmas8wgxydhgm70cirsxhz661as6"))))
178 (build-system cargo-build-system)
179 (arguments
180 `(#:install-source? #f))
181 (native-inputs (list pkg-config))
182 (inputs (cons openssl (cargo-inputs 'agate)))
183 (home-page "https://github.com/mbrubeck/agate")
184 (synopsis "Very simple server for the Gemini hypertext protocol")
185 (description
186 "Agate is a server for the Gemini network protocol, built with the Rust
187programming language. It has very few features, and can only serve static
188files. It uses async I/O, and should be quite efficient even when running on
189low-end hardware and serving many concurrent requests.")
190 (license (list license:expat license:asl2.0))))
191
192(define-public age-plugin-yubikey
193 (package
194 (name "age-plugin-yubikey")
195 (version "0.5.1")
196 (source
197 (origin
198 (method url-fetch)
199 (uri (crate-uri "age-plugin-yubikey" version))
200 (file-name (string-append name "-" version ".tar.gz"))
201 (sha256
202 (base32 "02cjphgj6c355yixd2ickzpb6jal95iyzp65yfry1kq1nbqcwams"))))
203 (build-system cargo-build-system)
204 (arguments
205 `(#:install-source? #f
206 #:phases
207 ,@(if (%current-target-system)
208 `(%standard-phases)
209 `((modify-phases %standard-phases
210 (add-after 'install 'install-extras
211 (lambda* (#:key outputs #:allow-other-keys)
212 (invoke "cargo" "run" "--example" "generate-docs")
213 (install-file "target/manpages/age-plugin-yubikey.1.gz"
214 (string-append (assoc-ref outputs "out")
215 "/share/man/man1")))))))))
216 (native-inputs (list pkg-config))
217 (inputs (cons* pcsc-lite openssl
218 (cargo-inputs 'age-plugin-yubikey)))
219 (home-page "https://github.com/str4d/age-plugin-yubikey")
220 (synopsis "YubiKey plugin for age clients")
221 (description
222 "This package provides @code{YubiKey} plugin for age clients.")
223 (license (list license:expat license:asl2.0))))
224
225(define-public alfis
226 (package
227 (name "alfis")
228 (version "0.8.5")
229 (source
230 (origin
231 (method git-fetch)
232 (uri (git-reference
233 (url "https://github.com/Revertron/Alfis")
234 (commit (string-append "v" version))))
235 (file-name (git-file-name name version))
236 (sha256
237 (base32 "189dqgcnl11fdmd6242h1pbawlq7jdm22zykc1kkcj1dv6s55nvs"))
238 (snippet
239 #~(begin (use-modules (guix build utils))
240 ;; Use a packaged version of web-view.
241 (substitute* "Cargo.toml"
242 (("git = .*web-view\",") "version = \"*\",")
243 ((", git = .*ureq\"") "")
244 (("git = .*ecies-ed25519-ng.*version") "version"))))))
245 (build-system cargo-build-system)
246 (arguments
247 `(#:install-source? #f
248 #:cargo-test-flags
249 '("--release" "--"
250 "--skip=dns::client::tests::test_tcp_client"
251 "--skip=dns::client::tests::test_udp_client")))
252 (native-inputs
253 (list pkg-config))
254 (inputs
255 (cons* at-spi2-core
256 gtk
257 glib
258 pango
259 sqlite
260 webkitgtk-with-libsoup2
261 (cargo-inputs 'alfis)))
262 (home-page "https://github.com/Revertron/Alfis")
263 (synopsis "Alternative Free Identity System")
264 (description
265 "This project represents a minimal blockchain without cryptocurrency,
266capable of sustaining any number of domain names in a bunch of original
267alternative zones.")
268 (license license:agpl3+)))
269
270(define-public ast-grep
271 (package
272 (name "ast-grep")
273 (version "0.42.1")
274 (source
275 (origin
276 (method git-fetch)
277 (uri (git-reference
278 (url "https://github.com/ast-grep/ast-grep")
279 (commit version)))
280 (file-name (git-file-name name version))
281 (sha256
282 (base32 "1h6335dq768vn7gfyhi90j1ljawpsf7wzgqzysgbwrwnk6h67mad"))
283 (snippet
284 #~(begin (use-modules (guix build utils))
285 (delete-file-recursively "fixtures")))))
286 (build-system cargo-build-system)
287 (arguments
288 (list
289 #:install-source? #f
290 #:cargo-install-paths ''("crates/cli")
291 #:cargo-test-flags
292 ''("--"
293 ;; These tests require the bundled shared libraries.
294 "--skip=test::test_load_parser"
295 "--skip=test::test_register_lang")
296 #:modules '((guix build cargo-build-system)
297 (guix build utils)
298 (ice-9 match))
299 #:phases
300 #~(modify-phases %standard-phases
301 (add-after 'install 'install-completions
302 (lambda* (#:key native-inputs #:allow-other-keys)
303 (for-each
304 (match-lambda
305 ((shell . path)
306 (mkdir-p (in-vicinity #$output (dirname path)))
307 (let ((binary
308 (if #$(%current-target-system)
309 (search-input-file native-inputs "bin/ast-grep")
310 (in-vicinity #$output "bin/ast-grep"))))
311 (with-output-to-file (in-vicinity #$output path)
312 (lambda _
313 (invoke binary "completions" shell))))))
314 '(("bash" . "share/bash-completion/completions/ast-grep")
315 ("elvish" . "share/elvish/lib/ast-grep")
316 ("fish" . "share/fish/vendor_completions.d/ast-grep.fish")
317 ("zsh" . "share/zsh/site-functions/_ast-grep")))))
318 (add-after 'install 'wrap-sg
319 (lambda _
320 ;; sg needs ast-grep to be in its PATH.
321 (wrap-program (in-vicinity #$output "bin/sg")
322 `("PATH" ":" prefix
323 (,(dirname (in-vicinity #$output "bin/ast-grep"))))))))))
324 (native-inputs
325 (if (%current-target-system)
326 (list this-package)
327 '()))
328 (inputs (cons* bash-minimal (cargo-inputs 'ast-grep)))
329 (home-page "https://github.com/ast-grep/ast-grep")
330 (synopsis "CLI tool for code structural search, lint, and rewriting")
331 (description
332 "@code{ast-grep} is an abstract syntax tree based tool to search code by
333pattern code. Think of it as your old-friend grep, but matching AST nodes
334instead of text. Write patterns as if you are writing ordinary code. It will
335match all code that has the same syntactical structure. You can use @code{$}
336and upper case letters as a wildcard, e.g. @code{$MATCH}, to match any single
337AST node. Think of it as regular expression dot @code{.}, except it is not
338textual.")
339 (license license:expat)))
340
341(define-public atuin
342 (package
343 (name "atuin")
344 (version "18.16.1")
345 (source
346 (origin
347 (method git-fetch)
348 (uri (git-reference
349 (url "https://github.com/atuinsh/atuin")
350 (commit (string-append "v" version))))
351 (file-name (git-file-name name version))
352 (sha256
353 (base32 "1q4d7z9yhdz7adxr0fp80acnay47zr47mcchbwdkpvgcsdx4bcjy"))
354 (snippet
355 #~(begin
356 (use-modules (guix build utils))
357 ;; No new Rust features are actually used.
358 (substitute* "Cargo.toml"
359 (("^rust-version = \"1\\.95\\.0\"") "rust-version = \"1.93.0\""))))))
360 (build-system cargo-build-system)
361 (arguments
362 (list
363 #:modules
364 '((guix build cargo-build-system)
365 (guix build utils)
366 (ice-9 match))
367 #:install-source? #f
368 #:cargo-test-flags
369 '(list "--no-default-features"
370 ;; Include all workspace tests except features we disable and an
371 ;; unused benchmark.
372 "--workspace"
373 "--exclude=atuin-nucleo-bench"
374 "--exclude=atuin-ai"
375 "--exclude=atuin-daemon"
376 "--exclude=atuin-pty-proxy"
377 "--"
378 ;; These tests require a Postgresql database connection.
379 "--skip=sync"
380 "--skip=change_password"
381 "--skip=multi_user_test"
382 "--skip=registration")
383 ;; Atuin’s workspace members explicitly include all package
384 ;; subdirectories, meaning cargo build will build each package
385 ;; regardless of feature selection and install paths. Specify just the
386 ;; top level package so we don’t build unused packages.
387 #:cargo-build-flags
388 '(list "--no-default-features" "--package" "atuin")
389 #:cargo-install-paths ''("crates/atuin")
390 ;; Disable experimental daemon, ai, and pty-proxy features. Disable
391 ;; check-update since updates are managed by Guix.
392 #:features
393 '(list "client"
394 "sync"
395 "clipboard")
396 #:phases
397 #~(modify-phases %standard-phases
398 (add-after 'unpack 'patch-references
399 (lambda _
400 (substitute* (find-files "crates/atuin/src/shell")
401 (("atuin (uuid|history|search)" all)
402 (string-append #$output "/bin/" all)))))
403 (add-before 'check 'pre-check
404 (lambda _
405 (setenv "HOME" "/tmp")))
406 ;; The 'check phase doesn't honor #:features
407 (replace 'check
408 (lambda* (#:key features cargo-test-flags #:allow-other-keys
409 #:rest args)
410 (apply (assoc-ref %standard-phases 'check)
411 (append
412 args
413 (list #:cargo-test-flags
414 (append (list "--features"
415 (string-join features))
416 cargo-test-flags))))))
417 ;; The 'install phase can't pass '--no-default-features'
418 (replace 'install
419 (lambda* (#:key cargo-install-paths features #:allow-other-keys)
420 (mkdir-p #$output)
421 (setenv "CARGO_TARGET_DIR" "./target")
422 (for-each
423 (lambda (path)
424 (invoke "cargo" "install" "--offline" "--no-track"
425 "--path" path "--root" #$output
426 "--no-default-features"
427 "--features" (string-join features)))
428 (if (null? cargo-install-paths)
429 '(".")
430 cargo-install-paths))))
431 (add-after 'install 'install-completions
432 (lambda* (#:key native-inputs #:allow-other-keys)
433 (for-each
434 (match-lambda
435 ((shell . path)
436 (mkdir-p (in-vicinity #$output (dirname path)))
437 (let ((binary
438 (if #$(%current-target-system)
439 (search-input-file native-inputs "bin/atuin")
440 (in-vicinity #$output "bin/atuin"))))
441 (with-output-to-file (in-vicinity #$output path)
442 (lambda _
443 (invoke binary "gen-completions" "--shell" shell))))))
444 '(("bash" . "share/bash-completion/completions/atuin")
445 ("elvish" . "share/elvish/lib/atuin")
446 ("fish" . "share/fish/vendor_completions.d/atuin.fish")
447 ("nushell" . "share/nushell/vendor/autoload/atuin")
448 ("zsh" . "share/zsh/site-functions/_atuin"))))))))
449 (native-inputs
450 (if (%current-target-system)
451 (list this-package)
452 '()))
453 (inputs (cons* sqlite
454 (cargo-inputs 'atuin)))
455 (home-page "https://atuin.sh")
456 (synopsis "Shell history tool")
457 (description "Atuin replaces your existing shell history with a SQLite
458database, and records additional context for your commands. With this context,
459Atuin gives you faster and better search of your shell history.
460
461Additionally, Atuin (optionally) syncs your shell history between all of your
462machines, fully end-to-end encrypted.
463
464Please note the Guix package currently disables several default features,
465including the daemon, PTY proxy, and Atuin AI.")
466 (license (list license:expat license:mpl2.0))))
467
468(define-public bat
469 (package
470 (name "bat")
471 (version "0.26.1")
472 (source
473 (origin
474 (method url-fetch)
475 (uri (crate-uri "bat" version))
476 (file-name (string-append name "-" version ".tar.gz"))
477 (sha256
478 (base32 "028d7gqblrlwab6d7y46f5xm199nky9x9f4l2vz7m0mn9lbd0rng"))))
479 (build-system cargo-build-system)
480 (arguments
481 (list
482 #:install-source? #f
483 #:imported-modules (append %copy-build-system-modules
484 %cargo-build-system-modules)
485 #:modules '((guix build cargo-build-system)
486 ((guix build copy-build-system) #:prefix copy:)
487 (guix build utils))
488 #:phases
489 #~(modify-phases %standard-phases
490 (add-before 'build 'pre-build
491 (lambda _
492 (setenv "BAT_ASSETS_GEN_DIR" (string-append (getcwd) "/target"))))
493 (add-after 'install 'install-extras
494 (lambda args
495 (apply (assoc-ref copy:%standard-phases 'install)
496 #:install-plan
497 '(("target/assets/completions/bat.bash"
498 "share/bash-completion/completions/bat")
499 ("target/assets/completions/bat.fish"
500 "share/fish/vendor_completions.d/")
501 ("target/assets/completions/bat.zsh"
502 "share/zsh/site-functions/_bat")
503 ("target/assets/manual/bat.1" "share/man/man1/"))
504 args))))))
505 (native-inputs (list pkg-config))
506 (inputs (cons* libgit2-1.9 oniguruma zlib (cargo-inputs 'bat)))
507 (home-page "https://github.com/sharkdp/bat")
508 (synopsis "@command{cat} clone with syntax highlighting and git integration")
509 (description
510 "@command{bat} is a drop-in @command{cat} replacement featuring syntax
511highlighting for a large number of languages, git integration, and automatic
512paging.")
513 (license (list license:expat license:asl2.0))))
514
515(define-public bibtex-format
516 (let ((commit "dae63e9f756cb7dc62dd4912ee4cbdd2fe59e603")
517 (revision "0"))
518 (package
519 (name "bibtex-format")
520 (version (git-version "0.2.0" revision commit))
521 (source
522 (origin
523 (method git-fetch)
524 (uri (git-reference
525 (url "https://gitlab.com/smaller-infinity/bibtex-format.git/")
526 (commit commit)))
527 (file-name (git-file-name name version))
528 (sha256
529 (base32 "19ax1minkxzcncmlrsnj5dbfwq7v3w1h1vwrwk2rhj49binjz96j"))))
530 (build-system cargo-build-system)
531 (arguments
532 (list
533 #:install-source? #f))
534 (inputs (cargo-inputs 'bibtex-format))
535 (home-page "https://gitlab.com/smaller-infinity/bibtex-format")
536 (synopsis "BibTeX formatter that is compliant with Emacs's bibtex-mode")
537 (description
538 "A fast Bibtex formatter that is (largely) compliant with emacs's
539bibtex-mode. This project aims to help with that by building a new formatter
540in Rust that is fast but follows the same (or at least similar) behavior as
541the emacs formatter.")
542 (license license:mpl2.0))))
543
544(define-public bottom
545 (package
546 (name "bottom")
547 (version "0.12.3")
548 (source
549 (origin
550 (method url-fetch)
551 (uri (crate-uri "bottom" version))
552 (file-name (string-append name "-" version ".tar.gz"))
553 (sha256
554 (base32 "0vnm6l527pzlpk3jb6qai4jhs7l5c9d9vagxgzc6m7kws8srkqii"))))
555 (build-system cargo-build-system)
556 (arguments
557 (list
558 #:install-source? #f
559 #:cargo-test-flags
560 '(list "--"
561 "--skip=valid_config_tests::test_all_proc"
562 "--skip=valid_config_tests::test_basic"
563 "--skip=valid_config_tests::test_cpu_doughnut"
564 "--skip=valid_config_tests::test_empty"
565 "--skip=valid_config_tests::test_filtering"
566 "--skip=valid_config_tests::test_many_proc"
567 "--skip=valid_config_tests::test_styling_sanity_check"
568 "--skip=valid_config_tests::test_styling_sanity_check_2"
569 "--skip=valid_config_tests::test_linux_only"
570 "--skip=valid_config_tests::test_new_default"
571 "--skip=valid_config_tests::test_proc_columns"
572 "--skip=valid_config_tests::test_theme")
573 #:imported-modules (append %copy-build-system-modules
574 %cargo-build-system-modules)
575 #:modules '((guix build cargo-build-system)
576 ((guix build copy-build-system) #:prefix copy:)
577 (guix build utils))
578 #:phases
579 #~(modify-phases %standard-phases
580 (add-after 'unpack 'enable-building-completions
581 (lambda _
582 (setenv "BTM_GENERATE" "true")))
583 (add-after 'install 'install-extras
584 (lambda args
585 (apply (assoc-ref copy:%standard-phases 'install)
586 #:install-plan
587 '(("target/tmp/bottom/completion/btm.bash"
588 "share/bash-completion/completions/btm")
589 ("target/tmp/bottom/completion/btm.elv"
590 "share/elvish/lib/btm")
591 ("target/tmp/bottom/completion/btm.fish"
592 "share/fish/vendor_completions.d/")
593 ("target/tmp/bottom/completion/btm.nu"
594 "share/nushell/vendor/autoload/btm")
595 ("target/tmp/bottom/completion/_btm"
596 "share/zsh/site-functions/_btm")
597 ("target/tmp/bottom/manpage/btm.1" "share/man/man1/"))
598 args))))))
599 (inputs (cargo-inputs 'bottom))
600 (home-page "https://github.com/ClementTsang/bottom")
601 (synopsis "Customizable graphical process/system monitor for the terminal")
602 (description
603 "This package provides a customizable graphical process/system monitor for
604the terminal.")
605 (license license:expat)))
606
607(define-public bzmenu
608 (package
609 (name "bzmenu")
610 (version "0.4.0")
611 (source
612 (origin
613 (method git-fetch)
614 (uri (git-reference
615 (url "https://github.com/e-tho/bzmenu")
616 (commit (string-append "v" version))))
617 (file-name (git-file-name name version))
618 (sha256
619 (base32
620 "0mdfbp69az6i6lb4nlr0ahwz2894qls5v6lbkpqmg8y0szyq5i1v"))))
621 (build-system cargo-build-system)
622 (arguments
623 (list #:install-source? #f))
624 (native-inputs (list pkg-config))
625 (inputs (cons* dbus (cargo-inputs 'bzmenu)))
626 (home-page "https://github.com/e-tho/bzmenu")
627 (synopsis "Launcher-driven Bluetooth manager")
628 (description
629 "@code{bzmenu} (BlueZ Menu) manages Bluetooth through your launcher of
630choice. Supported launchers are: dmenu, fuzzel, rofi, walker and custom.")
631 (license license:gpl3)))
632
633;; Note: It has expat license.
634;; Note: That is supposedly the (unreleased) version 0.6.3.
635(define %tinycbor-source
636 (origin
637 (method git-fetch)
638 (uri (git-reference
639 (url "https://github.com/intel/tinycbor")
640 (commit "d393c16f3eb30d0c47e6f9d92db62272f0ec4dc7")))
641 (file-name "tinycbor-src")
642 (sha256
643 (base32
644 "0w38lzj0rz36skc1cn3shllc82c7nn32h88frb8f164a8haq3hkw"))))
645
646(define-public c2rust
647 (package
648 (name "c2rust")
649 (version "0.22.1")
650 (source
651 (origin
652 (method url-fetch)
653 (uri (crate-uri "c2rust" version))
654 (file-name (string-append name "-" version ".tar.gz"))
655 (sha256
656 (base32 "0frzcnyah3a1srdwyx2rcpbh7hpwy6608cvhsqz5z9hdc08z8cg3"))))
657 (build-system cargo-build-system)
658 (native-inputs (list clang-13 cmake-minimal %tinycbor-source))
659 (inputs (cons llvm-13 (cargo-inputs 'c2rust)))
660 (arguments
661 (list #:install-source? #f
662 #:phases
663 #~(modify-phases %standard-phases
664 (add-before 'build 'patch
665 (lambda _
666 ;; The build process will slightly patch the sources.
667 (copy-recursively
668 #+(this-package-native-input "tinycbor-src")
669 "/tmp/tinycbor")
670 (substitute*
671 (string-append "guix-vendor/rust-c2rust-ast-exporter-"
672 #$(package-version this-package)
673 ".tar.gz/src/CMakeLists.txt")
674 (("GIT_TAG .*") "")
675 (("GIT_REPOSITORY .*")
676 "SOURCE_DIR \"/tmp/tinycbor\"\n")))))))
677 (home-page "https://c2rust.com/")
678 (synopsis "C to Rust translation, refactoring, and cross-checking")
679 (description
680 "This package provides C to Rust translation, refactoring, and cross-checking.")
681 (license license:bsd-3)))
682
683(define-public catppuccin-whiskers
684 (package
685 (name "catppuccin-whiskers")
686 (version "2.9.0")
687 (source
688 (origin
689 (method url-fetch)
690 (uri (crate-uri "catppuccin-whiskers" version))
691 (file-name (string-append name "-" version ".tar.gz"))
692 (sha256
693 (base32 "0hyiac3436494grgajaznr7dbrfbjzcan5ih5dym1g599ajsavlj"))))
694 (build-system cargo-build-system)
695 (arguments '(#:install-source? #f))
696 (inputs (cargo-inputs 'catppuccin-whiskers))
697 (home-page "https://github.com/catppuccin/whiskers")
698 (synopsis "Soothing port creation tool for the high-spirited")
699 (description
700 "Whiskers is a helper tool that is custom-built to create ports of the
701Catppuccin color theme, allowing developers to define template files which
702the palette can be injected into.")
703 (license license:expat)))
704
705(define-public cargo-audit
706 (package
707 (name "cargo-audit")
708 (version "0.22.0")
709 (source
710 (origin
711 (method url-fetch)
712 (uri (crate-uri "cargo-audit" version))
713 (file-name (string-append name "-" version ".tar.gz"))
714 (sha256
715 (base32 "18akvsm5zlc8352phs8sifks1n9s1dp7q209slbfdb9d0zz3xa9i"))))
716 (build-system cargo-build-system)
717 (arguments (list #:install-source? #f))
718 (inputs (cargo-inputs 'cargo-audit))
719 (home-page "https://rustsec.org/")
720 (synopsis "Audit Cargo.lock for crates with security vulnerabilities")
721 (description
722 "This package provides a Cargo subcommand, @command{cargo audit}, to
723audit @file{Cargo.lock} for crates with security vulnerabilities.")
724 (license (list license:asl2.0 license:expat))))
725
726(define-public cargo-auditable
727 (package
728 (name "cargo-auditable")
729 (version "0.7.4")
730 (source
731 (origin
732 (method git-fetch)
733 (uri (git-reference
734 (url "https://github.com/rust-secure-code/cargo-auditable")
735 (commit (string-append "v" version))))
736 (file-name (git-file-name name version))
737 (sha256
738 (base32 "1z1bi1mx4db44mlsda4pfr25sk4r5jjq02wqmvn9vdlvmfllkgdd"))))
739 (build-system cargo-build-system)
740 (arguments
741 (list
742 #:install-source? #f
743 #:cargo-install-paths ''("cargo-auditable")
744 #:cargo-test-flags
745 '(list "--"
746 ;; error: output of --print=file-names missing
747 "--skip=test_wasm")
748 #:phases
749 #~(modify-phases %standard-phases
750 (add-after 'unpack 'remove-cargo.lock
751 (lambda _
752 (for-each delete-file
753 (find-files "." "Cargo\\.lock"))))
754 (add-after 'install 'install-manpage
755 (lambda _
756 (install-file "cargo-auditable/cargo-auditable.1"
757 (string-append #$output "/share/man/man1/")))))))
758 (inputs (cargo-inputs 'cargo-auditable))
759 (home-page "https://github.com/rust-secure-code/cargo-auditable")
760 (synopsis "Make production Rust binaries auditable")
761 (description
762 "Know the exact crate versions used to build your Rust executable. Audit
763binaries for known bugs or security vulnerabilities in production, at scale,
764with zero bookkeeping.
765
766This works by embedding data about the dependency tree in JSON format into a
767dedicated linker section of the compiled executable.
768
769The end goal is to get Cargo itself to encode this information in binaries.
770There is an RFC for an implementation within Cargo, for which this project paves
771the way: @url{https://github.com/rust-lang/rfcs/pull/2801,
772rust-lang/rfcs#2801}.")
773 (license (list license:expat license:asl2.0))))
774
775(define-public cargo-bloat
776 (package
777 (name "cargo-bloat")
778 (version "0.12.1")
779 (source
780 (origin
781 (method url-fetch)
782 (uri (crate-uri "cargo-bloat" version))
783 (file-name (string-append name "-" version ".tar.gz"))
784 (sha256
785 (base32 "0zhimclamvy4dggwnciras6w5ilc0wg0c0f7q8hq1qsmmf1w9qjn"))))
786 (build-system cargo-build-system)
787 (arguments
788 `(#:install-source? #f))
789 (inputs (cargo-inputs 'cargo-bloat))
790 (home-page "https://github.com/RazrFalcon/cargo-bloat")
791 (synopsis "Find out what takes most of the space in your executable")
792 (description
793 "This package provides a way to find out what takes most of the space
794in your executable.")
795 (license license:expat)))
796
797(define-public cargo-license
798 (package
799 (name "cargo-license")
800 (version "0.6.1")
801 (source
802 (origin
803 (method url-fetch)
804 (uri (crate-uri "cargo-license" version))
805 (file-name (string-append name "-" version ".tar.gz"))
806 (sha256
807 (base32 "0jw9sn91a23ry6sx3337gi6d56vykgar0i9rrrxgxh93mvdw0qgh"))))
808 (build-system cargo-build-system)
809 (arguments (list #:install-source? #f))
810 (inputs (cargo-inputs 'cargo-license))
811 (home-page "https://github.com/onur/cargo-license")
812 (synopsis "Cargo subcommand to see license of dependencies")
813 (description
814 "This package provides a Cargo subcommand, @command{cargo license}, to see
815license of dependencies.")
816 (license license:expat)))
817
818(define-public cargo-machete
819 (package
820 (name "cargo-machete")
821 (version "0.8.0")
822 (source
823 (origin
824 (method url-fetch)
825 (uri (crate-uri name version))
826 (file-name (string-append name "-" version ".tar.gz"))
827 (sha256
828 (base32 "1f9dlc2db5kak85fpq4m31ca0jcb66v3vdjfkwj96h9q3q2hphn1"))))
829 (build-system cargo-build-system)
830 (arguments
831 `(#:cargo-test-flags
832 '("--"
833 ;; Not all files are included.
834 "--skip=search_unused::test_crate_renaming_works"
835 "--skip=search_unused::test_false_positive_macro_use"
836 "--skip=search_unused::test_ignore_deps_works"
837 "--skip=search_unused::test_ignore_deps_workspace_works"
838 "--skip=search_unused::test_just_unused"
839 "--skip=search_unused::test_just_unused_with_manifest"
840 "--skip=search_unused::test_unused_kebab_spec"
841 "--skip=search_unused::test_unused_renamed_in_registry"
842 "--skip=search_unused::test_unused_renamed_in_spec"
843 "--skip=search_unused::test_unused_transitive"
844 "--skip=search_unused::test_with_bench"
845 "--skip=search_unused::test_workspace_from_relative_path"
846 "--skip=test_ignore_target")
847 #:install-source? #f))
848 (inputs (cargo-inputs 'cargo-machete))
849 (home-page "https://github.com/bnjbvr/cargo-machete")
850 (synopsis "Find unused dependencies in Cargo.toml")
851 (description "@code{cargo-machete} finds unused dependencies in Cargo.toml.")
852 (license (list license:expat license:asl2.0))))
853
854(define-public cargo-readme
855 (package
856 (name "cargo-readme")
857 (version "3.3.1")
858 (source
859 (origin
860 (method git-fetch)
861 (uri (git-reference
862 (url "https://github.com/webern/cargo-readme.git")
863 (commit (string-append "v" version))))
864 (file-name (string-append name "-" version ".tar.gz"))
865 (sha256
866 (base32 "1jwh2j4lw1hk08aflgk7pamnhdbrzr47dc0ipzczn48k6008fm8l"))))
867 (build-system cargo-build-system)
868 (arguments
869 `(#:install-source? #f
870 #:phases
871 (modify-phases %standard-phases
872 (add-before 'check 'fix-test-warnings
873 (lambda _
874 ;; Otherwise the test case will see the warning being emitted
875 ;; that "config" is deprecated.
876 (when (file-exists? ".cargo/config")
877 (rename-file ".cargo/config"
878 ".cargo/config.toml")))))))
879 (inputs (cargo-inputs 'cargo-readme))
880 (home-page "https://github.com/webern/cargo-readme")
881 (synopsis
882 "Cargo subcommand to generate README.md content from doc comments")
883 (description
884 "This package provides a Cargo subcommand to generate README.md content from doc
885comments.")
886 (license (list license:expat license:asl2.0))))
887
888(define-public cargo-remark
889 (package
890 (name "cargo-remark")
891 (version "0.1.2")
892 (source
893 (origin
894 (method url-fetch)
895 (uri (crate-uri "cargo-remark" version))
896 (file-name (string-append name "-" version ".tar.gz"))
897 (sha256
898 (base32 "0hfg3drsmyif7g8sqc40a5nzkzygqr9gqdajhaydh7dah2w8gkyq"))))
899 (build-system cargo-build-system)
900 (arguments
901 `(#:install-source? #f))
902 (inputs
903 (cons mimalloc (cargo-inputs 'cargo-remark)))
904 (home-page "https://github.com/kobzol/cargo-remark")
905 (synopsis
906 "Cargo subcommand for displaying LLVM optimization remarks from compiling Rust programs")
907 (description
908 "This package provides a Cargo subcommand for displaying LLVM optimization remarks from
909compiling Rust programs.")
910 (license license:expat)))
911
912(define-public cargo-show-asm
913 (package
914 (name "cargo-show-asm")
915 (version "0.2.57")
916 (source
917 (origin
918 (method url-fetch)
919 (uri (crate-uri "cargo-show-asm" version))
920 (file-name (string-append name "-" version ".tar.gz"))
921 (sha256
922 (base32 "1h2mq0f7ch8a70q7g1z4p01ipknlswx1d003ph8z6kqfsx58vqyr"))))
923 (build-system cargo-build-system)
924 (inputs
925 (cons capstone (cargo-inputs 'cargo-show-asm)))
926 (arguments
927 `(#:install-source? #f))
928 (home-page "https://github.com/pacak/cargo-show-asm")
929 (synopsis
930 "Cargo subcommand that displays the generated assembly of Rust source code")
931 (description
932 "This package provides a cargo subcommand that displays the generated assembly of
933Rust source code.")
934 (license (list license:expat license:asl2.0))))
935
936(define-public cargo-with
937 (package
938 (name "cargo-with")
939 (version "0.3.2")
940 (source
941 (origin
942 (method git-fetch)
943 (uri (git-reference
944 (url "https://github.com/cbourjau/cargo-with.git")
945 (commit "2eb3cbd87f221f24e780b84306574541de38a1e4")))
946 (file-name (string-append name "-" version ".tar.gz"))
947 (sha256
948 (base32 "127ifblgp7v2vv8iafl88y1cjyskymqdi0nzsavnyab0x9jiskcr"))))
949 (build-system cargo-build-system)
950 (arguments
951 `(#:install-source? #f))
952 (inputs (cargo-inputs 'cargo-with))
953 (home-page "https://github.com/cbourjau/cargo-with/")
954 (synopsis
955 "Cargo extension to run build artifacts through tools like `gdb`.")
956 (description
957 "This package provides a Cargo extension to run the build artifacts
958through tools like `gdb`.")
959 (license license:gpl3)))
960
961(define-public cocogitto
962 (package
963 (name "cocogitto")
964 (version "6.5.0")
965 (source
966 (origin
967 (method url-fetch)
968 (uri (crate-uri "cocogitto" version))
969 (file-name (string-append name "-" version ".tar.gz"))
970 (sha256
971 (base32 "0wpsvrws2lwy1kix0xfs5dqs8b7j5ixnaz2x25apfbnh6gf99vda"))
972 (snippet
973 #~(begin (use-modules (guix build utils))
974 (delete-file-recursively "website")))))
975 (build-system cargo-build-system)
976 (arguments
977 (list
978 #:install-source? #f
979 #:cargo-test-flags
980 '(list "--"
981 ;; Disable tests that depend on being run inside of the source repository
982 "--skip=conventional::changelog::release::test::should_get_a_release"
983 "--skip=git::hook::tests::add_all"
984 "--skip=git::hook::tests::add_pre_commit_hook"
985 "--skip=git::hook::tests::overwrite_pre_commit_hook"
986 "--skip=git::rev::cache::test::init_cache_ok"
987 "--skip=git::rev::revwalk::test::all_commits"
988 "--skip=git::rev::revwalk::test::from_previous_to_tag"
989 "--skip=git::rev::revwalk::test::from_tag_to_head"
990 "--skip=git::rev::revwalk::test::from_tag_to_tag_ok"
991 "--skip=git::rev::revwalk::test::get_release_range_integration_test"
992 "--skip=git::rev::revwalk::test::recursive_from_origin_to_head"
993 "--skip=cog_tests::changelog::get_changelog_range"
994 "--skip=cog_tests::commit::should_run_git_hooks")
995 #:modules '((guix build cargo-build-system)
996 (guix build utils)
997 (ice-9 match))
998 #:phases
999 #~(modify-phases %standard-phases
1000 (add-before 'check 'prepare-for-tests
1001 (lambda _
1002 ;; The tests try to run git as if it were already set up.
1003 (setenv "HOME" (getcwd))
1004 (invoke "git" "config" "--global" "user.email" "[email protected]")
1005 (invoke "git" "config" "--global" "user.name" "Guix")))
1006 (add-after 'install 'install-completions
1007 (lambda* (#:key native-inputs #:allow-other-keys)
1008 (for-each
1009 (match-lambda
1010 ((shell . path)
1011 (mkdir-p (in-vicinity #$output (dirname path)))
1012 (let ((binary
1013 (if #$(%current-target-system)
1014 (search-input-file native-inputs "bin/cog")
1015 (in-vicinity #$output "bin/cog"))))
1016 (with-output-to-file (in-vicinity #$output path)
1017 (lambda _
1018 (invoke binary "generate-completions" shell))))))
1019 '(("bash" . "share/bash-completion/completions/cog")
1020 ("elvish" . "share/elvish/lib/cog")
1021 ("fish" . "share/fish/vendor_completions.d/cog.fish")
1022 ("nu" . "share/nushell/vendor/autoload/cog")
1023 ("zsh" . "share/zsh/site-functions/_cog"))))))))
1024 (native-inputs
1025 (append (if (%current-target-system)
1026 (list this-package)
1027 '())
1028 (list git-minimal/pinned
1029 gnupg
1030 openssh
1031 pkg-config)))
1032 (inputs (cons* libgit2-1.9
1033 libssh2
1034 openssl
1035 zlib
1036 (cargo-inputs 'cocogitto)))
1037 (home-page "https://github.com/cocogitto/cocogitto")
1038 (synopsis
1039 "Set of CLI tools for the Conventional Commit and SemVer specifications")
1040 (description
1041 "This package provides Cocogitto, a set of CLI tools for the Conventional
1042Commit and SemVer specifications.")
1043 (license license:expat)))
1044
1045(define-public codeberg-cli
1046 (package
1047 (name "codeberg-cli")
1048 (version "0.5.5")
1049 (source
1050 (origin
1051 (method git-fetch)
1052 (uri (git-reference
1053 (url "https://codeberg.org/Aviac/codeberg-cli")
1054 (commit (string-append "v" version))))
1055 (file-name (git-file-name name version))
1056 (sha256
1057 (base32 "0xmbxaqagpscxzb4f4r819ik2nz638c0w7rgnf87pxpfhhpq0dfa"))))
1058 (build-system cargo-build-system)
1059 (arguments
1060 (list
1061 #:install-source? #f
1062 #:modules
1063 '((guix build cargo-build-system)
1064 (guix build utils)
1065 (ice-9 match))
1066 #:phases
1067 #~(modify-phases %standard-phases
1068 (add-after 'install 'install-completions
1069 (lambda* (#:key native-inputs #:allow-other-keys)
1070 (for-each
1071 (match-lambda
1072 ((shell . path)
1073 (mkdir-p (in-vicinity #$output (dirname path)))
1074 (let ((binary
1075 (if #$(%current-target-system)
1076 (search-input-file native-inputs "bin/berg")
1077 (in-vicinity #$output "bin/berg"))))
1078 (with-output-to-file (in-vicinity #$output path)
1079 (lambda _
1080 (invoke binary "completion" shell))))))
1081 '(("bash" . "share/bash-completion/completions/berg")
1082 ("elvish" . "share/elvish/lib/berg")
1083 ("fish" . "share/fish/vendor_completions.d/berg.fish")
1084 ("zsh" . "share/zsh/site-functions/_berg"))))))))
1085 (native-inputs
1086 (append
1087 (if (%current-target-system)
1088 (list this-package)
1089 '())
1090 (list pkg-config)))
1091 (inputs
1092 (cons* libgit2-1.9 libssh2 openssl zlib (cargo-inputs 'codeberg-cli)))
1093 (home-page "https://codeberg.org/Aviac/codeberg-cli")
1094 (synopsis "CLI Tool for codeberg similar to gh and glab")
1095 (description
1096 "This package provides CLI Tool for codeberg similar to gh and glab.")
1097 (license license:agpl3+)))
1098
1099(define-public complgen
1100 (package
1101 (name "complgen")
1102 (version "0.8.3")
1103 (source
1104 (origin
1105 (method git-fetch)
1106 (uri (git-reference
1107 (url "https://github.com/adaszko/complgen")
1108 (commit (string-append "v" version))))
1109 (file-name (git-file-name name version))
1110 (sha256
1111 (base32 "034ld2qxgafm21xlhq93pdmimg08x2x507m5sdvll2zgxgcx326g"))))
1112 (build-system cargo-build-system)
1113 (arguments
1114 (list
1115 #:install-source? #f))
1116 (native-inputs (list git-minimal/pinned))
1117 (inputs (cargo-inputs 'complgen))
1118 (home-page "https://github.com/adaszko/complgen")
1119 (synopsis "Declarative bash/fish/zsh completions without writing shell
1120scripts")
1121 (description
1122 "@command{complgen} is a tool that allows you to generate
1123completion scripts for all major shells (@code{bash}, @code{fish}, @code{zsh})
1124from a single, concise, @code{EBNF}-like grammar.")
1125 (license license:asl2.0)))
1126
1127(define-public cyme
1128 (package
1129 (name "cyme")
1130 (version "1.7.0")
1131 (source
1132 (origin
1133 (method url-fetch)
1134 (uri (crate-uri "cyme" version))
1135 (file-name (string-append name "-" version ".tar.gz"))
1136 (sha256
1137 (base32 "0qss8cpsdbxlljscd046a14d624k5kcawwlw9n9r60shk9gljqpj"))))
1138 (build-system cargo-build-system)
1139 (arguments
1140 `(#:install-source? #f
1141 #:cargo-test-flags '("--release" "--"
1142 ;; Disable tests as they try to access host USB.
1143 "--skip=test_list"
1144 "--skip=test_list_filtering"
1145 "--skip=test_run"
1146 "--skip=test_tree"
1147 "--skip=test_tree_filtering"
1148 "--skip=test_lsusb_device"
1149 "--skip=test_lsusb_list"
1150 "--skip=test_lsusb_show"
1151 "--skip=test_lsusb_tree"
1152 "--skip=test_lsusb_tree_verbose"
1153 "--skip=test_lsusb_vidpid"
1154 ;; unable to find hwdb.bin database file
1155 "--skip=udev::hwdb::get")
1156 #:phases
1157 (modify-phases %standard-phases
1158 (add-after 'install 'install-extras
1159 (lambda* (#:key outputs #:allow-other-keys)
1160 (let ((out (assoc-ref outputs "out")))
1161 (install-file "doc/cyme.1" (string-append out "/share/man/man1"))
1162 (mkdir-p (string-append out "/etc/bash_completion.d"))
1163 (copy-file "doc/cyme.bash"
1164 (string-append out "/etc/bash_completion.d/cyme"))
1165 (install-file "doc/cyme.fish"
1166 (string-append out "/share/fish/vendor_completions.d"))
1167 (install-file "doc/_cyme"
1168 (string-append out "/share/zsh/site-functions"))))))))
1169 (inputs (cons libusb (cargo-inputs 'cyme)))
1170 (native-inputs (list pkg-config))
1171 (home-page "https://github.com/tuna-f1sh/cyme")
1172 (synopsis "List system USB buses and devices")
1173 (description
1174 "This package provides a CLI tool to list system USB buses and devices
1175similar to lsusb.")
1176 (license license:gpl3+)))
1177
1178(define-public popsicle
1179 (package
1180 (name "popsicle")
1181 (version "1.3.3")
1182 (source
1183 (origin
1184 (method git-fetch)
1185 (uri (git-reference
1186 (url "https://github.com/pop-os/popsicle")
1187 (commit version)))
1188 (file-name (git-file-name name version))
1189 (sha256
1190 (base32 "1hf1pdid2nhr5i0x2xdr36zfd6pcvnqr9q70lpzgaxp8zrm0sr5i"))))
1191 (build-system cargo-build-system)
1192 (arguments
1193 (list
1194 #:install-source? #f
1195 #:cargo-build-flags
1196 ''("--release" "-p" "popsicle_cli")
1197 #:phases
1198 #~(modify-phases %standard-phases
1199 (add-after 'unpack 'use-guix-vendored-dependencies
1200 (lambda _
1201 (substitute* "cli/Cargo.toml"
1202 (("git =.*pb\", branch = \"write\"")
1203 "version = \"*\""))
1204 (substitute* "gtk/Cargo.toml"
1205 (("git = .*dbus-udisks2\"") "version = \"*\"")
1206 (("git = .*iso9660-rs\"") "version = \"*\""))))
1207 (replace 'install
1208 (lambda _
1209 (install-file "target/release/popsicle"
1210 (string-append #$output "/bin")))))))
1211 (inputs (cargo-inputs 'popsicle))
1212 (home-page "https://github.com/pop-os/popsicle")
1213 (synopsis "Multiple USB file flasher")
1214 (description
1215 "Popsicle is a utility for flashing multiple devices in parallel, written
1216in rust.")
1217 (license license:expat)))
1218
1219(define-public popsicle-gtk
1220 (package/inherit popsicle
1221 (name "popsicle-gtk")
1222 (arguments
1223 (substitute-keyword-arguments arguments
1224 ((#:cargo-build-flags _ '())
1225 ''("--release" "-p" "popsicle_gtk"))
1226 ((#:phases phases)
1227 #~(modify-phases #$phases
1228 (replace 'install
1229 (lambda _
1230 (install-file "target/release/popsicle-gtk"
1231 (string-append #$output "/bin"))
1232 (install-file "gtk/assets/com.system76.Popsicle.desktop"
1233 (string-append #$output "/share/applications"))
1234 (install-file "gtk/assets/com.system76.Popsicle.appdata.xml"
1235 (string-append #$output "/share/metainfo"))
1236 (copy-recursively "gtk/assets/icons"
1237 (string-append #$output
1238 "/share/icons/hicolor"))))))))
1239 (native-inputs (list clang `(,glib "bin") pkg-config))
1240 (inputs (modify-inputs inputs (append gtk+)))))
1241
1242(define-public diffr
1243 (package
1244 (name "diffr")
1245 (version "0.1.5")
1246 (source
1247 (origin
1248 (method url-fetch)
1249 (uri (crate-uri "diffr" version))
1250 (file-name (string-append name "-" version ".tar.gz"))
1251 (sha256
1252 (base32 "1kdngd5g1ssdiq7d10jr3jwg0sx740x3vmhq3j594a5kd467ikib"))))
1253 (build-system cargo-build-system)
1254 (arguments
1255 `(#:install-source? #f
1256 ;; https://github.com/mookid/diffr/issues/79
1257 #:cargo-test-flags
1258 '("--release" "--"
1259 "--skip=tests_cli::color_invalid_attribute_name"
1260 "--skip=tests_cli::color_invalid_color_not_done"
1261 "--skip=tests_cli::color_invalid_color_value_ansi"
1262 "--skip=tests_cli::color_invalid_color_value_name"
1263 "--skip=tests_cli::color_invalid_color_value_rgb"
1264 "--skip=tests_cli::color_invalid_face_name"
1265 "--skip=tests_cli::color_ok"
1266 "--skip=tests_cli::color_ok_multiple"
1267 "--skip=tests_cli::color_only_face_name"
1268 "--skip=tests_cli::debug_flag"
1269 "--skip=tests_cli::line_numbers_style"
1270 "--skip=tests_cli::test_bad_argument")))
1271 (inputs (cargo-inputs 'diffr))
1272 (home-page "https://github.com/mookid/diffr")
1273 (synopsis "Longest Common Sequence based diff highlighting tool")
1274 (description
1275 "This package provides an @acronym{LCS, longest common sequence} based diff
1276highlighting tool to ease code review from your terminal.")
1277 (license license:expat)))
1278
1279(define-public difftastic
1280 (package
1281 (name "difftastic")
1282 (version "0.69.0")
1283 (source
1284 (origin
1285 (method url-fetch)
1286 (uri (crate-uri "difftastic" version))
1287 (file-name (string-append name "-" version ".tar.gz"))
1288 (sha256
1289 (base32 "1wa2vhp26vbim8qp3rlahxmf65lzgacc5p6czc4hqsl3gglg0fs5"))))
1290 (build-system cargo-build-system)
1291 (arguments
1292 (list
1293 #:install-source? #f
1294 #:cargo-test-flags
1295 '(list "--"
1296 "--skip=display::side_by_side::tests::test_display_hunks"
1297 "--skip=display::style")
1298 #:phases
1299 #~(modify-phases %standard-phases
1300 ;; jemalloc needs unbundling for tikv-jemallocator-sys
1301 (add-before 'build 'override-jemalloc
1302 (lambda* (#:key inputs #:allow-other-keys)
1303 (let ((jemalloc (assoc-ref inputs "jemalloc")))
1304 ;; This flag is needed when not using the bundled jemalloc.
1305 ;; https://github.com/tikv/jemallocator/issues/19
1306 (setenv
1307 "CARGO_FEATURE_UNPREFIXED_MALLOC_ON_SUPPORTED_PLATFORMS" "1")
1308 (setenv "JEMALLOC_OVERRIDE"
1309 (string-append jemalloc "/lib/libjemalloc.so"))))))))
1310 (inputs
1311 (cons jemalloc (cargo-inputs 'difftastic)))
1312 (home-page "https://difftastic.wilfred.me.uk/")
1313 (synopsis "Structural diff command that understands syntax")
1314 (description
1315 "@command{difft} provides a structural diff that understands syntax. It
1316compares files using the syntax, not line-by-line providing accurate diffs
1317that are easier to read. It works with a variety of languages including
1318Javascript, Python, Rust and Scheme.")
1319 (license license:expat)))
1320
1321(define-public drill
1322 (package
1323 (name "drill")
1324 (version "0.8.2")
1325 (source
1326 (origin
1327 (method url-fetch)
1328 (uri (crate-uri "drill" version))
1329 (file-name (string-append name "-" version ".tar.gz"))
1330 (sha256
1331 (base32 "0jp9r19zc9m3hgxc7a98fhyi1ga0qwjprxjsqaxiykmjpb86bxf3"))))
1332 (build-system cargo-build-system)
1333 (arguments
1334 `(#:install-source? #f))
1335 (native-inputs
1336 (list pkg-config))
1337 (inputs
1338 (cons openssl (cargo-inputs 'drill)))
1339 (home-page "https://github.com/fcsonline/drill")
1340 (synopsis "HTTP load testing application")
1341 (description
1342 "Drill is a HTTP load testing application written in Rust inspired by
1343Ansible syntax. Benchmark files can be written in YAML.")
1344 (license license:gpl3)))
1345
1346(define-public dumbpipe
1347 (package
1348 (name "dumbpipe")
1349 (version "0.32.0")
1350 (source
1351 (origin
1352 (method url-fetch)
1353 (uri (crate-uri "dumbpipe" version))
1354 (file-name (string-append name "-" version ".tar.gz"))
1355 (sha256
1356 (base32 "1z3jxjylb2w3lgqf7g1dirnk7f37scim27xliii4pz4dx9lv33jf"))))
1357 (build-system cargo-build-system)
1358 (arguments
1359 (list
1360 #:install-source? #f
1361 ;; Tests require network access.
1362 #:tests? #f))
1363 (inputs (cargo-inputs 'dumbpipe))
1364 (home-page "https://github.com/n0-computer/dumbpipe")
1365 (synopsis "CLI tool to pipe data over the network, with NAT hole punching")
1366 (description
1367 "This package provides a cli tool to pipe data over the network, with NAT
1368hole punching. It uses iroh to establish peer-to-peer connections between
1369systems.")
1370 (license (list license:expat license:asl2.0))))
1371
1372(define-public dutree
1373 (package
1374 (name "dutree")
1375 (version "0.2.18")
1376 (source
1377 (origin
1378 (method url-fetch)
1379 (uri (crate-uri "dutree" version))
1380 (file-name (string-append name "-" version ".tar.gz"))
1381 (sha256
1382 (base32 "1611h27i8fm3jndscd6w65z8z7w09nnrm61vdgs9kb8ln57gqm8x"))))
1383 (build-system cargo-build-system)
1384 (arguments
1385 `(#:install-source? #f))
1386 (inputs (cargo-inputs 'dutree))
1387 (home-page "https://ownyourbits.com/2018/03/25/analyze-disk-usage-with-dutree/")
1388 (synopsis "Command line tool to analyze disk usage")
1389 (description
1390 "@command{dutree} is command line tool to analyze disk usage.
1391Features include:
1392@enumerate
1393@item coloured output, according to the @code{LS_COLORS} environment variable.
1394@item display the file system tree.
1395@item ability to aggregate small files.
1396@item ability to exclude files or directories.
1397@item ability to compare different directories.
1398@item fast, written in Rust.
1399@end enumerate\n")
1400 (license license:gpl3)))
1401
1402(define-public emacs-lsp-booster
1403 (package
1404 (name "emacs-lsp-booster")
1405 (version "0.2.1")
1406 (source
1407 (origin
1408 (method git-fetch)
1409 (uri (git-reference
1410 (url "https://github.com/blahgeek/emacs-lsp-booster")
1411 (commit (string-append "v" version))))
1412 (file-name (git-file-name name version))
1413 (sha256
1414 (base32 "12vrgqyvm1841i9ld9b3axa9ybgqf3kr6nbfd0l4zdnhyljz3zxq"))))
1415 (build-system cargo-build-system)
1416 (arguments
1417 (list #:install-source? #f))
1418 (native-inputs (list emacs)) ; Not emacs-minimal
1419 (inputs (cargo-inputs 'emacs-lsp-booster))
1420 (home-page "https://github.com/blahgeek/emacs-lsp-booster")
1421 (synopsis "Emacs LSP performance booster")
1422 (description
1423 "@code{emacs-lsp-booster} improves the performance of @code{lsp-mode} and
1424@code{eglot} Emacs packages using a wrapper executable. See the home-page for
1425configuration instructions.")
1426 (license license:expat)))
1427
1428(define-public evremap
1429 (let ((commit "cc618e8b973f5c6f66682d1477b3b868a768c545")) ;version bump
1430 (package
1431 (name "evremap")
1432 (version "0.1.0")
1433 (source (origin
1434 (method git-fetch)
1435 (uri (git-reference
1436 (url "https://github.com/wez/evremap")
1437 (commit commit)))
1438 (file-name (git-file-name name version))
1439 (sha256
1440 (base32
1441 "182ry573q8kjsxx2hvxk9d6clahpll1vh50zvs5g652jd6a2f038"))))
1442 (build-system cargo-build-system)
1443 (arguments (list #:install-source? #f))
1444 (native-inputs (list pkg-config))
1445 (inputs (cons libevdev (cargo-inputs 'evremap)))
1446 (home-page "https://github.com/wez/evremap")
1447 (synopsis "Keyboard input remappper")
1448 (description
1449 "Evremap is a keyboard input remapper. It works by grabbing exclusive
1450access to an input device and maintaining a model of the keys that are
1451pressed. It then applies your remapping configuration to produce the
1452effective set of pressed keys and emits appropriate changes to a virtual
1453output device.
1454
1455Its remapping is effective system-wide: in Wayland, X11 and the Linux
1456console.")
1457 (license license:expat))))
1458
1459(define-public eza
1460 (package
1461 (name "eza")
1462 (version "0.23.5")
1463 (source
1464 (origin
1465 (method url-fetch)
1466 (uri (crate-uri "eza" version))
1467 (file-name (string-append name "-" version ".tar.gz"))
1468 (sha256
1469 (base32 "1bz9g96l0jhlabki496yva15z9agyi2qm21x5ldghqcq0nl9jh9k"))))
1470 (build-system cargo-build-system)
1471 (arguments
1472 (list
1473 #:install-source? #f
1474 #:imported-modules (append %copy-build-system-modules
1475 %cargo-build-system-modules)
1476 #:modules '((guix build cargo-build-system)
1477 ((guix build copy-build-system) #:prefix copy:)
1478 (guix build utils))
1479 #:phases
1480 #~(modify-phases %standard-phases
1481 (add-after 'install 'install-manual
1482 (lambda* (#:key inputs #:allow-other-keys #:rest args)
1483 (when (assoc-ref inputs "pandoc")
1484 (map (lambda (page)
1485 (with-output-to-file page
1486 (lambda _
1487 (invoke "pandoc" "--standalone"
1488 "-f" "markdown"
1489 "-t" "man"
1490 (string-append "man/" page ".md")))))
1491 (list "eza.1"
1492 "eza_colors.5"
1493 "eza_colors-explanation.5"))
1494 (apply (assoc-ref copy:%standard-phases 'install)
1495 #:install-plan
1496 '(("eza.1" "share/man/man1/")
1497 ("eza_colors.5" "share/man/man5/")
1498 ("eza_colors-explanation.5" "share/man/man5/"))
1499 args))))
1500 (add-after 'install 'install-completions
1501 (lambda args
1502 (apply (assoc-ref copy:%standard-phases 'install)
1503 #:install-plan
1504 '(("completions/bash/eza"
1505 "share/bash-completion/completions/")
1506 ("completions/fish/eza.fish"
1507 "share/fish/vendor_completions.d/")
1508 ("completions/nush/eza.nu"
1509 "share/nushell/vendor/autoload/")
1510 ("completions/zsh/_eza"
1511 "share/zsh/site-functions/"))
1512 args))))))
1513 (native-inputs
1514 (append (list pkg-config)
1515 (if (supported-package? pandoc)
1516 (list pandoc)
1517 '())))
1518 (inputs (cons* libgit2-1.9 zlib (cargo-inputs 'eza)))
1519 (home-page "https://eza.rocks/")
1520 (synopsis "Modern replacement for ls")
1521 (description
1522 "@code{eza} is a modern replacement for the command-line
1523program @code{ls}. It uses colours to distinguish file types and
1524metadata. It also knows about symlinks, extended attributes, and Git.
1525This package is the community maintained fork of @code{exa}.")
1526 (license license:eupl1.2)))
1527
1528(define-public fclones
1529 (package
1530 (name "fclones")
1531 (version "0.35.0")
1532 (source
1533 (origin
1534 (method url-fetch)
1535 (uri (crate-uri "fclones" version))
1536 (file-name (string-append name "-" version ".tar.gz"))
1537 (sha256
1538 (base32 "1danl1sn7l1b5wz27aqbx43nnvsm9nflly8l8xqf41c4ainq5j07"))))
1539 (build-system cargo-build-system)
1540 (arguments
1541 (list
1542 #:install-source? #f
1543 #:modules
1544 '((guix build cargo-build-system)
1545 (guix build utils)
1546 (ice-9 match))
1547 #:phases
1548 #~(modify-phases %standard-phases
1549 (add-after 'install 'install-completions
1550 (lambda* (#:key native-inputs #:allow-other-keys)
1551 (for-each
1552 (match-lambda
1553 ((shell . path)
1554 (mkdir-p (in-vicinity #$output (dirname path)))
1555 (let ((binary
1556 (if #$(%current-target-system)
1557 (search-input-file native-inputs "bin/fclones")
1558 (in-vicinity #$output "bin/fclones"))))
1559 (with-output-to-file (in-vicinity #$output path)
1560 (lambda _
1561 (invoke binary "complete" shell))))))
1562 '(("bash" . "share/bash-completion/completions/fclones")
1563 ("elvish" . "share/elvish/lib/fclones")
1564 ("fish" . "share/fish/vendor_completions.d/fclones.fish")
1565 ("zsh" . "share/zsh/site-functions/_fclones"))))))))
1566 (native-inputs
1567 (if (%current-target-system)
1568 (list this-package)
1569 '()))
1570 (inputs (cargo-inputs 'fclones))
1571 (home-page "https://github.com/pkolaczk/fclones")
1572 (synopsis "Find and operate on duplicate files")
1573 (description
1574 "@command{fclones} is a command line utility that identifies groups of
1575identical files and gets rid of the file copies you no longer need. It comes
1576with plenty of configuration options for controlling the search scope and
1577offers many ways of removing duplicates. For maximum flexibility, it
1578integrates well with other Unix utilities like @command{find} and it speaks
1579JSON, so you have a lot of control over the search and cleanup process.")
1580 (license license:expat)))
1581
1582(define-public fd
1583 (package
1584 (name "fd")
1585 (version "10.4.2")
1586 (source
1587 (origin
1588 (method url-fetch)
1589 (uri (crate-uri "fd-find" version))
1590 (file-name (string-append name "-" version ".tar.gz"))
1591 (sha256
1592 (base32
1593 "0dh4n15778l9bmdy4cxaqhbgi5gfdcgq05bpsjklc11yyp8xfpmr"))))
1594 (build-system cargo-build-system)
1595 (arguments
1596 (list
1597 #:cargo-test-flags
1598 ;; No user 'root' in the build environment.
1599 '(list "--release" "--"
1600 "--skip=test_owner_root")
1601 #:install-source? #f
1602 #:modules
1603 '((guix build cargo-build-system)
1604 (guix build utils)
1605 (ice-9 match))
1606 #:phases
1607 #~(modify-phases %standard-phases
1608 (add-after 'unpack 'override-jemalloc
1609 (lambda* (#:key inputs #:allow-other-keys)
1610 (let ((jemalloc (assoc-ref inputs "jemalloc")))
1611 ;; This flag is needed when not using the bundled jemalloc.
1612 ;; https://github.com/tikv/jemallocator/issues/19
1613 (setenv "CARGO_FEATURE_UNPREFIXED_MALLOC_ON_SUPPORTED_PLATFORMS" "1")
1614 (setenv "JEMALLOC_OVERRIDE"
1615 (string-append jemalloc "/lib/libjemalloc.so")))))
1616 (add-after 'install 'install-extras
1617 (lambda* (#:key native-inputs #:allow-other-keys)
1618 (install-file "doc/fd.1" (string-append #$output "/share/man/man1"))
1619 (for-each
1620 (match-lambda
1621 ((shell . path)
1622 (mkdir-p (in-vicinity #$output (dirname path)))
1623 (let ((binary
1624 (if #$(%current-target-system)
1625 (search-input-file native-inputs "bin/fd")
1626 (in-vicinity #$output "bin/fd"))))
1627 (with-output-to-file (in-vicinity #$output path)
1628 (lambda _
1629 (invoke binary "--gen-completions" shell))))))
1630 '(("bash" . "share/bash-completion/completions/fd")
1631 ("elvish" . "share/elvish/lib/fd")
1632 ("fish" . "share/fish/vendor_completions.d/fd.fish")
1633 ("zsh" . "share/zsh/site-functions/_fd"))))))))
1634 (inputs (cons jemalloc (cargo-inputs 'fd)))
1635 (native-inputs
1636 (if (%current-target-system)
1637 (list this-package)
1638 '()))
1639 (home-page "https://github.com/sharkdp/fd")
1640 (synopsis "Simple, fast and user-friendly alternative to find")
1641 (description
1642 "@code{fd} is a simple, fast and user-friendly alternative to @code{find}.
1643While it does not seek to mirror all of find's powerful functionality, it provides
1644defaults for 80% of the use cases.")
1645 (license (list license:expat license:asl2.0))))
1646
1647(define-public forgejo-cli
1648 (package
1649 (name "forgejo-cli")
1650 (version "0.5.0")
1651 (source
1652 (origin
1653 (method git-fetch)
1654 (uri (git-reference
1655 (url "https://codeberg.org/forgejo-contrib/forgejo-cli/")
1656 (commit (string-append "v" version))))
1657 (file-name (git-file-name name version))
1658 (sha256
1659 (base32 "1x3v56my22lckrpkcnpmf90vrn8m45ysdn0k12dfssldr8cjxapa"))))
1660 (build-system cargo-build-system)
1661 (arguments
1662 (list
1663 #:install-source? #f
1664 #:modules
1665 '((guix build cargo-build-system)
1666 (guix build utils)
1667 (ice-9 match))
1668 #:phases
1669 #~(modify-phases %standard-phases
1670 (add-after 'install 'install-completions
1671 (lambda* (#:key native-inputs #:allow-other-keys)
1672 (setenv "HOME" (getcwd))
1673 (for-each
1674 (match-lambda
1675 ((shell . path)
1676 (mkdir-p (in-vicinity #$output (dirname path)))
1677 (let ((binary
1678 (if #$(%current-target-system)
1679 (search-input-file native-inputs "bin/fj")
1680 (in-vicinity #$output "bin/fj"))))
1681 (with-output-to-file (in-vicinity #$output path)
1682 (lambda _
1683 (invoke binary "completion" shell))))))
1684 '(("bash" . "share/bash-completion/completions/fj")
1685 ("elvish" . "share/elvish/lib/fj")
1686 ("fish" . "share/fish/vendor_completions.d/fj.fish")
1687 ("nushell" . "share/nushell/vendor/autoload/fj")
1688 ("zsh" . "share/zsh/site-functions/_fj"))))))))
1689 (native-inputs
1690 (append
1691 (if (%current-target-system)
1692 (list this-package)
1693 '())
1694 (list pkg-config)))
1695 (inputs
1696 (cons* libgit2-1.9
1697 libssh2
1698 openssl
1699 zlib
1700 (cargo-inputs 'forgejo-cli)))
1701 (home-page "https://codeberg.org/forgejo-contrib/forgejo-cli/")
1702 (synopsis "CLI tool for Forgejo")
1703 (description "This package provides a CLI tool for Forgejo.")
1704 (license (list license:asl2.0 license:expat))))
1705
1706(define-public gitlogue
1707 (package
1708 (name "gitlogue")
1709 (version "0.9.0")
1710 (source
1711 (origin
1712 (method git-fetch)
1713 (uri (git-reference
1714 (url "https://github.com/unhappychoice/gitlogue")
1715 (commit (string-append "v" version))))
1716 (file-name (git-file-name name version))
1717 (sha256
1718 (base32
1719 "008cqcc4kjandfi6pqrnr689xb11d6fdhcb48kbv0227v3f5gvn3"))
1720 (modules '((guix build utils)))
1721 (snippet
1722 '(begin
1723 (substitute* "Cargo.toml"
1724 ;; Remove the features from git2.
1725 (("git2 = (\\{ version = )(\".*\"), features.*" _ _ version)
1726 (string-append "git2 = " version "\n")))
1727 (delete-file-recursively "docs")))))
1728 (build-system cargo-build-system)
1729 (arguments
1730 (list
1731 #:install-source? #f
1732 #:phases
1733 #~(modify-phases %standard-phases
1734 (add-after 'unpack 'setenv
1735 (lambda _
1736 (setenv "LIBGIT2_NO_VENDOR" "1"))))))
1737 (native-inputs (list pkg-config))
1738 (inputs (cons* libgit2-1.9 libssh2 openssl zlib
1739 (cargo-inputs 'gitlogue)))
1740 (home-page "https://github.com/unhappychoice/gitlogue")
1741 (synopsis "Git history screensaver")
1742 (description
1743 "Gitlogue is a Git history screensaver - watch your code rewrite itself.")
1744 (license license:isc)))
1745
1746(define-public gitoxide
1747 (package
1748 (name "gitoxide")
1749 (version "0.52.0")
1750 (source
1751 (origin
1752 (method url-fetch)
1753 (uri (crate-uri "gitoxide" version))
1754 (file-name (string-append name "-" version ".tar.gz"))
1755 (sha256
1756 (base32 "0712ny094bnxcydk2v3a9wwjp315b3q2ljf36ycsrwzw3xi81dki"))))
1757 (build-system cargo-build-system)
1758 (arguments
1759 (list
1760 #:install-source? #f
1761 #:modules
1762 '((guix build cargo-build-system)
1763 (guix build utils)
1764 (ice-9 match))
1765 #:phases
1766 #~(modify-phases %standard-phases
1767 (add-after 'install 'install-extras
1768 (lambda* (#:key native-inputs #:allow-other-keys)
1769 (for-each
1770 (match-lambda
1771 ((shell . path)
1772 (mkdir-p (in-vicinity #$output (dirname path)))
1773 (let ((binary
1774 (if #$(%current-target-system)
1775 (search-input-file native-inputs "bin/gix")
1776 (in-vicinity #$output "bin/gix"))))
1777 (with-output-to-file (in-vicinity #$output path)
1778 (lambda _
1779 (invoke binary "completions" "--shell" shell))))))
1780 '(("bash" . "share/bash-completion/completions/gix")
1781 ("elvish" . "share/elvish/lib/gix")
1782 ("fish" . "share/fish/vendor_completions.d/gix.fish")
1783 ("zsh" . "share/zsh/site-functions/_gix")))
1784 (for-each
1785 (match-lambda
1786 ((shell . path)
1787 (mkdir-p (in-vicinity #$output (dirname path)))
1788 (let ((binary
1789 (if #$(%current-target-system)
1790 (search-input-file native-inputs "bin/ein")
1791 (in-vicinity #$output "bin/ein"))))
1792 (with-output-to-file (in-vicinity #$output path)
1793 (lambda _
1794 (invoke binary "completions" "--shell" shell))))))
1795 '(("bash" . "share/bash-completion/completions/ein")
1796 ("elvish" . "share/elvish/lib/ein")
1797 ("fish" . "share/fish/vendor_completions.d/ein.fish")
1798 ("zsh" . "share/zsh/site-functions/_ein"))))))))
1799 (native-inputs
1800 (append
1801 (if (%current-target-system)
1802 (list this-package)
1803 '())
1804 (list pkg-config)))
1805 (inputs (cons* curl openssl sqlite zlib (cargo-inputs 'gitoxide)))
1806 (home-page "https://github.com/GitoxideLabs/gitoxide")
1807 (synopsis "command-line application for interacting with git repositories")
1808 (description
1809 "This package provides a command-line application for interacting with git
1810repositories.")
1811 (license (list license:expat license:asl2.0))))
1812
1813(define-public gitui
1814 (package
1815 (name "gitui")
1816 (version "0.28.1")
1817 (source
1818 (origin
1819 (method url-fetch)
1820 (uri (crate-uri "gitui" version))
1821 (file-name (string-append name "-" version ".tar.gz"))
1822 (sha256
1823 (base32 "1fg7cmksm626vqpcbv913y8gg855r5adcvsm33rxsmgqbabaam6r"))
1824 (modules '((guix build utils)))
1825 (snippet
1826 '(begin
1827 (delete-file-recursively "wix")
1828 (substitute* "Cargo.toml"
1829 ;; Remove vendor-openssl from the default features.
1830 ((".*\"vendor-openssl\",.*") ""))))))
1831 (build-system cargo-build-system)
1832 (arguments
1833 `(#:cargo-test-flags
1834 '("--release" "--"
1835 ;; this test fails with permission denied error
1836 "--skip=test_symbolic_links")
1837 #:install-source? #f
1838 #:phases
1839 (modify-phases %standard-phases
1840 (add-after 'unpack 'set-release-variable
1841 (lambda _
1842 (setenv "GITUI_RELEASE" "true")
1843 (setenv "BUILD_GIT_COMMIT_ID" "GNUGUIX"))))))
1844 (native-inputs (list cmake-minimal pkg-config))
1845 (inputs (cons* libgit2-1.9 libssh2 openssl zlib (cargo-inputs 'gitui)))
1846 (home-page "https://github.com/extrawurst/gitui")
1847 (synopsis "Terminal UI for git")
1848 (description "This package provides a fast Terminal UI for git.")
1849 (license license:expat)))
1850
1851(define-public helvum
1852 (package
1853 (name "helvum")
1854 (version "0.5.1")
1855 (source
1856 (origin
1857 (method git-fetch)
1858 (uri (git-reference
1859 (url "https://gitlab.freedesktop.org/pipewire/helvum")
1860 (commit version)))
1861 (file-name (git-file-name name version))
1862 (sha256
1863 (base32 "1q8gkx7djrfdl8fykppsqkxiadsq47v0xhj612nxlrvjz8n77ygn"))))
1864 (build-system meson-build-system)
1865 (arguments
1866 (list
1867 #:imported-modules `(,@%meson-build-system-modules
1868 ,@%cargo-build-system-modules)
1869 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
1870 (guix build meson-build-system)
1871 (guix build utils))
1872 #:phases
1873 #~(modify-phases %standard-phases
1874 (add-after 'unpack 'prepare-for-build
1875 (lambda _
1876 (substitute* "meson.build"
1877 (("gtk_update_icon_cache: true")
1878 "gtk_update_icon_cache: false")
1879 (("update_desktop_database: true")
1880 "update_desktop_database: false"))
1881 (delete-file "Cargo.lock")))
1882 ;; The meson 'configure phase changes to a different directory and
1883 ;; we need it created before unpacking the crates.
1884 (add-after 'configure 'prepare-cargo-build-system
1885 (lambda args
1886 (for-each
1887 (lambda (phase)
1888 (format #t "Running cargo phase: ~a~%" phase)
1889 (apply (assoc-ref cargo:%standard-phases phase)
1890 #:vendor-dir "vendor"
1891 args))
1892 '(unpack-rust-crates
1893 configure
1894 check-for-pregenerated-files
1895 patch-cargo-checksums)))))))
1896 (native-inputs (list clang-13 pkg-config rust `(,rust "cargo")))
1897 (inputs (cons* glib gtk libadwaita pipewire (cargo-inputs 'helvum)))
1898 (home-page "https://gitlab.freedesktop.org/pipewire/helvum")
1899 (synopsis "GTK patchbay for pipewire")
1900 (description "This package provides a GTK patchbay for pipewire.")
1901 (license license:gpl3)))
1902
1903(define-public hexyl
1904 (package
1905 (name "hexyl")
1906 (version "0.16.0")
1907 (source
1908 (origin
1909 (method url-fetch)
1910 (uri (crate-uri "hexyl" version))
1911 (file-name (string-append name "-" version ".tar.gz"))
1912 (sha256
1913 (base32 "1y2yrr8nh3idya5wviqqnvz57y4mvw1jx3gi57acddkj9386vma3"))))
1914 (build-system cargo-build-system)
1915 (arguments
1916 `(#:install-source? #f
1917 #:phases
1918 (modify-phases %standard-phases
1919 (add-after 'install 'install-manual
1920 (lambda* (#:key inputs outputs #:allow-other-keys)
1921 (let ((man1 (string-append (assoc-ref outputs "out")
1922 "/share/man/man1")))
1923 (when (assoc-ref inputs "pandoc")
1924 (mkdir-p man1)
1925 (with-output-to-file (string-append man1 "/hexyl.1")
1926 (lambda _
1927 (invoke "pandoc" "--standalone"
1928 "--from" "markdown"
1929 "--to" "man"
1930 "doc/hexyl.1.md"))))))))))
1931 (native-inputs
1932 (if (supported-package? pandoc)
1933 (list pandoc)
1934 '()))
1935 (inputs (cargo-inputs 'hexyl))
1936 (home-page "https://github.com/sharkdp/hexyl")
1937 (synopsis "Command-line hex viewer")
1938 (description
1939 "This package provides a command line hex viewer. It uses a colored output
1940for distinguishing different kinds of bytes such as NULL bytes, printable ASCII
1941characters, ASCII whitespace characters, other ASCII characters and non-ASCII.")
1942 (license (list license:expat license:asl2.0))))
1943
1944(define-public hyperfine
1945 (package
1946 (name "hyperfine")
1947 (version "1.20.0")
1948 (source
1949 (origin
1950 (method url-fetch)
1951 (uri (crate-uri "hyperfine" version))
1952 (file-name (string-append name "-" version ".tar.gz"))
1953 (sha256
1954 (base32
1955 "0b0jhpqg7hamf8zkzw8cwim9550hj3w7cq43702d4yyxdxz6kzn5"))))
1956 (build-system cargo-build-system)
1957 (arguments
1958 (list
1959 #:install-source? #f
1960 #:imported-modules (append %copy-build-system-modules
1961 %cargo-build-system-modules)
1962 #:modules '((guix build cargo-build-system)
1963 ((guix build copy-build-system) #:prefix copy:)
1964 (guix build utils))
1965 #:phases
1966 #~(modify-phases %standard-phases
1967 (add-before 'build 'pre-build
1968 (lambda _
1969 (setenv "SHELL_COMPLETIONS_DIR" (string-append (getcwd) "/target"))))
1970 (add-after 'install 'install-extras
1971 (lambda args
1972 (apply (assoc-ref copy:%standard-phases 'install)
1973 #:install-plan
1974 '(("target/hyperfine.bash"
1975 "share/bash-completion/completions/hyperfine")
1976 ("target/hyperfine.elv"
1977 "share/elvish/lib/hyperfine")
1978 ("target/hyperfine.fish"
1979 "share/fish/vendor_completions.d/")
1980 ("target/_hyperfine"
1981 "share/zsh/site-functions/"))
1982 args))))))
1983 (inputs (cargo-inputs 'hyperfine))
1984 (home-page "https://github.com/sharkdp/hyperfine")
1985 (synopsis "Command-line benchmarking tool")
1986 (description
1987 "This package provides a command-line benchmarking tool.")
1988 (license (list license:expat license:asl2.0))))
1989
1990(define-public i3status-rust
1991 (package
1992 (name "i3status-rust")
1993 (version "0.33.2")
1994 (source
1995 (origin
1996 (method git-fetch)
1997 (uri (git-reference
1998 (url "https://github.com/greshake/i3status-rust")
1999 (commit (string-append "v" version))))
2000 (file-name (git-file-name name version))
2001 (sha256
2002 (base32 "17fl0gx17mqc05jvr35g031d8z43cnlvqmjdwdbybl0lq4rbi6f4"))))
2003 (build-system cargo-build-system)
2004 (arguments
2005 `(#:install-source? #f
2006 #:phases
2007 (modify-phases %standard-phases
2008 (add-after 'unpack 'fix-resources-path
2009 (lambda* (#:key outputs #:allow-other-keys)
2010 (let* ((out (assoc-ref outputs "out"))
2011 (share (string-append out "/share")))
2012 (substitute* "src/util.rs"
2013 (("/usr/share/i3status-rust") share)))))
2014 (add-after 'unpack 'substitute-package-paths
2015 (lambda* (#:key inputs #:allow-other-keys)
2016 (define* (substitute-command-block* file command full-command)
2017 (substitute* file
2018 (((string-append "Command::new\\(\"" command "\"\\)"))
2019 (string-append "Command::new(\"" full-command "\")"))))
2020 (substitute-command-block* "src/blocks/keyboard_layout/set_xkb_map.rs"
2021 "setxkbmap" (search-input-file inputs "/bin/setxkbmap"))
2022 (substitute-command-block* "src/blocks/sound/alsa.rs"
2023 "alsactl" (search-input-file inputs "/sbin/alsactl"))
2024 (substitute-command-block* "src/blocks/sound/alsa.rs"
2025 "amixer" (search-input-file inputs "/bin/amixer"))
2026 (substitute-command-block* "src/blocks/speedtest.rs"
2027 "speedtest-cli" (search-input-file inputs "/bin/speedtest-cli"))
2028 (substitute-command-block* "src/blocks/xrandr.rs"
2029 "xrandr" (search-input-file inputs "/bin/xrandr"))
2030 (substitute-command-block* "src/util.rs"
2031 "sh" (search-input-file inputs "/bin/sh"))
2032 (substitute-command-block* "src/subprocess.rs"
2033 "sh" (search-input-file inputs "/bin/sh"))))
2034 (add-after 'install 'install-resources
2035 (lambda* (#:key outputs #:allow-other-keys)
2036 (let ((out (assoc-ref outputs "out")))
2037 (copy-recursively "files" (string-append out "/share")))))
2038 (add-after 'install 'wrap-i3status
2039 (lambda* (#:key outputs inputs #:allow-other-keys)
2040 (let ((out (assoc-ref outputs "out"))
2041 (paths (map
2042 (lambda (input)
2043 (string-append
2044 (assoc-ref inputs input) "/bin"))
2045 '("iproute2" "kdeconnect"))))
2046 (wrap-program (string-append out "/bin/i3status-rs")
2047 `("PATH" prefix ,paths))))))))
2048 (native-inputs
2049 (list pkg-config))
2050 (inputs
2051 (cons* alsa-utils
2052 bash-minimal
2053 dbus
2054 iproute
2055 kdeconnect
2056 (list lm-sensors "lib")
2057 pulseaudio
2058 openssl
2059 setxkbmap
2060 speedtest-cli
2061 xrandr
2062 (cargo-inputs 'i3status-rust)))
2063 (home-page "https://github.com/greshake/i3status-rust/")
2064 (synopsis "Replacement for i3status, written in Rust")
2065 (description "@code{i3status-rs} is a feature-rich and resource-friendly
2066replacement for i3status, written in pure Rust. It provides a way to display
2067@code{blocks} of system information (time, battery status, volume, etc) on the i3
2068bar. It is also compatible with sway.")
2069 (license license:gpl3)))
2070
2071(define-public ianny
2072 (package
2073 (name "ianny")
2074 (version "2.1.3")
2075 (source (origin
2076 (method git-fetch)
2077 (uri (git-reference
2078 (url "https://github.com/zefr0x/ianny")
2079 (commit (string-append "v" version))))
2080 (file-name (git-file-name name version))
2081 (sha256
2082 (base32 "14nmpz7nkjj2rr3g4f3npg8dd5b533wp73q90q4vgp06rf9mbyq8"))))
2083 (build-system meson-build-system)
2084 (arguments
2085 (list
2086 #:imported-modules `(,@%meson-build-system-modules
2087 ,@%cargo-build-system-modules)
2088 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
2089 (guix build meson-build-system)
2090 (guix build utils))
2091 #:phases
2092 #~(modify-phases %standard-phases
2093 (add-after 'unpack 'prepare-for-build
2094 (lambda* (#:key outputs #:allow-other-keys)
2095 (substitute* "meson.build"
2096 (("/etc/xdg/autostart")
2097 (string-append (assoc-ref outputs "out")
2098 "/etc/xdg/autostart")))
2099 (delete-file "Cargo.lock")))
2100 ;; The meson 'configure phase changes to a different directory and
2101 ;; we need it created before unpacking the crates.
2102 (add-after 'configure 'prepare-cargo-build-system
2103 (lambda args
2104 (for-each
2105 (lambda (phase)
2106 (format #t "Running cargo phase: ~a~%" phase)
2107 (apply (assoc-ref cargo:%standard-phases phase)
2108 #:vendor-dir "vendor"
2109 args))
2110 '(unpack-rust-crates
2111 configure
2112 check-for-pregenerated-files
2113 patch-cargo-checksums)))))))
2114 (native-inputs (list pkg-config rust `(,rust "cargo")))
2115 (inputs
2116 (cons dbus (cargo-inputs 'ianny)))
2117 (home-page "https://github.com/zefr0x/ianny")
2118 (synopsis "RSI break timer for Wayland")
2119 (description "Desktop utility that helps prevent repetitive strain injuries
2120by keeping track of usage patterns and periodically reminding the user to take
2121breaks.")
2122 (license license:gpl3)))
2123
2124(define-public iwmenu
2125 (package
2126 (name "iwmenu")
2127 (version "0.4.0")
2128 (source
2129 (origin
2130 (method git-fetch)
2131 (uri (git-reference
2132 (url "https://github.com/e-tho/iwmenu")
2133 (commit (string-append "v" version))))
2134 (file-name (git-file-name name version))
2135 (sha256
2136 (base32
2137 "1xig0g6sqxx4hh8fj8vd92mm0bmvjfx493kpiymaas30rn26nfnq"))))
2138 (build-system cargo-build-system)
2139 (arguments
2140 (list #:install-source? #f))
2141 (inputs (cargo-inputs 'iwmenu))
2142 (home-page "https://github.com/e-tho/iwmenu")
2143 (synopsis "Launcher-driven Wi-Fi manager")
2144 (description
2145 "@code{iwmenu} (iNet Wireless Menu) manages Wi-Fi through your launcher of
2146choice. Supported launchers are: dmenu, fuzzel, rofi, walker and custom.")
2147 (license license:gpl3)))
2148
2149(define-public jless
2150 (package
2151 (name "jless")
2152 (version "0.9.0")
2153 (source
2154 (origin
2155 (method url-fetch)
2156 (uri (crate-uri "jless" version))
2157 (file-name (string-append name "-" version ".tar.gz"))
2158 (sha256
2159 (base32
2160 "1mij8c0lp62mnfvcbzrhmf1g70fq29lj2s9l05qx7njsqs64xqkf"))))
2161 (build-system cargo-build-system)
2162 (arguments
2163 `(#:install-source? #f))
2164 (native-inputs (list python pkg-config)) ;needed by rust-xcb
2165 (inputs (cons* libx11 libxcb (cargo-inputs 'jless)))
2166 (home-page "https://github.com/PaulJuliusMartinez/jless")
2167 (synopsis "Command-line JSON viewer")
2168 (description "This package provides a command-line JSON viewer.")
2169 (license license:expat)))
2170
2171(define-public jni
2172 (package
2173 (name "jni")
2174 (version "0.21.1")
2175 (source
2176 (origin
2177 (method url-fetch)
2178 (uri (crate-uri "jni" version))
2179 (file-name (string-append name "-" version ".tar.gz"))
2180 (sha256
2181 (base32 "15wczfkr2r45slsljby12ymf2hij8wi5b104ghck9byjnwmsm1qs"))))
2182 (build-system cargo-build-system)
2183 (inputs (cargo-inputs 'jni))
2184 (home-page "https://github.com/jni-rs/jni-rs")
2185 (synopsis "Rust bindings to the Java Native Interface")
2186 (description "This package provides Rust bindings to the @acronym{JNI, Java Native
2187Interface}.")
2188 (license (list license:expat license:asl2.0))))
2189
2190(define-public jnv
2191 (package
2192 (name "jnv")
2193 (version "0.6.2")
2194 (source
2195 (origin
2196 (method git-fetch)
2197 (uri (git-reference
2198 (url "https://github.com/ynqa/jnv")
2199 (commit (string-append "v" version))))
2200 (file-name (git-file-name name version))
2201 (sha256
2202 (base32
2203 "1pv7mnysh7bc1885xym8vlkywjsqqi7zqhhl4g1p8zmpk75z0vdi"))))
2204 (build-system cargo-build-system)
2205 (arguments
2206 (list #:install-source? #f))
2207 (inputs (cargo-inputs 'jnv))
2208 (home-page "https://github.com/ynqa/jnv")
2209 (synopsis "JSON navigator and interactive jq filter editor")
2210 (description "Jnv is designed for navigating JSON, offering an interactive
2211JSON viewer and jq filter editor.")
2212 (license license:expat)))
2213
2214(define-public jujutsu
2215 (package
2216 (name "jujutsu")
2217 (version "0.41.0")
2218 (source
2219 (origin
2220 (method git-fetch)
2221 (uri (git-reference
2222 (url "https://github.com/jj-vcs/jj")
2223 (commit (string-append "v" version))))
2224 (file-name (git-file-name name version))
2225 (sha256
2226 (base32 "1jla0sjw8cyhrmkl83xkp8mp8nbplj4nmd0w16bprj1kd5xzkpc9"))))
2227 (build-system cargo-build-system)
2228 (arguments
2229 (list
2230 #:install-source? #f
2231 #:cargo-install-paths ''("cli")
2232 #:cargo-test-flags
2233 ''("--"
2234 "--skip=test_gerrit_upload::test_gerrit_upload_rejected_by_remote"
2235 "--skip=test_git_push::test_git_push_rejected_by_remote"
2236 "--skip=test_git::test_push_updates_with_options"
2237 "--skip=test_util_command::test_util_exec_sets_env")
2238 #:modules
2239 '((guix build cargo-build-system)
2240 (guix build utils)
2241 (ice-9 match))
2242 #:phases
2243 #~(modify-phases %standard-phases
2244 (add-after 'install 'install-completions
2245 (lambda* (#:key native-inputs #:allow-other-keys)
2246 ;; See the upstream documentation for more information about
2247 ;; building the standard or dynamic shell completions.
2248 ;; https://docs.jj-vcs.dev/v0.38.0/install-and-setup/#dynamic
2249 (for-each
2250 (match-lambda
2251 ((shell . path)
2252 (mkdir-p (in-vicinity #$output (dirname path)))
2253 (let ((binary
2254 (if #$(%current-target-system)
2255 (search-input-file native-inputs "bin/jj")
2256 (in-vicinity #$output "bin/jj"))))
2257 (setenv "COMPLETE" shell)
2258 (with-output-to-file (in-vicinity #$output path)
2259 (lambda _
2260 (invoke binary))))))
2261 '(("bash" . "share/bash-completion/completions/jj")
2262 ("elvish" . "share/elvish/lib/jj")
2263 ("fish" . "share/fish/vendor_completions.d/jj.fish")
2264 ;("nushell" . "share/nushell/vendor/autoload/jj")
2265 ("zsh" . "share/zsh/site-functions/_jj"))))))))
2266 (native-inputs
2267 (append
2268 (if (%current-target-system)
2269 (list this-package)
2270 '())
2271 (list pkg-config
2272 ;; For tests.
2273 git-minimal/pinned
2274 openssh-sans-x)))
2275 (inputs (cons* zlib openssl libssh2 libgit2-1.9 (cargo-inputs 'jujutsu)))
2276 (home-page "https://github.com/jj-vcs/jj")
2277 (synopsis "Git-compatible distributed version control system")
2278 (description
2279 "Jujutsu is a version control system designed to be easy to use. It uses a
2280real commit to represent the working copy, records all operations performed on
2281the repository and supports automatic conflict resolution.
2282
2283Although Jujutsu uses a Git repository as its storage backend, it internally
2284abstracts the user interface and version control algorithms from the storage
2285systems. This opens possibility for it to serve as a version control system
2286with other physical backends.")
2287 (license license:asl2.0)))
2288
2289(define-public just
2290 (package
2291 (name "just")
2292 (version "1.43.0")
2293 (source (origin
2294 (method url-fetch)
2295 (uri (crate-uri "just" version))
2296 (file-name (string-append name "-" version ".tar.gz"))
2297 (sha256
2298 (base32 "139l2pqnzhlmmn4frcp4j4a81vnv42w2470sf23rrsilid11dd6i"))))
2299 (build-system cargo-build-system)
2300 (arguments
2301 `(#:cargo-test-flags
2302 '("--"
2303 "--skip=backticks::trailing_newlines_are_stripped"
2304 "--skip=completions::bash"
2305 "--skip=functions::env_var_functions"
2306 "--skip=string::shebang_backtick")
2307 #:install-source? #f
2308 #:phases
2309 (modify-phases %standard-phases
2310 (add-after 'unpack 'replace-hardcoded-paths
2311 (lambda* (#:key inputs #:allow-other-keys)
2312 (substitute* (cons "src/justfile.rs"
2313 (find-files "tests/" "\\.rs$"))
2314 (("/bin/sh")
2315 (search-input-file inputs "/bin/sh"))
2316 (("/usr/bin/env sh")
2317 (search-input-file inputs "/bin/sh"))
2318 (("/usr/bin/env")
2319 (search-input-file inputs "/bin/env"))
2320 (("/bin/echo")
2321 (search-input-file inputs "/bin/echo")))))
2322 (add-after 'install 'install-extras
2323 (lambda* (#:key native-inputs outputs #:allow-other-keys)
2324 (let* ((out (assoc-ref outputs "out"))
2325 (share (string-append out "/share"))
2326 (man1 (string-append share "/man/man1"))
2327 (bash-completions-dir
2328 (string-append out "/etc/bash_completion.d/"))
2329 (zsh-completions-dir
2330 (string-append share "/zsh/site-functions"))
2331 (fish-completions-dir
2332 (string-append share "/fish/vendor_completions.d"))
2333 (elvish-completions-dir
2334 (string-append share "/elvish/lib"))
2335 (just (if ,(%current-target-system)
2336 (search-input-file native-inputs "/bin/just")
2337 (string-append out "/bin/just"))))
2338 (mkdir "man")
2339 (with-output-to-file "man/just.1"
2340 (lambda _ (invoke just "--man")))
2341 (install-file "man/just.1" man1)
2342
2343 (mkdir-p bash-completions-dir)
2344 (with-output-to-file
2345 (string-append bash-completions-dir "/just")
2346 (lambda _ (invoke just "--completions" "bash")))
2347 (mkdir-p zsh-completions-dir)
2348 (with-output-to-file
2349 (string-append zsh-completions-dir "/_just")
2350 (lambda _ (invoke just "--completions" "zsh")))
2351 (mkdir-p fish-completions-dir)
2352 (with-output-to-file
2353 (string-append fish-completions-dir "/just.fish")
2354 (lambda _ (invoke just "--completions" "fish")))
2355 (mkdir-p elvish-completions-dir)
2356 (with-output-to-file
2357 (string-append elvish-completions-dir "/just")
2358 (lambda _ (invoke just "--completions" "elvish")))))))))
2359 (native-inputs (if (%current-target-system)
2360 (list this-package)
2361 '()))
2362 (inputs (cons* bash-minimal coreutils-minimal (cargo-inputs 'just)))
2363 (home-page "https://github.com/casey/just")
2364 (synopsis "Command runner")
2365 (description "This package provides @code{just}, a command runner.
2366@code{just} is a handy way to save and run project-specific commands.")
2367 (license license:cc0)))
2368
2369(define-public kanata
2370 (package
2371 (name "kanata")
2372 (version "1.11.0")
2373 (source
2374 (origin
2375 (method url-fetch)
2376 (uri (crate-uri "kanata" version))
2377 (file-name (string-append name "-" version ".tar.gz"))
2378 (sha256
2379 (base32
2380 "13xv85bvrwkbnq596mdjynkv9kbhvm7k81k25sc6i1xw0wgb6vi5"))))
2381 (build-system cargo-build-system)
2382 (arguments
2383 (list #:install-source? #f))
2384 (inputs (cargo-inputs 'kanata))
2385 (home-page "https://github.com/jtroo/kanata")
2386 (synopsis "Multi-layer keyboard customization")
2387 (description
2388 "Kanata is a keyboard re-mapper. It supports multiple layers of key,
2389and advanced key behavior customization, such as tap-hold, macros and
2390Unicode.")
2391 (license license:lgpl3)))
2392
2393(define-public kibi
2394 (package
2395 (name "kibi")
2396 (version "0.3.3")
2397 (source
2398 (origin
2399 ;; crates.io doesn't have the config files
2400 (method git-fetch)
2401 (uri (git-reference
2402 (url "https://github.com/ilai-deutel/kibi")
2403 (commit (string-append "v" version))))
2404 (file-name (git-file-name name version))
2405 (sha256
2406 (base32 "1ryk9vz0hdqcka8n90qnhh430rj2z4s7kh71bkc5lpdx5lassq5q"))
2407 (snippet
2408 #~(begin (use-modules (guix build utils))
2409 ;; Use a packaged version of tokei.
2410 (substitute* "xtask/Cargo.toml"
2411 (("git = .*tokei\", branch.*,") "version = \"*\","))))))
2412 (build-system cargo-build-system)
2413 (arguments
2414 (list
2415 #:install-source? #f
2416 #:imported-modules (append %copy-build-system-modules
2417 %cargo-build-system-modules)
2418 #:modules '((guix build cargo-build-system)
2419 ((guix build copy-build-system) #:prefix copy:)
2420 (guix build utils))
2421 #:phases
2422 #~(modify-phases %standard-phases
2423 (add-after 'install 'install-extras
2424 (lambda args
2425 (apply (assoc-ref copy:%standard-phases 'install)
2426 #:install-plan
2427 '(("config_example.ini" "etc/kibi/config.ini")
2428 ("syntax.d" "share/kibi/")
2429 ("kibi.desktop" "share/applications/")
2430 ("assets/kibi.svg" "share/icons/hicolor/scalable/apps/"))
2431 args))))))
2432 (inputs (cargo-inputs 'kibi))
2433 (home-page "https://github.com/ilai-deutel/kibi")
2434 (synopsis "Featureful text editor in less than 1024 lines of code")
2435 (description
2436 "Inspired by the kilo text editor in C, this package provides a text
2437editor in less than 1024 lines of code with syntax highlighting, search and
2438more.")
2439 (license (list license:expat license:asl2.0))))
2440
2441(define-public lsd
2442 (package
2443 (name "lsd")
2444 (version "1.2.0")
2445 (source
2446 (origin
2447 (method url-fetch)
2448 (uri (crate-uri "lsd" version))
2449 (file-name (string-append name "-" version ".tar.gz"))
2450 (sha256
2451 (base32 "0r1nbw4ljl4654kjw1vszf4gsp0cc1s3bp2y2azml988r740vl8s"))))
2452 (build-system cargo-build-system)
2453 (arguments
2454 (list
2455 #:install-source? #f
2456 #:imported-modules (append %copy-build-system-modules
2457 %cargo-build-system-modules)
2458 #:modules '((guix build cargo-build-system)
2459 ((guix build copy-build-system) #:prefix copy:)
2460 (guix build utils))
2461 #:phases
2462 #~(modify-phases %standard-phases
2463 (add-before 'build 'pre-build
2464 (lambda _
2465 (setenv "SHELL_COMPLETIONS_DIR" "target/assets")))
2466 (add-after 'install 'install-extras
2467 (lambda args
2468 (apply (assoc-ref copy:%standard-phases 'install)
2469 #:install-plan
2470 '(("target/assets/lsd.bash"
2471 "share/bash-completion/completions/lsd")
2472 ("target/assets/lsd.fish"
2473 "share/fish/vendor_completions.d/")
2474 ("target/assets/_lsd"
2475 "share/zsh/site-functions/"))
2476 args))))))
2477 (native-inputs (list pkg-config
2478 ;; for tests
2479 git-minimal/pinned))
2480 (inputs (cons* libgit2-1.9 zlib (cargo-inputs 'lsd)))
2481 (home-page "https://github.com/lsd-rs/lsd")
2482 (synopsis "Mostly ls compatible command with pretty colors")
2483 (description
2484 "This package provides An ls command with a lot of pretty colors
2485and some other stuff.")
2486 (license license:asl2.0)))
2487
2488(define-public macchina
2489 (package
2490 (name "macchina")
2491 (version "6.4.0")
2492 (source
2493 (origin
2494 (method url-fetch)
2495 (uri (crate-uri "macchina" version))
2496 (file-name (string-append name "-" version ".tar.gz"))
2497 (sha256
2498 (base32 "0m1hkf81njdbx69c2k3hp3dslq6xfh14hs8v7iadw3cl44dshb7r"))))
2499 (build-system cargo-build-system)
2500 (arguments
2501 (list
2502 #:install-source? #f
2503 #:phases #~(modify-phases %standard-phases
2504 (add-after 'install 'install-extras
2505 (lambda* (#:key outputs #:allow-other-keys)
2506 (let* ((out (assoc-ref outputs "out"))
2507 (share (string-append out "/share"))
2508 (contrib (string-append share "/contrib")))
2509 (mkdir-p contrib)
2510 (copy-recursively "contrib" contrib)))))))
2511 (native-inputs (list pkg-config))
2512 (inputs (cons* libgit2 sqlite zlib (cargo-inputs 'macchina)))
2513 (home-page "https://github.com/Macchina-CLI/macchina")
2514 (synopsis "System information fetcher with an emphasis on performance")
2515 (description
2516 "This package provides a system information fetcher with an emphasis on
2517performance. Similar to neofetch, this package prints out system information
2518on the terminal in a visually appealing way.")
2519 (license license:expat)))
2520
2521(define-public matugen
2522 (package
2523 (name "matugen")
2524 (version "4.0.0")
2525 (source
2526 (origin
2527 (method url-fetch)
2528 (uri (crate-uri "matugen" version))
2529 (file-name (string-append name "-" version ".tar.gz"))
2530 (sha256
2531 (base32 "0xn0i3vnwpxkxlccm8z7p4pmp2yrgvbmlpr18iffk694is9ik98r"))))
2532 (build-system cargo-build-system)
2533 (arguments
2534 (list #:install-source? #f))
2535 (inputs (cargo-inputs 'matugen))
2536 (home-page "https://github.com/InioX/matugen")
2537 (synopsis "Generate themes using the 'Material You' palette")
2538 (description
2539 "@command{matugen} generates a 'Material You' color palette based on a
2540specified image or color, easing the process of theme creation.")
2541 (license license:gpl2)))
2542
2543;; Deprecated on <2026-08-12>.
2544(define-deprecated/public-alias maturin (@ (gnu packages build-tools) maturin))
2545
2546(define-public mdopen
2547 (package
2548 (name "mdopen")
2549 (properties '((commit . "3858a4d2222ac789b168729ac1ae7b726342526e")))
2550 (version (git-version "0.5.0" "0"
2551 (assoc-ref properties
2552 'commit)))
2553 (source
2554 (origin
2555 (method git-fetch)
2556 (uri (git-reference
2557 (url "https://github.com/immanelg/mdopen")
2558 (commit (assoc-ref properties
2559 'commit))))
2560 (file-name (git-file-name name version))
2561 (sha256
2562 (base32 "024pv3wg6dg7yh8acpq3m0rrh046zfmcs940jivkjh8i9a5s2k3b"))))
2563 (arguments
2564 (list
2565 #:install-source? #f
2566 #:tests? #f)) ;tests are non-functional
2567 (build-system cargo-build-system)
2568 (inputs (cons* openssl oniguruma
2569 (cargo-inputs 'mdopen)))
2570 (native-inputs (list pkg-config))
2571 (home-page "https://github.com/immanelg/mdopen")
2572 (synopsis "Markdown preview server")
2573 (description "Quickly preview local markdown files in browser with
2574GitHub-like look.")
2575 (license license:gpl3+)))
2576
2577(define-public mise
2578 (package
2579 (name "mise")
2580 (version "2026.4.4")
2581 (source
2582 (origin
2583 (method git-fetch)
2584 (uri (git-reference
2585 (url "https://github.com/jdx/mise")
2586 (commit (string-append "v" version))))
2587 (file-name (git-file-name name version))
2588 (sha256
2589 (base32 "1298fxd1hx0y86xpmrmbi6ps9bvp81b4r4cgyvgqzfzicn616l2j"))
2590 (snippet
2591 #~(begin (use-modules (guix build utils))
2592 (for-each delete-file-recursively
2593 '("crates/vfox/test/data"
2594 "docs"))
2595 ;; Don't try to vendor lua.
2596 (substitute* "crates/vfox/Cargo.toml"
2597 (("\"vendored-lua\", ") "")
2598 (("^vendored-lua.*") "vendored-lua = []\n"))))))
2599 (build-system cargo-build-system)
2600 (arguments
2601 (list #:install-source? #f
2602 #:cargo-install-paths ''(".")
2603 #:parallel-tests? #f
2604 ;; test_last_modified fails in the build sandbox because file
2605 ;; timestamps are normalized.
2606 #:cargo-test-flags ''("--" "--skip" "test_last_modified")
2607 #:modules '((guix build cargo-build-system)
2608 (guix build utils)
2609 (ice-9 match))
2610 #:phases
2611 #~(modify-phases %standard-phases
2612 (add-after 'install 'install-completions
2613 (lambda* (#:key native-inputs #:allow-other-keys)
2614 (let ((binary
2615 (if #$(%current-target-system)
2616 (search-input-file native-inputs "bin/mise")
2617 (in-vicinity #$output "bin/mise"))))
2618 (for-each
2619 (match-lambda
2620 ((args . path)
2621 (mkdir-p (in-vicinity #$output (dirname path)))
2622 (with-output-to-file (in-vicinity #$output path)
2623 (lambda _
2624 (apply invoke binary "completion" args)))))
2625 ;; Bash completions need --include-bash-completion-lib
2626 ;; to bundle the compatibility functions they rely on.
2627 '((("bash" "--include-bash-completion-lib")
2628 . "share/bash-completion/completions/mise")
2629 (("fish")
2630 . "share/fish/vendor_completions.d/mise.fish")
2631 (("zsh")
2632 . "share/zsh/site-functions/_mise")))))))))
2633 (native-inputs
2634 (append (if (%current-target-system)
2635 (list this-package)
2636 '())
2637 (list pkg-config)))
2638 (inputs (cons* bzip2 lua-5.1 openssl xz `(,zstd "lib") (cargo-inputs 'mise)))
2639 (home-page "https://mise.jdx.dev")
2640 (synopsis "Polyglot version manager, task runner, and environment manager")
2641 (description "Mise manages dev tool versions (e.g., Node.js, Python, Ruby,
2642Go) allowing you to switch between versions per project. It also serves as a
2643task runner and manages environment variables through @file{.mise.toml}
2644configuration files. It is compatible with asdf plugins and supports
2645@file{.tool-versions} files.")
2646 (license license:expat)))
2647
2648(define-public mitm-cache
2649 (package
2650 (name "mitm-cache")
2651 (version "0.1.2")
2652 (source (origin
2653 (method git-fetch)
2654 (uri (git-reference
2655 (url "https://github.com/chayleaf/mitm-cache")
2656 (commit (string-append "v" version))))
2657 (file-name (git-file-name name version))
2658 (sha256
2659 (base32 "0hbjzf3jb8gpisq3qi5z7wc20hawcgvjwnw2xp80bwq1cj12d3vr"))
2660 (patches (search-patches "mitm-cache-head-requests.patch"))))
2661 (build-system cargo-build-system)
2662 (arguments
2663 '(#:install-source? #f))
2664 (inputs (cons `(,zstd "lib") (cargo-inputs 'mitm-cache)))
2665 (native-inputs (list pkg-config))
2666 (home-page "https://github.com/chayleaf/mitm-cache")
2667 (synopsis "Man-in-the-middle caching proxy")
2668 (description "This is a caching @acronym{MITM, man-in-the-middle} proxy
2669for fetching the dependencies of poorly designed build systems.")
2670 (license license:expat)))
2671
2672(define-public mollysocket
2673 (package
2674 (name "mollysocket")
2675 (version "1.6.0")
2676 (source (origin
2677 (method url-fetch)
2678 (uri (crate-uri "mollysocket" version))
2679 (file-name (string-append name "-" version ".tar.gz"))
2680 (sha256
2681 (base32
2682 "08kgcwc1b9s221sy2pjmzxz4i8iagkfj8wr1k2c6d4pbgzgwqm8y"))))
2683 (build-system cargo-build-system)
2684 (arguments
2685 '(#:install-source? #f
2686 #:tests? #f)) ; tests require internet
2687 (inputs (cons* openssl sqlite (cargo-inputs 'mollysocket)))
2688 (native-inputs (list pkg-config))
2689 (home-page "https://github.com/mollyim/mollysocket")
2690 (synopsis "Signal push notifications through UnifiedPush")
2691 (description "MollySocket is a UnifiedPush provider that receives push
2692notifications from Signal through the Molly app, and pushes them to a user's
2693distributor. Message encryption keys are never stored nor received by
2694Mollysocket.")
2695 (license license:agpl3+)))
2696
2697(define-public ncspot
2698 (package
2699 (name "ncspot")
2700 (version "1.3.3")
2701 (source (origin
2702 (method git-fetch)
2703 (uri (git-reference
2704 (url "https://github.com/hrkfdn/ncspot")
2705 (commit (string-append "v" version))))
2706 (file-name (git-file-name name version))
2707 (sha256
2708 (base32
2709 "02i5v7jad80zx2ad9a2ppxg4ipd3faisys41gxcwmpy2kisrlssk"))))
2710 (build-system cargo-build-system)
2711 (arguments
2712 (list #:install-source? #f))
2713 (inputs
2714 (cons* dbus
2715 libxcb
2716 ncurses
2717 openssl
2718 pulseaudio
2719 (cargo-inputs 'ncspot)))
2720 (native-inputs
2721 (list pkg-config python))
2722 (home-page "https://github.com/hrkfdn/ncspot")
2723 (synopsis "Ncurses Spotify client written in Rust")
2724 (description
2725 "@command{ncspot} is an ncurses Spotify client written in Rust using
2726librespot. It is heavily inspired by ncurses MPD clients, such as
2727@command{ncmpc}. It provides a simple and resource friendly alternative to
2728the official client.")
2729 (license license:bsd-2)))
2730
2731(define-public netavark
2732 (package
2733 (name "netavark")
2734 (version "2.0.0")
2735 (source
2736 (origin
2737 (method url-fetch)
2738 (uri (crate-uri "netavark" version))
2739 (file-name (string-append name "-" version ".tar.gz"))
2740 (sha256
2741 (base32 "12ibyylgnwps6f298jjb49qnr3q9prahzdb4jskhx1gzxhyfxxil"))))
2742 (build-system cargo-build-system)
2743 (arguments
2744 `(#:install-source? #f))
2745 (native-inputs (list protobuf))
2746 (inputs (cargo-inputs 'netavark))
2747 (home-page "https://github.com/containers/netavark")
2748 (synopsis "Container network stack")
2749 (description "Netavark is a rust based network stack for containers. It
2750is being designed to work with Podman but is also applicable for other OCI
2751container management applications.")
2752 (license license:asl2.0)))
2753
2754(define-public onefetch
2755 (package
2756 (name "onefetch")
2757 (version "2.27.1")
2758 (source
2759 (origin
2760 (method url-fetch)
2761 (uri (crate-uri "onefetch" version))
2762 (file-name (string-append name "-" version ".tar.gz"))
2763 (sha256
2764 (base32 "0qxcrxvf6wkyx332nigcim5l136v9wsm5vx0wsacnsrhl0rkicdp"))))
2765 (build-system cargo-build-system)
2766 (arguments
2767 (list
2768 #:install-source? #f
2769 #:modules
2770 '((guix build cargo-build-system)
2771 (guix build utils)
2772 (ice-9 match))
2773 #:phases
2774 #~(modify-phases %standard-phases
2775 (add-after 'install 'install-extras
2776 (lambda* (#:key native-inputs #:allow-other-keys)
2777 (for-each
2778 (match-lambda
2779 ((shell . path)
2780 (mkdir-p (in-vicinity #$output (dirname path)))
2781 (let ((binary
2782 (if #$(%current-target-system)
2783 (search-input-file native-inputs "bin/onefetch")
2784 (in-vicinity #$output "bin/onefetch"))))
2785 (with-output-to-file (in-vicinity #$output path)
2786 (lambda _
2787 (invoke binary "--generate" shell))))))
2788 '(("bash" . "share/bash-completion/completions/onefetch")
2789 ("elvish" . "share/elvish/lib/onefetch")
2790 ("fish" . "share/fish/vendor_completions.d/onefetch.fish")
2791 ("zsh" . "share/zsh/site-functions/_onefetch"))))))))
2792 (native-inputs
2793 (append
2794 (if (%current-target-system)
2795 (list this-package)
2796 '())
2797 (list pkg-config
2798 git-minimal/pinned))) ; For tests
2799 (inputs (cons `(,zstd "lib")
2800 (cargo-inputs 'onefetch)))
2801 (home-page "https://onefetch.dev")
2802 (synopsis "Command-line Git information tool")
2803 (description "Onefetch is a command-line Git information tool that
2804displays project information and code statistics for a local Git repository
2805directly in your terminal. The tool works completely offline with a focus on
2806performance and customizability.")
2807 (license license:expat)))
2808
2809(define-public ouch
2810 (package
2811 (name "ouch")
2812 (version "0.6.1")
2813 (source
2814 (origin
2815 (method url-fetch)
2816 (uri (crate-uri "ouch" version))
2817 (file-name (string-append name "-" version ".tar.gz"))
2818 (sha256
2819 (base32 "1gslgyv63jq66w5pymsn7jnkmh2b8s8wzqvhs6k2iywzc4nm3gxd"))
2820 (snippet
2821 #~(begin (use-modules (guix build utils))
2822 (substitute* "Cargo.toml"
2823 ;; Don't try to use a bundled copy of bzip3.
2824 ((".*bundled.*") ""))))))
2825 (build-system cargo-build-system)
2826 (arguments
2827 (list
2828 #:install-source? #f
2829 #:imported-modules (append %copy-build-system-modules
2830 %cargo-build-system-modules)
2831 #:modules '((guix build cargo-build-system)
2832 ((guix build copy-build-system) #:prefix copy:)
2833 (guix build utils))
2834 #:phases
2835 #~(modify-phases %standard-phases
2836 (add-before 'build 'pre-build
2837 (lambda* (#:key inputs #:allow-other-keys)
2838 (setenv "OUCH_ARTIFACTS_FOLDER" "target")
2839 ;; Uses nonfree library.
2840 (invoke "cargo" "remove" "unrar")
2841 ;; Set the location for bzip3
2842 (setenv "BZIP3_LIB_DIR"
2843 (dirname (search-input-file inputs "/lib/libbzip3.so")))
2844 (setenv "BZIP3_INCLUDE_DIR"
2845 (dirname (search-input-file inputs "/include/libbz3.h")))))
2846 (add-after 'install 'install-extras
2847 (lambda args
2848 (apply (assoc-ref copy:%standard-phases 'install)
2849 #:install-plan
2850 '(("target/ouch.bash"
2851 "share/bash-completion/completions/ouch")
2852 ("target/ouch.elv"
2853 "share/elvish/lib/ouch")
2854 ("target/ouch.fish"
2855 "share/fish/vendor_completions.d/")
2856 ("target/_ouch"
2857 "share/zsh/site-functions/")
2858 ("target/" "share/man/man1/"
2859 #:include-regexp ("\\.1$")))
2860 args))))))
2861 (native-inputs (list git-minimal/pinned pkg-config))
2862 (inputs (cons* bzip2 bzip3-1.4 clang-13 xz zlib `(,zstd "lib")
2863 (cargo-inputs 'ouch)))
2864 (home-page "https://github.com/ouch-org/ouch")
2865 (synopsis "Compression and decompression utility")
2866 (description
2867 "This package provides a command-line utility for easily compressing and
2868decompressing files and directories.")
2869 (license license:expat)))
2870
2871(define-public pwmenu
2872 (package
2873 (name "pwmenu")
2874 (version "0.4.0")
2875 (source
2876 (origin
2877 (method git-fetch)
2878 (uri (git-reference
2879 (url "https://github.com/e-tho/pwmenu")
2880 (commit (string-append "v" version))))
2881 (file-name (git-file-name name version))
2882 (sha256
2883 (base32 "0fzr60pn0yrw2fm055g9n0zs70g1w16w4dwrsnj95w0psidig9k9"))))
2884 (build-system cargo-build-system)
2885 (arguments
2886 (list #:install-source? #f))
2887 (native-inputs (list clang-13 pkg-config))
2888 (inputs (cons* pipewire
2889 (cargo-inputs 'pwmenu)))
2890 (home-page "https://github.com/e-tho/pwmenu")
2891 (synopsis "Launcher-driven Pipewire audio manager")
2892 (description
2893 "@code{pwmenu} (PipeWire Menu) manages audio through your launcher of
2894choice. Supported launchers are: dmenu, fuzzel, rofi, walker and custom.")
2895 (license license:gpl3)))
2896
2897(define-public py-spy
2898 (package
2899 (name "py-spy")
2900 (version "0.4.2")
2901 (source
2902 (origin
2903 (method url-fetch)
2904 (uri (crate-uri "py-spy" version))
2905 (file-name (string-append name "-" version ".tar.gz"))
2906 (sha256
2907 (base32 "15vccm4q0lqgpq0q9vrzriz58dcrxj2bqf9ac9s4n2bvdxy5f0va"))))
2908 (build-system cargo-build-system)
2909 (arguments
2910 (list
2911 #:install-source? #f
2912 #:modules
2913 '((guix build cargo-build-system)
2914 (guix build utils)
2915 (ice-9 match))
2916 #:cargo-test-flags
2917 ;; python-numpy isn't in the build environment
2918 ''("--" "--skip=test_local_vars")
2919 #:phases
2920 #~(modify-phases %standard-phases
2921 (add-after 'install 'install-shell-completions
2922 (lambda* (#:key native-inputs #:allow-other-keys)
2923 (for-each
2924 (match-lambda
2925 ((shell . path)
2926 (mkdir-p (in-vicinity #$output (dirname path)))
2927 (let ((binary
2928 (if #$(%current-target-system)
2929 (search-input-file native-inputs "bin/py-spy")
2930 (in-vicinity #$output "bin/py-spy"))))
2931 (with-output-to-file (in-vicinity #$output path)
2932 (lambda _
2933 (invoke binary "completions" shell))))))
2934 '(("bash" . "share/bash-completion/completions/py-spy")
2935 ("elvish" . "share/elvish/lib/py-spy")
2936 ("fish" . "share/fish/vendor_completions.d/py-spy.fish")
2937 ("zsh" . "share/zsh/site-functions/_py-spy"))))))))
2938 (native-inputs
2939 (append
2940 (if (%current-target-system)
2941 (list this-package)
2942 '())
2943 (list python-minimal-wrapper)))
2944 (inputs (cargo-inputs 'py-spy))
2945 (home-page "https://github.com/benfred/py-spy")
2946 (synopsis "Sampling profiler for Python programs")
2947 (description
2948 "This package provides a sampling profiler for Python programs.")
2949 (license license:expat)))
2950
2951(define-public rheo
2952 (package
2953 (name "rheo")
2954 (version "0.1.2")
2955 (source
2956 (origin
2957 (method git-fetch)
2958 (uri (git-reference
2959 (url "https://github.com/freecomputinglab/rheo")
2960 (commit (string-append "v" version))))
2961 (file-name (git-file-name name version))
2962 (sha256
2963 (base32 "17i7zsymjqp745476rdgq6w8hi40n4zca23xxp6s2hwpyjhgdkp4"))))
2964 (build-system cargo-build-system)
2965 (arguments
2966 (list
2967 #:install-source? #f
2968 #:cargo-test-flags
2969 ''("--all-targets"
2970 "--"
2971 ;; The following tests require internet
2972 "--skip=run_test_case_examples_slashcover_minusletter_full_stoptyp"
2973 "--skip=run_test_case_examples_slashfcl_site"
2974 "--skip=run_test_case_examples_slashrheo_docs"
2975 "--skip=run_test_case_tests_slashcases_slashtarget_function_in_package")))
2976 (inputs (cons* openssl (cargo-inputs 'rheo)))
2977 (native-inputs (list pkg-config))
2978 (synopsis "Typesetting and static site engine based on Typst")
2979 (description
2980 "Rheo is a typesetting and static site engine based on Typst.
2981You can use it to compile folders containing Typst to PDF, HTML, and EPUB
2982simultaneously. Rheo is a standalone CLI tool that includes a development
2983server for rapid website iteration.")
2984 (home-page "https://rheo.ohrg.org")
2985 (license (list license:asl2.0 license:expat))))
2986
2987(define-public ripgrep
2988 (package
2989 (name "ripgrep")
2990 (version "15.1.0")
2991 (source
2992 (origin
2993 (method url-fetch)
2994 (uri (crate-uri "ripgrep" version))
2995 (file-name (string-append name "-" version ".tar.gz"))
2996 (sha256
2997 (base32 "0wrbv3bd2sz8y0bkbhl3n0a6d824k20mawv6m0l7qiw5byaw927k"))))
2998 (build-system cargo-build-system)
2999 (arguments
3000 (list
3001 #:install-source? #f
3002 #:modules
3003 '((guix build cargo-build-system)
3004 (guix build utils)
3005 (ice-9 match))
3006 #:phases
3007 #~(modify-phases %standard-phases
3008 (add-after 'install 'install-extras
3009 (lambda* (#:key native-inputs #:allow-other-keys)
3010 (for-each
3011 (match-lambda
3012 ((shell . path)
3013 (mkdir-p (in-vicinity #$output (dirname path)))
3014 (let ((binary
3015 (if #$(%current-target-system)
3016 (search-input-file native-inputs "bin/rg")
3017 (in-vicinity #$output "bin/rg"))))
3018 (with-output-to-file (in-vicinity #$output path)
3019 (lambda _
3020 (invoke binary "--generate" shell))))))
3021 '(("complete-bash" . "share/bash-completion/completions/rg")
3022 ("complete-fish" . "share/fish/vendor_completions.d/rg.fish")
3023 ("complete-zsh" . "share/zsh/site-functions/_rg")
3024 ("man" . "share/man/man1/rg"))))))
3025 #:features '(list "pcre2")))
3026 (inputs (cons pcre2 (cargo-inputs 'ripgrep)))
3027 (native-inputs (cons* pkg-config (if (%current-target-system)
3028 (list this-package)
3029 '())))
3030 (home-page "https://github.com/BurntSushi/ripgrep")
3031 (synopsis "Line-oriented search tool and Rust successor to @command{grep}")
3032 (description
3033 "@code{ripgrep} (@command{rg}) is a line-oriented search tool that
3034recursively searches your current directory for a regex pattern while
3035respecting your gitignore rules. @code{ripgrep} is similar to other popular
3036search tools like The Silver Searcher, @command{ack} and @command{grep}.")
3037 (license (list license:unlicense license:expat))))
3038
3039(define-public ripgrep-all
3040 (package
3041 (name "ripgrep-all")
3042 (version "0.10.10")
3043 (source
3044 (origin
3045 (method git-fetch)
3046 (uri (git-reference
3047 (url "https://github.com/phiresky/ripgrep-all")
3048 (commit (string-append "v" version))))
3049 (file-name (git-file-name name version))
3050 (sha256
3051 (base32 "0vmdmv1np0r2khvg8j8i9z5zfy2h2ymhi93jzdhkn6wl3ns9wd3w"))))
3052 (build-system cargo-build-system)
3053 (arguments
3054 (list
3055 #:install-source? #f
3056 #:modules
3057 '((srfi srfi-26)
3058 (guix build utils)
3059 (guix build cargo-build-system))
3060 #:phases
3061 #~(modify-phases %standard-phases
3062 (add-after 'install 'wrap-with-path
3063 (lambda* (#:key inputs #:allow-other-keys)
3064 (for-each
3065 (lambda (bin)
3066 (wrap-program bin
3067 `("PATH" ":" prefix
3068 (,(string-join
3069 (map (compose dirname
3070 (cut search-input-file inputs <>))
3071 '("bin/ffmpeg"
3072 "bin/fzf"
3073 "bin/pandoc"
3074 "bin/pdfinfo"
3075 "bin/rg"
3076 "bin/zip"))
3077 ":")))))
3078 (find-files (string-append #$output "/bin"))))))))
3079 (native-inputs
3080 (list pkg-config xz))
3081 (inputs
3082 (cons* ffmpeg
3083 fzf
3084 pandoc
3085 poppler
3086 ripgrep
3087 sqlite
3088 zip
3089 `(,zstd "lib")
3090 (cargo-inputs 'ripgrep-all)))
3091 (home-page "https://github.com/phiresky/ripgrep-all")
3092 (synopsis "Line-oriented search tool for text and binary formats")
3093 (description
3094 "@command{rga} is a line-oriented search tool for searching in both text
3095and binary formats. It is a wrapper for @code{ripgrep} with adapters for common
3096binary formats, enabling it to search in multitude of file types: pdf, docx,
3097sqlite, jpg, movie subtitles (mkv, mp4), etc.
3098
3099This package also supports adding custom adapters in its configuration file,
3100matching for mime types or extensions and executing arbitrary executables for
3101the parsing.")
3102 (license license:agpl3+)))
3103
3104(define-public rot8
3105 (package
3106 (name "rot8")
3107 (version "1.0.0")
3108 (source (origin
3109 (method url-fetch)
3110 (uri (crate-uri "rot8" version))
3111 (file-name (string-append name "-" version ".tar.gz"))
3112 (sha256
3113 (base32
3114 "1bvb87sr9pkf6sj5ghgmga4nrp5kwiqnllzi672da5vs915xh8li"))))
3115 (build-system cargo-build-system)
3116 (arguments
3117 `(#:install-source? #f))
3118 (inputs (cargo-inputs 'rot8))
3119 (home-page "https://github.com/efernau/rot8/")
3120 (synopsis "Automatic display rotation using built-in accelerometer")
3121 (description "@command{rot8} is a daemon that automates rotating screen and
3122associated input devices using the built-in accelerometer; handy for convertible
3123touchscreen devices.")
3124 (license license:expat)))
3125
3126(define-public rusty
3127 (package
3128 (name "rusty")
3129 (version "0.5.0")
3130 (source
3131 (origin
3132 (method git-fetch)
3133 (uri (git-reference
3134 (url "https://github.com/PLC-lang/rusty")
3135 (commit (string-append "v" version))))
3136 (file-name (git-file-name name version))
3137 (sha256
3138 (base32 "1a0gv247kzclya5i78mgxav21aqrya4bv5sylh7idnzhn1ap37nb"))))
3139 (build-system cargo-build-system)
3140 (arguments
3141 (list
3142 #:install-source? #f
3143 #:cargo-install-paths ''("compiler/plc_driver")
3144 #:cargo-test-flags
3145 ;; Some of the tests assume an x86_64-linux-gnu host or cross-compiler.
3146 (if (target-x86-64?)
3147 ''()
3148 ''("--"
3149 "--skip=integration::build_description_tests::build_empty_project"
3150 "--skip=integration::build_description_tests::build_empty_project_debug"
3151 "--skip=integration::build_description_tests::build_to_temp"
3152 "--skip=integration::build_description_tests::build_with_library_link_path"
3153 "--skip=integration::build_description_tests::build_with_separate_lib_folder"
3154 "--skip=integration::build_description_tests::build_with_target_but_without_sysroot"
3155 "--skip=integration::external_files::compile_external_file"
3156 "--skip=integration::external_files::compile_external_file_with_encoding"
3157 "--skip=integration::linking::link_as_pic_object"
3158 "--skip=integration::linking::link_as_relocatable_object"
3159 "--skip=integration::linking::link_as_shared_object"
3160 "--skip=integration::linking::link_as_static_object"
3161 "--skip=integration::linking::link_constants"
3162 "--skip=integration::linking::link_files_with_same_name"
3163 "--skip=integration::linking::link_files_with_same_name_but_different_extension"
3164 "--skip=integration::linking::link_to_a_relative_location_with_no_parent"
3165 "--skip=integration::linking::link_with_initial_values"))
3166 #:phases
3167 #~(modify-phases %standard-phases
3168 (add-after 'unpack 'set-cc
3169 ;; Tests assume `cc' is available in PATH, but Guix does not
3170 ;; provide that with the `gcc' or `clang' packages.
3171 (lambda _
3172 (substitute* '("tests/integration/build_description_tests.rs"
3173 "compiler/plc_driver/src/cli.rs"
3174 "xtask/src/task.rs" "xtask/src/main.rs")
3175 (("([=\"])cc(\")" _ prefix suffix)
3176 (string-append prefix #$(cc-for-target) suffix))))))))
3177 (inputs (cons* libffi llvm-21
3178 (cargo-inputs 'rusty)))
3179 (home-page "https://plc-lang.github.io/rusty/")
3180 (synopsis "IEC 61131-3 structured text compiler")
3181 (description
3182 "RuSTy is a IEC 61131-3 @acronym{ST, Structured Text} compiler written in
3183Rust. It compiles ST down to native machine code, targeting most
3184@code{llvm}-supported targets.")
3185 (license (list license:lgpl3 license:gpl3))))
3186
3187(define-public rust-swc
3188 (package
3189 (name "rust-swc")
3190 (version "1.2.129")
3191 (source
3192 (origin
3193 (method git-fetch)
3194 (uri (git-reference
3195 (url "https://github.com/swc-project/swc")
3196 (commit (string-append "v" version))))
3197 (file-name (git-file-name name version))
3198 (sha256
3199 (base32
3200 "06dda65mfm5p819lvzkpqnf7zm3migp5j3584znvq5ickax758br"))
3201 (modules '((guix build utils)))
3202 (snippet '(substitute* "Cargo.toml"
3203 ((".*git = .*") "")))))
3204 (build-system cargo-build-system)
3205 (arguments
3206 `(#:install-source? #f
3207 #:cargo-build-flags
3208 '("--release" "-p" "swc_cli")
3209 #:cargo-test-flags
3210 '("--release" "-p" "swc_cli")
3211 #:cargo-install-paths
3212 '("crates/swc_cli")))
3213 (inputs (cargo-inputs 'rust-swc))
3214 (home-page "https://swc.rs/")
3215 (synopsis "Typescript/javascript compiler")
3216 (description "@code{rust-swc} is a typescript/javascript compiler. It
3217consumes a javascript or typescript file which uses recently added features
3218like async-await and emits javascript code which can be executed on old
3219browsers.")
3220 (license (list license:expat
3221 license:asl2.0))))
3222
3223(define-deprecated rust-swc-1 rust-swc)
3224
3225(define-public rust-cargo-edit
3226 (package
3227 (name "rust-cargo-edit")
3228 (version "0.13.10")
3229 (source (origin
3230 (method url-fetch)
3231 (uri (crate-uri "cargo-edit" version))
3232 (file-name (string-append name "-" version ".tar.gz"))
3233 (sha256
3234 (base32
3235 "0m0bbrkk8lpliwji19cd7jxzgv7i7fcdimbv52icqyr9nl0xlnba"))))
3236 (build-system cargo-build-system)
3237 (arguments
3238 (list #:install-source? #f
3239 ;; Not all files included.
3240 #:cargo-test-flags ''("--" "--skip=::case")))
3241 (native-inputs
3242 (list pkg-config))
3243 (inputs
3244 (cons* curl
3245 libgit2-1.9
3246 libssh2
3247 openssl
3248 zlib
3249 (cargo-inputs 'rust-cargo-edit)))
3250 (home-page "https://github.com/killercup/cargo-edit")
3251 (synopsis "Add and remove dependencies from the command line")
3252 (description
3253 "This package extends Cargo to allow you to add and remove dependencies
3254by modifying your @file{Cargo.toml} file from the command line.")
3255 (license (list license:asl2.0 license:expat))))
3256
3257(define-deprecated rust-cargo-edit-0.8 rust-cargo-edit)
3258
3259(define-public git-interactive-rebase-tool
3260 (package
3261 (name "git-interactive-rebase-tool")
3262 (version "2.4.1")
3263 (source
3264 (origin
3265 ;; crates.io does not provide the test data.
3266 (method git-fetch)
3267 (uri (git-reference
3268 (url "https://github.com/mitmaro/git-interactive-rebase-tool")
3269 (commit version)))
3270 (file-name (git-file-name name version))
3271 (sha256
3272 (base32
3273 "1asf1nlnbd915hs288ga67sr6540slgi2a0kmvxy7q4skd4w8n9n"))))
3274 (build-system cargo-build-system)
3275 (arguments
3276 `(#:install-source? #f
3277 #:phases
3278 (modify-phases %standard-phases
3279 (add-after 'unpack 'set-release-variable
3280 (lambda _
3281 (setenv "GIRT_BUILD_GIT_HASH" "GNUGUIX"))))))
3282 (native-inputs
3283 (list pkg-config))
3284 (inputs
3285 (cons* libgit2-1.7 zlib (cargo-inputs 'git-interactive-rebase-tool)))
3286 (home-page "https://gitrebasetool.mitmaro.ca/")
3287 (synopsis "Terminal based sequence editor for git interactive rebase")
3288 (description
3289 "This application is a terminal-based sequence editor for git interactive
3290rebase.")
3291 (license license:gpl3+)))
3292
3293(define-public pastel
3294 (package
3295 (name "pastel")
3296 (version "0.12.0")
3297 (source
3298 (origin
3299 (method url-fetch)
3300 (uri (crate-uri "pastel" version))
3301 (file-name (string-append name "-" version ".tar.gz"))
3302 (sha256
3303 (base32 "0rcvas6xcjdl9whhjzbvj3pmr7q86masn5vnvc2bmn1c3788mh30"))))
3304 (build-system cargo-build-system)
3305 (arguments
3306 (list
3307 #:install-source? #f
3308 #:imported-modules (append %copy-build-system-modules
3309 %cargo-build-system-modules)
3310 #:modules '((guix build cargo-build-system)
3311 ((guix build copy-build-system) #:prefix copy:)
3312 (guix build utils))
3313 #:phases
3314 #~(modify-phases %standard-phases
3315 (add-before 'build 'pre-build
3316 (lambda _
3317 (setenv "SHELL_COMPLETIONS_DIR" "target")))
3318 (add-after 'install 'install-extras
3319 (lambda args
3320 (apply (assoc-ref copy:%standard-phases 'install)
3321 #:install-plan
3322 '(("target/pastel.bash"
3323 "share/bash-completion/completions/pastel")
3324 ("target/pastel.fish"
3325 "share/fish/vendor_completions.d/")
3326 ("target/_pastel"
3327 "share/zsh/site-functions/")
3328 ("target/" "share/man/man1/"
3329 #:include-regexp ("\\.1$")))
3330 args))))))
3331 (inputs (cargo-inputs 'pastel))
3332 (home-page "https://github.com/sharkdp/pastel")
3333 (synopsis
3334 "Command-line tool to generate, analyze, convert and manipulate colors")
3335 (description
3336 "Pastel is a command-line tool to generate, analyze, convert and
3337manipulate colors. It supports many different color formats and color spaces
3338like RGB (sRGB), HSL, CIELAB, CIELCh as well as ANSI 8-bit and 24-bit
3339representations.")
3340 (license (list license:expat license:asl2.0))))
3341
3342(define-public prettypst
3343 (package
3344 (name "prettypst")
3345 (version "2.0.0")
3346 (source
3347 (origin
3348 (method git-fetch)
3349 (uri (git-reference
3350 (url "https://github.com/antonWetzel/prettypst")
3351 (commit version)))
3352 (file-name (git-file-name name version))
3353 (sha256
3354 (base32 "0727anhd2wl967m8k5z3bxb37h45nsjbbjz8akjn3mq96cfbfsbw"))))
3355 (build-system cargo-build-system)
3356 (arguments (list #:install-source? #f))
3357 (inputs (cargo-inputs 'prettypst))
3358 (home-page "https://github.com/antonWetzel/prettypst")
3359 (synopsis "Configurable formatter for Typst")
3360 (description
3361 "Prettypst is a configurable source file formatter for the Typst
3362typesetting system.")
3363 (license license:expat)))
3364
3365(define-public procs
3366 (package
3367 (name "procs")
3368 (version "0.14.10")
3369 (source
3370 (origin
3371 (method url-fetch)
3372 (uri (crate-uri "procs" version))
3373 (file-name (string-append name "-" version ".tar.gz"))
3374 (sha256
3375 (base32 "1s2vnfsfrzkqamd0xn7p1gh9m6ja3riksc4waw89hvjph9wng8pn"))))
3376 (build-system cargo-build-system)
3377 (arguments
3378 (list
3379 #:install-source? #f
3380 #:phases #~(modify-phases %standard-phases
3381 (add-after 'install 'install-manual-page
3382 (lambda* (#:key outputs #:allow-other-keys)
3383 (let* ((out (assoc-ref outputs "out"))
3384 (man (string-append out "/share/man/man1")))
3385 (mkdir-p man)
3386 (invoke "a2x"
3387 "--no-xmllint"
3388 "--doctype=manpage"
3389 "--format=manpage"
3390 "man/procs.1.adoc"
3391 (string-append "--destination-dir=" man)))))
3392 (add-after 'install 'install-shell-completions
3393 (lambda* (#:key native-inputs outputs #:allow-other-keys)
3394 (let* ((out (assoc-ref outputs "out"))
3395 (share (string-append out "/share"))
3396 (bash-completions-dir
3397 (string-append out "/etc/bash_completion.d/"))
3398 (zsh-completions-dir
3399 (string-append share "/zsh/site-functions"))
3400 (fish-completions-dir
3401 (string-append share "/fish/vendor_completions.d"))
3402 (elvish-completions-dir
3403 (string-append share "/elvish/lib"))
3404 (procs (if #$(%current-target-system)
3405 (search-input-file native-inputs "/bin/procs")
3406 (string-append out "/bin/procs"))))
3407 (for-each mkdir-p
3408 (list bash-completions-dir
3409 zsh-completions-dir
3410 fish-completions-dir
3411 elvish-completions-dir))
3412 (with-output-to-file
3413 (string-append bash-completions-dir "/procs")
3414 (lambda _ (invoke procs "--gen-completion-out" "bash")))
3415 (with-output-to-file
3416 (string-append zsh-completions-dir "/_procs")
3417 (lambda _ (invoke procs "--gen-completion-out" "zsh")))
3418 (with-output-to-file
3419 (string-append fish-completions-dir "/procs.fish")
3420 (lambda _ (invoke procs "--gen-completion-out" "fish")))
3421 (with-output-to-file
3422 (string-append elvish-completions-dir "/procs")
3423 (lambda _ (invoke procs "--gen-completion-out" "elvish")))))))))
3424 (native-inputs
3425 (append
3426 (if (%current-target-system)
3427 (list this-package)
3428 '())
3429 (list asciidoc)))
3430 (inputs (cargo-inputs 'procs))
3431 (home-page "https://github.com/dalance/procs")
3432 (synopsis "Modern replacement for @command{ps}")
3433 (description "This package provides a modern replacement for @command{ps}
3434with colored output, multi-column keyword search, additional information, pager
3435support, watch support (like @command{top}) and a tree view.")
3436 (license license:expat)))
3437
3438(define-public rust-cbindgen-0.29
3439 (package
3440 (name "rust-cbindgen")
3441 (version "0.29.4")
3442 (source
3443 (origin
3444 (method url-fetch)
3445 (uri (crate-uri "cbindgen" version))
3446 (file-name (string-append name "-" version ".tar.gz"))
3447 (sha256
3448 (base32 "085f02ma9cdz0alnl1p6b1x6bmr7i9nnasq2fjk7n5lw9i457jrf"))))
3449 (build-system cargo-build-system)
3450 (arguments (list #:install-source? #f))
3451 (native-inputs (list python-cython))
3452 (inputs (cargo-inputs 'rust-cbindgen-0.29))
3453 (home-page "https://github.com/mozilla/cbindgen")
3454 (synopsis "Tool for generating C bindings to Rust code")
3455 (description
3456 "This package provides a tool for generating C/C++ bindings to Rust code.")
3457 (license license:mpl2.0)))
3458
3459(define-public rust-cbindgen-0.28
3460 (package
3461 (inherit rust-cbindgen-0.29)
3462 (name "rust-cbindgen")
3463 (version "0.28.0")
3464 (source
3465 (origin
3466 (method url-fetch)
3467 (uri (crate-uri "cbindgen" version))
3468 (file-name (string-append name "-" version ".tar.gz"))
3469 (sha256
3470 (base32 "1zyiaifg6mcd4wwhhbxk8adzhph6qz4wxzgagvg3ijp95j58dpga"))))
3471 (inputs (cargo-inputs 'rust-cbindgen-0.28))))
3472
3473(define-public rust-cbindgen-0.27
3474 (package
3475 (inherit rust-cbindgen-0.28)
3476 (name "rust-cbindgen")
3477 (version "0.27.0")
3478 (source
3479 (origin
3480 (method url-fetch)
3481 (uri (crate-uri "cbindgen" version))
3482 (file-name (string-append name "-" version ".tar.gz"))
3483 (sha256
3484 (base32 "1sqm3axr678d72yihgmpr9d17mj99ccibxfqhw53mgzwzkbqvkiz"))))))
3485
3486(define-public rust-cbindgen-0.26
3487 (package
3488 (inherit rust-cbindgen-0.27)
3489 (name "rust-cbindgen")
3490 (version "0.26.0")
3491 (source
3492 (origin
3493 (method url-fetch)
3494 (uri (crate-uri "cbindgen" version))
3495 (file-name (string-append name "-" version ".tar.gz"))
3496 (sha256
3497 (base32 "0jdbxmn5h5nlr4bifx85gny309djv5djs9q78fa1d7sj0wdw2sys"))))
3498 (inputs (cargo-inputs 'rust-cbindgen-0.26))))
3499
3500(define-public rust-cbindgen rust-cbindgen-0.29)
3501
3502(define-public rust-bindgen-cli
3503 (package
3504 (name "rust-bindgen-cli")
3505 (version "0.71.1")
3506 (source
3507 (origin
3508 (method url-fetch)
3509 (uri (crate-uri "bindgen-cli" version))
3510 (file-name (string-append name "-" version ".tar.gz"))
3511 (sha256
3512 (base32 "1p2lmkl7vfhpr8gnav11p1jrwrqsmrqwr2fgwp5x1bsn17511vgx"))))
3513 (build-system cargo-build-system)
3514 (arguments
3515 `(#:install-source? #f
3516 #:phases
3517 (modify-phases %standard-phases
3518 (replace 'install
3519 (lambda* (#:key inputs outputs #:allow-other-keys)
3520 (let* ((bin (string-append (assoc-ref outputs "out") "/bin"))
3521 (bindgen (string-append bin "/bindgen"))
3522 (clang (assoc-ref inputs "clang"))
3523 (llvm-dir (string-append clang "/lib"))
3524 (clang-bin (string-append clang "/bin")))
3525 (install-file "target/release/bindgen" bin)
3526 (wrap-program bindgen
3527 `("LIBCLANG_PATH" = (,llvm-dir))
3528 ;; The bindgen binary requires clang, add one as a fallback.
3529 `("PATH" suffix (,clang-bin))))))
3530 (add-after 'install 'install-completions
3531 (lambda* (#:key native-inputs outputs #:allow-other-keys)
3532 (let* ((out (assoc-ref outputs "out"))
3533 (share (string-append out "/share"))
3534 (bindgen (string-append out "/bin/bindgen")))
3535 (mkdir-p (string-append out "/etc/bash_completion.d/"))
3536 (with-output-to-file
3537 (string-append out "/etc/bash_completion.d/bindgen")
3538 (lambda _ (invoke bindgen "--generate-shell-completions" "bash")))
3539 (mkdir-p (string-append share "/fish/vendor_completions.d"))
3540 (with-output-to-file
3541 (string-append share "/fish/vendor_completions.d/bindgen.fish")
3542 (lambda _ (invoke bindgen "--generate-shell-completions" "fish")))
3543 (mkdir-p (string-append share "/zsh/site-functions"))
3544 (with-output-to-file
3545 (string-append share "/zsh/site-functions/_bindgen")
3546 (lambda _ (invoke bindgen "--generate-shell-completions" "zsh")))
3547 (mkdir-p (string-append share "/elvish/lib"))
3548 (with-output-to-file
3549 (string-append share "/elvish/lib/bindgen")
3550 (lambda _
3551 (invoke bindgen "--generate-shell-completions" "elvish")))))))))
3552 ;; Ensure the same version for clang here, mesa's clang and llvm-for-mesa.
3553 (inputs (cons* bash-minimal clang-18 (cargo-inputs 'rust-bindgen-cli)))
3554 (home-page "https://rust-lang.github.io/rust-bindgen/")
3555 (synopsis "Generate Rust FFI bindings to C and C++ libraries")
3556 (description "This package can be used to automatically generate Rust FFI
3557bindings to C and C++ libraries. This package provides the @command{bindgen}
3558command.")
3559 (license license:bsd-3)))
3560
3561(define-public wasm-bindgen-cli
3562 (package
3563 (name "wasm-bindgen-cli")
3564 (version "0.2.120")
3565 (source
3566 (origin
3567 (method git-fetch)
3568 (uri (git-reference
3569 (url "https://github.com/wasm-bindgen/wasm-bindgen")
3570 (commit version)))
3571 (file-name (git-file-name name version))
3572 (sha256
3573 (base32 "0404jgzfcbmjvr1zl9jgw49nqs1s182cbvdzwh92i76qd2cpg166"))
3574 (modules '((guix build utils)))
3575 (snippet
3576 '(begin
3577 ;; Remove examples and benchmarks from workspace; they have
3578 ;; unneeded git dependencies (e.g. raytracer) or bundled blobs.
3579 (substitute* "Cargo.toml"
3580 ((".*\"examples/[^\"]*\",?") "")
3581 ((".*\"benchmarks[^\"]*\",?") ""))
3582 (delete-file-recursively "examples")
3583 (delete-file-recursively "benchmarks")))))
3584 (build-system cargo-build-system)
3585 (arguments
3586 (list
3587 #:install-source? #f
3588 #:cargo-build-flags ''("--release" "-p" "wasm-bindgen-cli")
3589 #:cargo-install-paths ''("crates/cli")))
3590 (inputs (cargo-inputs 'wasm-bindgen-cli))
3591 (home-page "https://github.com/wasm-bindgen/wasm-bindgen/")
3592 (synopsis "Generate JavaScript bindings for Rust WASM modules")
3593 (description "This package provides the @command{wasm-bindgen} command,
3594which generates JavaScript glue code for communicating between WebAssembly
3595modules and JavaScript.")
3596 ;; Choose either license at your option.
3597 (license (list license:expat license:asl2.0))))
3598
3599(define-public sniffglue
3600 (package
3601 (name "sniffglue")
3602 (version "0.16.1")
3603 (source
3604 (origin
3605 (method url-fetch)
3606 (uri (crate-uri "sniffglue" version))
3607 (file-name (string-append name "-" version ".tar.gz"))
3608 (sha256
3609 (base32
3610 "0dkkw8gwrgawd2s5bg47508i3kjnsv1dwmqa3hlijdvdw4wgm9gz"))))
3611 (build-system cargo-build-system)
3612 (arguments
3613 `(#:install-source? #f))
3614 (inputs
3615 (cons* libpcap libseccomp (cargo-inputs 'sniffglue)))
3616 (home-page "https://github.com/kpcyrd/sniffglue")
3617 (synopsis "Secure multithreaded packet sniffer")
3618 (description
3619 "This package provides a network sniffer written in Rust. Packets
3620are parsed concurrently using a thread pool to utilize all cpu cores. A goal
3621of the project is to be runnable on untrusted networks without crashing.")
3622 (license license:gpl3)))
3623
3624(define-public soundcloud-tui
3625 (package
3626 (name "soundcloud-tui")
3627 (version "0.1.10")
3628 (source
3629 (origin
3630 (method git-fetch)
3631 (uri (git-reference
3632 (url "https://github.com/7ito/soundcloud-tui")
3633 (commit (string-append "v" version))))
3634 (file-name (git-file-name name version))
3635 (sha256
3636 (base32 "0f2c98g3dhqh99xw1129jl3qw7ngfgiajhiq2c1vmc08qm0k36lc"))))
3637 (build-system cargo-build-system)
3638 (arguments
3639 (list #:install-source? #f))
3640 (native-inputs
3641 (list clang-13 pkg-config))
3642 (inputs
3643 (cons* alsa-lib ffmpeg
3644 (cargo-inputs 'soundcloud-tui)))
3645 (home-page "https://github.com/7ito/soundcloud-tui")
3646 (synopsis "SoundCloud client for terminal")
3647 (description "@command{soundcloud-tui} is a @uref{https://soundcloud.com,
3648SoundCloud} client for terminal, written in Rust. It can search for tracks,
3649users and playlists, browse your feed, likes and playlists, play audio with
3650bundled native streaming, manage a queue and add tracks to playlists or liked
3651songs, and use a fullscreen visualizer and customizable settings and
3652keybindings.")
3653 (license license:expat)))
3654
3655(define-public speakersafetyd
3656 (package
3657 (name "speakersafetyd")
3658 (version "1.1.2")
3659 (source
3660 (origin
3661 (method url-fetch)
3662 (uri (crate-uri "speakersafetyd" version))
3663 (file-name (string-append name "-" version ".tar.gz"))
3664 (sha256
3665 (base32 "1c4yk8mq8nazshdcasimlgnyhx27wzkad4wzicy5x43grq26b966"))))
3666 (build-system cargo-build-system)
3667 (arguments
3668 (list
3669 #:install-source? #f
3670 #:phases
3671 #~(modify-phases %standard-phases
3672 (add-after 'unpack 'fix-paths
3673 (lambda _
3674 (substitute* "src/main.rs"
3675 (("/usr/local") #$output))))
3676 (add-after 'unpack 'remove-systemd-udev-rules
3677 (lambda _
3678 (substitute* "95-speakersafetyd.rules"
3679 ((".*SYSTEMD_WANTS.*") ""))))
3680 (add-before 'install 'prepare-to-install
3681 (lambda _
3682 (setenv "DESTDIR" #$output)
3683 (setenv "SHAREDIR" "/share")
3684 (setenv "SPEAKERSAFETYD_GROUP" "nixbld")
3685 (setenv "SPEAKERSAFETYD_USER" "nixbld")
3686 (invoke "make" "install"))))))
3687 (inputs (cons alsa-lib (cargo-inputs 'speakersafetyd)))
3688 (native-inputs (list pkg-config))
3689 (home-page "https://github.com/AsahiLinux/speakersafetyd/")
3690 (synopsis "Speaker protection daemon")
3691 (description "Speakersafetyd is a userspace daemon written in Rust that
3692implements an analogue of the Texas Instruments Smart Amp speaker protection
3693model.")
3694 (license license:expat)))
3695
3696(define-public systemd-lsp
3697 (package
3698 (name "systemd-lsp")
3699 (version "0.1.1")
3700 (source
3701 (origin
3702 (method url-fetch)
3703 (uri (crate-uri "systemd-lsp" version))
3704 (file-name (string-append name "-" version ".tar.gz"))
3705 (sha256
3706 (base32 "0a9j93d89pnrmhsp2j219zppp0r0lkrapkf4wlqllycng90grjzb"))))
3707 (build-system cargo-build-system)
3708 (arguments
3709 (list
3710 #:install-source? #f
3711 #:phases
3712 #~(modify-phases %standard-phases
3713 (add-after 'install 'install-doc
3714 (lambda* (#:key outputs #:allow-other-keys)
3715 (let* ((out (assoc-ref outputs "out"))
3716 (doc (string-append out "/share/doc/" #$name "-" #$version)))
3717 (copy-recursively "docs/" doc)))))))
3718 (inputs (cargo-inputs 'systemd-lsp))
3719 (home-page "https://github.com/jfryy/systemd-lsp")
3720 (synopsis "Language Server Protocol implementation for systemd unit files")
3721 (description
3722 "A @acronym{LSP, Language Server Protocol} implementation for systemd unit
3723files, providing editing support with syntax highlighting and analysis,
3724diagnostics, autocompletion, documentation, and formatting.")
3725 (license license:expat)))
3726
3727(define-public tectonic
3728 (package
3729 (name "tectonic")
3730 (version "0.16.9")
3731 (source
3732 (origin
3733 ;; Grab all the sources instead of each packaged crate in the workspace.
3734 (method git-fetch)
3735 (uri (git-reference
3736 (url "https://github.com/tectonic-typesetting/tectonic")
3737 (commit (string-append name "@" version))))
3738 (file-name (git-file-name name version))
3739 (sha256
3740 (base32 "1v9rs8wq608dwyr5wza9jlh9y8d3adm7jxny8dq02zpbda362ap7"))))
3741 (build-system cargo-build-system)
3742 (arguments
3743 (list
3744 #:install-source? #f
3745 #:modules
3746 '((guix build cargo-build-system)
3747 (guix build utils)
3748 (ice-9 match))
3749 #:cargo-install-paths ''(".")
3750 #:features '(list "external-harfbuzz")
3751 #:cargo-test-flags '(list "--features" "external-harfbuzz"
3752 "--"
3753 "--skip=no_segfault_after_failed_compilation")
3754 #:phases
3755 #~(modify-phases %standard-phases
3756 (add-after 'install 'install-doc
3757 (lambda* (#:key outputs #:allow-other-keys)
3758 (let* ((out (assoc-ref outputs "out"))
3759 (doc (string-append out "/share/doc/" #$name "-" #$version)))
3760 (copy-recursively "docs/src" doc))))
3761 (add-after 'install 'install-completions
3762 (lambda* (#:key native-inputs #:allow-other-keys)
3763 (for-each
3764 (match-lambda
3765 ((shell . path)
3766 (mkdir-p (in-vicinity #$output (dirname path)))
3767 (let ((binary
3768 (if #$(%current-target-system)
3769 (search-input-file native-inputs "bin/tectonic")
3770 (in-vicinity #$output "bin/tectonic"))))
3771 (with-output-to-file (in-vicinity #$output path)
3772 (lambda _
3773 (invoke binary "-X" "show" "shell-completions" shell))))))
3774 '(("bash" . "share/bash-completion/completions/tectonic")
3775 ("elvish" . "share/elvish/lib/tectonic")
3776 ("fish" . "share/fish/vendor_completions.d/tectonic.fish")
3777 ("zsh" . "share/zsh/site-functions/_tectonic"))))))))
3778 (native-inputs
3779 (list pkg-config))
3780 (inputs
3781 (cons* fontconfig
3782 freetype
3783 graphite2
3784 harfbuzz
3785 icu4c
3786 openssl
3787 (cargo-inputs 'tectonic)))
3788 (home-page "https://tectonic-typesetting.github.io/")
3789 (synopsis "Complete, embeddable TeX/LaTeX engine")
3790 (description
3791 "This package provides a modernized, complete, embeddable
3792TeX/LaTeX engine. Tectonic is forked from the XeTeX extension to the
3793classic Web2C implementation of TeX and uses the TeXLive distribution
3794of support files.")
3795 (license license:expat)))
3796
3797(define-public treefmt
3798 (package
3799 (name "treefmt")
3800 (version "0.6.1")
3801 (source
3802 (origin
3803 (method url-fetch)
3804 (uri (crate-uri "treefmt" version))
3805 (file-name (string-append name "-" version ".tar.gz"))
3806 (sha256
3807 (base32 "1pfx8kgaf0rc8ijps2fqb61gjnak3sf430hvg52bnby9qqyd51h8"))))
3808 (build-system cargo-build-system)
3809 (arguments
3810 `(#:install-source? #f))
3811 (inputs (cargo-inputs 'treefmt))
3812 (home-page "https://numtide.github.io/treefmt")
3813 (synopsis "Command-line application to format the code tree")
3814 (description
3815 "This application provides a way to unify the formatting process of the
3816codebase. It is nice for large code trees where using multiple formatters are
3817common. @command{treefmt} comes with the following features.
3818
3819@itemize
3820@item Unified CLI and output.
3821@item Runs formatters in parallel.
3822@item Cache changed files for performance.
3823@end itemize
3824
3825The application does have some design decisions to keep in mind.
3826
3827@itemize
3828@item The source code is kept under version control, making it possible to
3829revert and check changes.
3830@item Only one formatter per file, making outputs idempotent.
3831@end itemize")
3832 (license license:expat)))
3833
3834(define-public hex
3835 (package
3836 (name "hex")
3837 (version "0.6.0")
3838 (source
3839 (origin
3840 ;; crates.io does not provide the test data.
3841 ;; Not all releases are pushed to crates.io.
3842 (method git-fetch)
3843 (uri (git-reference
3844 (url "https://github.com/sitkevij/hex")
3845 (commit (string-append "v" version))))
3846 (file-name (git-file-name name version))
3847 (sha256
3848 (base32 "0kv07ghibifs6rnskg1na6a0hdb0f8vqfbpv5k8g09lc2075gjv1"))))
3849 (build-system cargo-build-system)
3850 (arguments
3851 `(#:install-source? #f
3852 #:cargo-test-flags '("--"
3853 ;; Not all files included.
3854 "--skip=tests::test_cli_arg_order_1"
3855 "--skip=tests::test_cli_arg_order_2"
3856 "--skip=tests::test_cli_input_directory"
3857 "--skip=tests::test_cli_input_missing_file"
3858 "--skip=tests::test_cli_input_stdin"
3859 "--skip=tests::test_cli_missing_param_value")
3860 #:phases
3861 (modify-phases %standard-phases
3862 (add-after 'install 'install-more
3863 (lambda* (#:key outputs #:allow-other-keys)
3864 (let ((out (assoc-ref outputs "out")))
3865 (install-file "hx.1" (string-append out "/share/man/man1"))))))))
3866 (inputs (cargo-inputs 'hex))
3867 (home-page "https://github.com/sitkevij/hex")
3868 (synopsis "Hexadecimal colorized view of a file")
3869 (description
3870 "@command{hx} accepts a file path as input and outputs a hexadecimal
3871colorized view to stdout.")
3872 (license license:expat)))
3873
3874(define-public tokei
3875 (package
3876 (name "tokei")
3877 (version "14.0.0")
3878 (source
3879 (origin
3880 (method url-fetch)
3881 (uri (crate-uri "tokei" version))
3882 (file-name (string-append name "-" version ".tar.gz"))
3883 (sha256
3884 (base32 "15v7ha13w4zrr2a6vlrj641qcrczvyjhvnqf147g64n3q1spipp4"))))
3885 (build-system cargo-build-system)
3886 (arguments
3887 `(#:cargo-test-flags
3888 '("--"
3889 ;; Tests directory not included in release.
3890 "--skip=language::language_type::tests::lf_embedded_language_is_counted"
3891 "--skip=language::language_type::tests::jupyter_notebook_has_correct_totals")
3892 #:install-source? #f))
3893 (native-inputs (list pkg-config))
3894 (inputs (cons* libgit2-1.8 openssl zlib
3895 (cargo-inputs 'tokei)))
3896 (home-page "https://github.com/XAMPPRocky/tokei")
3897 (synopsis "Count code, quickly")
3898 (description
3899 "Tokei is a program that displays statistics about your code. Tokei will
3900show number of files, total lines within those files and code, comments, and
3901blanks grouped by language.")
3902 (license (list license:expat license:asl2.0))))
3903
3904(define-public typst
3905 (package
3906 (name "typst")
3907 (version "0.15.0")
3908 (source
3909 (origin
3910 (method git-fetch)
3911 (uri (git-reference
3912 (url "https://github.com/typst/typst")
3913 (commit (string-append "v" version))))
3914 (file-name (git-file-name name version))
3915 (sha256
3916 (base32 "0y727lyicn3ciq36mdpbcg8d09naff39y1i52467mlmr11p0l9xa"))))
3917 (build-system cargo-build-system)
3918 (arguments
3919 (list
3920 #:install-source? #f
3921 #:imported-modules (append %copy-build-system-modules
3922 %cargo-build-system-modules)
3923 #:modules '((guix build cargo-build-system)
3924 ((guix build copy-build-system) #:prefix copy:)
3925 (guix build utils))
3926 #:cargo-install-paths ''("crates/typst-cli")
3927 #:phases
3928 #~(modify-phases %standard-phases
3929 (add-after 'unpack 'set-version-string
3930 (lambda _
3931 (setenv "TYPST_VERSION" #$(package-version this-package))))
3932 (add-after 'unpack 'fix-dev-assets
3933 (lambda _
3934 (substitute* "Cargo.toml"
3935 (("typst-dev-assets = \\{[^}]*\\}")
3936 (string-append "typst-dev-assets = {version=\""
3937 #$version
3938 "\"}")))))
3939 (add-after 'configure 'configure-artifacts
3940 (lambda _
3941 (setenv "GEN_ARTIFACTS" (string-append (getcwd) "/artifacts"))))
3942 (add-after 'install 'install-artifacts
3943 (lambda args
3944 (apply (assoc-ref copy:%standard-phases 'install)
3945 #:install-plan
3946 '(("artifacts/typst.bash"
3947 "share/bash-completion/completions/typst")
3948 ("artifacts/typst.elv"
3949 "share//elvish/lib/typst")
3950 ("artifacts/typst.fish"
3951 "share/fish/vendor_completions.d/")
3952 ("artifacts/_typst"
3953 "share/zsh/site-functions/")
3954 ("artifacts/" "share/man/man1/"
3955 #:include-regexp ("\\.1$")))
3956 args))))))
3957 (inputs (cons* openssl (cargo-inputs 'typst)))
3958 (native-search-paths
3959 (list (search-path-specification
3960 (variable "TYPST_PACKAGE_PATH")
3961 (files '("share/typst/packages"))
3962 (separator #f))
3963 (search-path-specification
3964 (variable "TYPST_FONT_PATHS")
3965 (files '("share/fonts" "share/texmf-dist/fonts")))))
3966 (home-page "https://typst.app/")
3967 (synopsis "LaTeX-like typesetting system")
3968 (description
3969 "Typst is a markup-based typesetting system that is designed to be as
3970powerful as LaTeX while being much easier to learn and use. Features include
3971built-in markup for math typesetting, bibliography management and other common
3972tasks, an extensible scripting system for uncommon tasks, incremental
3973compilation, and intuitive error messages.")
3974 (license license:asl2.0)))
3975
3976(define-public typstyle
3977 (package
3978 (name "typstyle")
3979 (version "0.13.10")
3980 (source
3981 (origin
3982 (method url-fetch)
3983 (uri (crate-uri "typstyle" version))
3984 (file-name (string-append name "-" version ".tar.gz"))
3985 (sha256
3986 (base32 "06mg12rkls1hkiz8wxchj1jqf1l1bq963s80mrvjfiajb08zqdx1"))))
3987 (build-system cargo-build-system)
3988 (arguments
3989 (list
3990 #:install-source? #f
3991 #:modules
3992 '((guix build cargo-build-system)
3993 (guix build utils)
3994 (ice-9 match))
3995 #:phases
3996 #~(modify-phases %standard-phases
3997 (add-after 'install 'install-completions
3998 (lambda* (#:key native-inputs #:allow-other-keys)
3999 (for-each
4000 (match-lambda
4001 ((shell . path)
4002 (mkdir-p (in-vicinity #$output (dirname path)))
4003 (let ((binary
4004 (if #$(%current-target-system)
4005 (search-input-file native-inputs "bin/typstyle")
4006 (in-vicinity #$output "bin/typstyle"))))
4007 (with-output-to-file (in-vicinity #$output path)
4008 (lambda _
4009 (invoke binary "completions" shell))))))
4010 '(("bash" . "share/bash-completion/completions/typstyle")
4011 ("elvish" . "share/elvish/lib/typstyle")
4012 ("fish" . "share/fish/vendor_completions.d/typstyle.fish")
4013 ("zsh" . "share/zsh/site-functions/_typstyle"))))))))
4014 (native-inputs
4015 (if (%current-target-system)
4016 (list this-package)
4017 '()))
4018 (inputs (cargo-inputs 'typstyle))
4019 (home-page "https://enter-tainer.github.io/typstyle/")
4020 (synopsis "Consistent formatter for Typst")
4021 (description
4022 "Typstyle is a formatter for the Typst typesetting system designed with
4023universal consistency and correctness as top priorities. It is
4024configuration-free.")
4025 (license license:asl2.0)))
4026
4027(define-public vhdl-ls
4028 (package
4029 (name "vhdl-ls")
4030 (version "0.87.0")
4031 (source
4032 (origin
4033 (method git-fetch)
4034 (uri (git-reference
4035 (url "https://github.com/VHDL-LS/rust_hdl")
4036 (commit (string-append "v" version))))
4037 (file-name (git-file-name name version))
4038 (sha256
4039 (base32 "189ya2kxhykfx39yibp5cvdv8jk9whj81b9v6k0n6ihg9a4l21xm"))))
4040 (build-system cargo-build-system)
4041 (arguments
4042 (list
4043 #:install-source? #f
4044 #:cargo-install-paths ''("vhdl_ls")
4045 #:phases
4046 #~(modify-phases %standard-phases
4047 (add-after 'install 'install-libraries
4048 (lambda _
4049 (mkdir-p (string-append #$output "/share/vhdl_libraries"))
4050 (copy-recursively
4051 "vhdl_libraries"
4052 (string-append #$output "/share/vhdl_libraries")))))))
4053 (inputs (cargo-inputs 'vhdl-ls))
4054 (home-page "https://github.com/VHDL-LS/rust_hdl")
4055 (synopsis "VHDL language server")
4056 (description
4057 "This package provides a VHDL language server protocol implementation with
4058support for diagnostics, navigating to symbol, finding all references etc.")
4059 (license license:mpl2.0)))
4060
4061(define-public vivid
4062 (package
4063 (name "vivid")
4064 (version "0.10.1")
4065 (source
4066 (origin
4067 (method url-fetch)
4068 (uri (crate-uri "vivid" version))
4069 (file-name (string-append name "-" version ".tar.gz"))
4070 (sha256
4071 (base32 "1xynznf7drvhjhhnwdxrbjgr6qgfa5lzwxxqdclnjvzwkbhl2i2q"))))
4072 (build-system cargo-build-system)
4073 (arguments
4074 `(#:install-source? #f))
4075 (inputs (cargo-inputs 'vivid))
4076 (home-page "https://github.com/sharkdp/vivid")
4077 (synopsis "LS_COLORS environment variable manager")
4078 (description
4079 "vivid is a generator for the @code{LS_COLORS} environment variable that
4080controls the colorized output of ls, tree, fd, bfs, dust and many other tools.
4081
4082It uses a YAML configuration format for the filetype-database and the color
4083themes. In contrast to @command{dircolors}, the database and the themes are
4084organized in different files. This allows users to choose and customize color
4085themes independent from the collection of file extensions. Instead of using
4086cryptic ANSI escape codes, colors can be specified in the RRGGBB format and
4087will be translated to either truecolor (24-bit) ANSI codes or 8-bit codes for
4088older terminal emulators.")
4089 (license (list license:expat license:asl2.0))))
4090
4091(define-public vtracer
4092 (package
4093 (name "vtracer")
4094 (version "0.6.5")
4095 (source
4096 (origin
4097 (method url-fetch)
4098 (uri (crate-uri "vtracer" version))
4099 (file-name (string-append name "-" version ".tar.gz"))
4100 (sha256
4101 (base32 "035x0dbbyi3nnyc2ajawdjq9j6slpsq2k2hmyf3p77n9qn3p2c62"))))
4102 (build-system cargo-build-system)
4103 (native-inputs (list (@ (gnu packages build-tools) maturin)
4104 python-wrapper))
4105 (inputs (cargo-inputs 'vtracer))
4106 (arguments
4107 (list
4108 #:install-source? #f
4109 #:imported-modules
4110 `(,@%cargo-build-system-modules ,@%pyproject-build-system-modules)
4111 #:modules '((guix build cargo-build-system)
4112 ((guix build pyproject-build-system)
4113 #:prefix py:)
4114 (guix build utils))
4115 #:phases
4116 #~(modify-phases %standard-phases
4117 (add-after 'build 'build-python-module
4118 (assoc-ref py:%standard-phases
4119 'build))
4120 (add-after 'build-python-module 'install-python-module
4121 (assoc-ref py:%standard-phases
4122 'install)))))
4123 (home-page "http://www.visioncortex.org/vtracer")
4124 (synopsis "Raster to vector graphics converter with Python bindings")
4125 (description
4126 "VTracer is a command-line tool and library to convert raster images (like
4127PNG and JPEG) into vector graphics (SVG).")
4128 (license (list license:expat license:asl2.0))))
4129
4130(define-public watchexec
4131 (package
4132 (name "watchexec")
4133 (version "2.5.1")
4134 (source
4135 (origin
4136 (method url-fetch)
4137 (uri (crate-uri "watchexec-cli" version))
4138 (file-name (string-append name "-" version ".tar.gz"))
4139 (sha256
4140 (base32 "1p74v8m23ykvxyjgzz675vahpkwjjgbkqq9wfh0wap0aya22d5qz"))))
4141 (build-system cargo-build-system)
4142 (arguments
4143 `(#:install-source? #f
4144 #:phases
4145 (modify-phases %standard-phases
4146 (add-after 'install 'install-completions
4147 (lambda* (#:key outputs #:allow-other-keys)
4148 (let* ((out (assoc-ref outputs "out"))
4149 (zsh (string-append out "/share/zsh/site-functions/_watchexec"))
4150 (doc (string-append out "/share/doc/watchexec-" ,version)))
4151 (mkdir-p (dirname zsh))
4152 ;; FIXME: The crates.io source does not provide zsh
4153 ;; completions. But the GitHub source does not compile.
4154 ;;
4155 ;; (copy-file "completions/zsh" zsh)
4156 (install-file "README.md" doc)))))))
4157 (inputs (cargo-inputs 'watchexec))
4158 (home-page "https://github.com/watchexec/watchexec")
4159 (synopsis "Executes commands in response to file modifications")
4160 (description
4161 "@command{watchexec} is a simple, standalone tool that watches a path and
4162runs a command whenever it detects modifications.")
4163 (license license:asl2.0)))
4164
4165(define-public rbw
4166 (package
4167 (name "rbw")
4168 (version "1.15.0")
4169 (outputs '("out" "scripts"))
4170 (source
4171 (origin
4172 (method url-fetch)
4173 (uri (crate-uri "rbw" version))
4174 (file-name (string-append name "-" version ".tar.gz"))
4175 (sha256
4176 (base32 "1fg9jad5r255xcnc22ldmjra9ydf40yqvmpa7pwrzxncvf37v3l9"))))
4177 (build-system cargo-build-system)
4178 (arguments
4179 (list
4180 #:install-source? #f
4181 #:modules
4182 '((guix build cargo-build-system)
4183 (guix build utils)
4184 (ice-9 match))
4185 #:phases
4186 #~(modify-phases %standard-phases
4187 (add-after 'install 'install-completions
4188 (lambda* (#:key native-inputs #:allow-other-keys)
4189 (for-each
4190 (match-lambda
4191 ((shell . path)
4192 (mkdir-p (in-vicinity #$output (dirname path)))
4193 (let ((binary
4194 (if #$(%current-target-system)
4195 (search-input-file native-inputs "bin/rbw")
4196 (in-vicinity #$output "bin/rbw"))))
4197 (with-output-to-file (in-vicinity #$output path)
4198 (lambda _
4199 (invoke binary "gen-completions" shell))))))
4200 '(("bash" . "share/bash-completion/completions/rbw")
4201 ("elvish" . "share/elvish/lib/rbw")
4202 ("fish" . "share/fish/vendor_completions.d/rbw.fish")
4203 ("nushell" . "share/nushell/vendor/autoload/rbw")
4204 ("zsh" . "share/zsh/site-functions/_rbw")))))
4205 (add-after 'install 'install-scripts
4206 (lambda* (#:key inputs #:allow-other-keys)
4207 (for-each
4208 (lambda (file)
4209 (wrap-script file
4210 ;; TODO: Do we want to wrap these with more programs?
4211 ;; pass git fzf libsecret xclip rofi
4212 `("PATH" prefix
4213 (,(string-append #$output "/bin")
4214 ,(dirname (search-input-file inputs "/bin/grep"))
4215 ,(dirname (search-input-file inputs "/bin/sed"))
4216 ,(dirname (search-input-file inputs "/bin/perl"))
4217 ,(dirname (search-input-file inputs "/bin/xargs"))
4218 ,(dirname (search-input-file inputs "/bin/sort")))))
4219 (install-file file (string-append #$output:scripts "/bin")))
4220 (find-files "bin")))))))
4221 (native-inputs
4222 (cons* perl (if (%current-target-system)
4223 (list this-package)
4224 '())))
4225 (inputs
4226 (cons* coreutils-minimal findutils grep perl sed (cargo-inputs 'rbw)))
4227 (home-page "https://git.tozt.net/rbw")
4228 (synopsis "Unofficial Bitwarden CLI")
4229 (description "This package is an unofficial command line client for
4230Bitwarden. Although Bitwarden ships with a command line client, but
4231it's limited by being stateless, which makes it very difficult to use. This
4232client avoids that problem by maintaining a background process which is able
4233to hold the keys in memory, similar to the way that ssh-agent or gpg-agent
4234work. This allows the client to be used in a much simpler way, with the
4235background agent taking care of maintaining the necessary state.")
4236 (license license:expat)))
4237
4238;; Note: Keep it in sync with our current rust:cargo version.
4239(define-public rust-cargo-c
4240 (package
4241 (name "rust-cargo-c")
4242 (version "0.10.20+cargo-0.94.0")
4243 (source
4244 (origin
4245 (method url-fetch)
4246 (uri (crate-uri "cargo-c" version))
4247 (file-name (string-append name "-" version ".tar.gz"))
4248 (sha256
4249 (base32 "0q1198xlkcd50nxx722s18lpm6hacnvzqqacb0xdld8ll9z3m5ay"))))
4250 (build-system cargo-build-system)
4251 (arguments (list #:install-source? #f))
4252 (native-inputs
4253 (list pkg-config))
4254 (inputs
4255 (cons* curl
4256 libgit2-1.9/pinned
4257 libssh2
4258 openssl
4259 sqlite
4260 zlib
4261 (cargo-inputs 'rust-cargo-c)))
4262 (home-page "https://github.com/lu-zero/cargo-c")
4263 (synopsis "Build and install C-compatible libraries")
4264 (description
4265 "This package produces and installs a correct pkg-config file, a static
4266library and a dynamic library, and a C header to be used by any C (and
4267C-compatible) software.")
4268 (license license:expat)))
4269
4270(define-public rtss
4271 (package
4272 (name "rtss")
4273 (version "0.6.2")
4274 (source
4275 (origin
4276 (method url-fetch)
4277 (uri (crate-uri "rtss" version))
4278 (file-name (string-append name "-" version ".tar.gz"))
4279 (sha256
4280 (base32 "1r1b6fynkjnpj5p3k209sa13mjvh4k0ghzwnribm48dh9v7lfnnv"))))
4281 (build-system cargo-build-system)
4282 (arguments
4283 `(#:install-source? #f))
4284 (inputs (cargo-inputs 'rtss))
4285 (home-page "https://github.com/Freaky/rtss")
4286 (synopsis "Annotate stdout/stderr with elapsed times")
4287 (description "@code{rtss} annotates its output with relative durations between
4288consecutive lines and since program start.")
4289 (license license:expat)))
4290
4291(define-public sd
4292 (package
4293 (name "sd")
4294 (version "1.0.0")
4295 (source
4296 (origin
4297 (method url-fetch)
4298 (uri (crate-uri "sd" version))
4299 (file-name (string-append name "-" version ".tar.gz"))
4300 (sha256
4301 (base32 "1a16p1s0j28n3vj006qm7b03k5s9mkr11cbbksvfb88wi10kqqbh"))))
4302 (build-system cargo-build-system)
4303 (arguments
4304 (list
4305 #:install-source? #f
4306 #:imported-modules (append %copy-build-system-modules
4307 %cargo-build-system-modules)
4308 #:modules '((guix build cargo-build-system)
4309 ((guix build copy-build-system) #:prefix copy:)
4310 (guix build utils))
4311 #:phases
4312 #~(modify-phases %standard-phases
4313 (add-after 'install 'install-extras
4314 (lambda args
4315 (apply (assoc-ref copy:%standard-phases 'install)
4316 #:install-plan
4317 '(("gen/sd.1" "share/man/man1/")
4318 ("gen/completions/sd.bash" "share/bash-completion/completions/sd")
4319 ("gen/completions/sd.elv" "share/elvish/lib/")
4320 ("gen/completions/sd.fish" "share/fish/vendor_completions.d/")
4321 ("gen/completions/_sd" "share/zsh/site-functions/"))
4322 args))))))
4323 (inputs (cargo-inputs 'sd))
4324 (home-page "https://github.com/chmln/sd")
4325 (synopsis "Intuitive find & replace CLI")
4326 (description "@code{sd} is an intuitive find & replace CLI with
4327JavaScript/Python-style regular expressions, a string-literal mode, and smart,
4328common-sense defaults.")
4329 ;; CVE rejected by the project.
4330 (properties `((lint-hidden-cve . ("CVE-2025-65807"))))
4331 (license license:expat)))
4332
4333(define-public skim
4334 (package
4335 (name "skim")
4336 (version "0.16.1")
4337 (source
4338 (origin
4339 ;; crates.io doesn't have everything needed.
4340 (method git-fetch)
4341 (uri (git-reference
4342 (url "https://github.com/lotabout/skim")
4343 (commit (string-append "v" version))))
4344 (file-name (git-file-name name version))
4345 (sha256
4346 (base32 "00k487pqhifcf9jvx7acwyhag34g5zrn49hry7xiwdflpqq4x1cl"))))
4347 (build-system cargo-build-system)
4348 (arguments
4349 `(#:install-source? #f
4350 #:phases (modify-phases %standard-phases
4351 (replace 'install
4352 (lambda* (#:key outputs #:allow-other-keys)
4353 (let* ((out (assoc-ref outputs "out"))
4354 (bin (string-append out "/bin"))
4355 (sk (car (find-files "target" "^sk$"))))
4356 (install-file sk bin))))
4357 (add-after 'build 'build-extras
4358 (lambda _
4359 ;; Delete the manpages and completions before rebuilding.
4360 (for-each delete-file '("man/man1/sk.1"
4361 "shell/completion.bash"
4362 "shell/completion.zsh"))
4363 (invoke "cargo" "run" "--package" "xtask" "mangen")
4364 (invoke "cargo" "run" "--package" "xtask" "compgen")))
4365 (add-after 'install 'install-extras
4366 (lambda* (#:key outputs #:allow-other-keys)
4367 (let* ((out (assoc-ref outputs "out"))
4368 (bin (string-append out "/bin"))
4369 (share (string-append out "/share"))
4370 (man (string-append out "/share/man"))
4371 (vimfiles (string-append share
4372 "/vim/vimfiles/pack/guix/start/skim/plugin"))
4373 (bash-completion (string-append out
4374 "/etc/bash_completion.d"))
4375 (zsh-site (string-append share
4376 "/zsh/site-functions"))
4377 (fish-vendor (string-append share
4378 "/fish/vendor-completions.d")))
4379 ;; Binaries
4380 (for-each (lambda (binary)
4381 (install-file binary bin))
4382 (find-files "bin"))
4383 (mkdir-p share)
4384 ;; Manpages
4385 (copy-recursively "man" man)
4386 ;; Vim plugins
4387 (mkdir-p vimfiles)
4388 (copy-recursively "plugin" vimfiles)
4389 ;; Completions
4390 (mkdir-p bash-completion)
4391 (copy-file "shell/completion.bash"
4392 (string-append bash-completion "/skim"))
4393 (copy-file "shell/key-bindings.bash"
4394 (string-append bash-completion
4395 "/skim-bindings"))
4396 (mkdir-p zsh-site)
4397 (copy-file "shell/completion.zsh"
4398 (string-append zsh-site "/_skim"))
4399 (copy-file "shell/key-bindings.zsh"
4400 (string-append zsh-site "/_skim-bindings"))
4401 (mkdir-p fish-vendor)
4402 (copy-file "shell/key-bindings.fish"
4403 (string-append fish-vendor
4404 "/skim-bindings.fish"))))))))
4405 (inputs (cargo-inputs 'skim))
4406 (home-page "https://github.com/lotabout/skim")
4407 (synopsis "Fuzzy Finder in Rust")
4408 (description "This package provides a fuzzy finder in Rust.")
4409 (license license:expat)))
4410
4411(define-public spotifyd
4412 (package
4413 (name "spotifyd")
4414 (version "0.4.2")
4415 (source
4416 (origin
4417 (method url-fetch)
4418 (uri (crate-uri "spotifyd" version))
4419 (file-name (string-append name "-" version ".tar.gz"))
4420 (sha256
4421 (base32 "1456kqv3yy4wqqfck3qfd46rjqscrz6z7cs3iyrbh6561338mv7w"))))
4422 (build-system cargo-build-system)
4423 (arguments
4424 `(#:install-source? #f
4425 #:cargo-install-paths (list ".")
4426 #:features (list "alsa_backend"
4427 "dbus_mpris"
4428 "pulseaudio_backend"
4429 "rodio_backend")))
4430 (native-inputs (list pkg-config))
4431 (inputs (cons* alsa-lib dbus openssl pulseaudio (cargo-inputs 'spotifyd)))
4432 (home-page "https://github.com/Spotifyd/spotifyd")
4433 (synopsis "Spotify streaming daemon with Spotify Connect support")
4434 (description
4435 "This package provides a light-weight daemon that connects to the Spotify
4436music service. A Spotifyd instance can be controlled by clients that use the
4437Spotify Connect protocol, which includes the official Spotify mobile apps.")
4438 (license license:gpl3)))
4439
4440(define-public svd2rust
4441 (package
4442 (name "svd2rust")
4443 (version "0.36.1")
4444 (source
4445 (origin
4446 (method url-fetch)
4447 (uri (crate-uri "svd2rust" version))
4448 (file-name (string-append name "-" version ".tar.gz"))
4449 (sha256
4450 (base32 "0pfbvgxp49j04f1zxgq5n5csv7b1ysnnmafnyal08yisrvg476nw"))))
4451 (build-system cargo-build-system)
4452 (arguments
4453 `(#:install-source? #f))
4454 (inputs (cargo-inputs 'svd2rust))
4455 (home-page "https://github.com/rust-embedded/svd2rust/")
4456 (synopsis "Generate Rust register maps (`struct`s) from SVD files")
4457 (description
4458 "This program can be used to generate Rust register maps (`struct`s) from SVD
4459files.")
4460 (license (list license:expat license:asl2.0))))
4461
4462(define-public swayhide
4463 (package
4464 (name "swayhide")
4465 (version "0.2.1")
4466 (source
4467 (origin
4468 (method url-fetch)
4469 (uri (crate-uri "swayhide" version))
4470 (file-name (string-append name "-" version ".tar.gz"))
4471 (sha256
4472 (base32 "0synzfd35494vlp2wnqmqbzgc0vg2ivn90hnxvk6qak0w65xhxcv"))))
4473 (build-system cargo-build-system)
4474 (arguments
4475 `(#:install-source? #f
4476 #:phases
4477 (modify-phases %standard-phases
4478 (add-after 'install 'install-completions
4479 (lambda* (#:key outputs #:allow-other-keys)
4480 (let* ((out (assoc-ref outputs "out"))
4481 (bash (string-append out "/etc/bash_completion.d/"))
4482 (fish (string-append out "/share/fish/vendor_completions.d/"))
4483 (zsh (string-append out "/share/zsh/site-functions/")))
4484 (mkdir-p bash)
4485 (mkdir-p zsh)
4486 (copy-file "completions/swayhide.bash"
4487 (string-append bash "swayhide"))
4488 (copy-file "completions/swayhide.zsh"
4489 (string-append zsh "_swayhide"))
4490 (install-file "completions/swayhide.fish" fish)))))))
4491 (inputs (cargo-inputs 'swayhide))
4492 (home-page "https://github.com/NomisIV/swayhide/")
4493 (synopsis "Swallow windows on swaywm")
4494 (description "swayhide hides the currently active terminal (by moving it
4495to the scratchpad), then it executes the supplied command. When the child
4496process has finished, the terminal is moved back. This is useful if your
4497workflow includes opening graphical programs from the terminal, as the locked
4498terminal won't have to take up any space.")
4499 (license license:gpl3+)))
4500
4501(define-public swayr
4502 (package
4503 (name "swayr")
4504 (version "0.28.1")
4505 (source
4506 (origin
4507 (method url-fetch)
4508 (uri (crate-uri "swayr" version))
4509 (file-name (string-append name "-" version ".tar.gz"))
4510 (sha256
4511 (base32 "1q3fim66q74pxsv9vhhcxgdnsjmkz08adsf4ng61sxxvf3hry3lf"))))
4512 (build-system cargo-build-system)
4513 (arguments
4514 `(#:cargo-test-flags
4515 '("--"
4516 "--skip=config::test_load_swayr_config")
4517 #:install-source? #f))
4518 (inputs (cargo-inputs 'swayr))
4519 (home-page "https://sr.ht/~tsdh/swayr/")
4520 (synopsis "Window-switcher for the sway window manager")
4521 (description
4522 "This package provides a last-recently-used window-switcher for the sway
4523window manager. Swayr consists of a daemon, and a client. The swayrd daemon
4524records window/workspace creations, deletions, and focus changes using sway's
4525JSON IPC interface. The swayr client offers subcommands, and sends them to the
4526daemon which executes them.")
4527 (license license:gpl3+)))
4528
4529(define-public swayrbar
4530 (package
4531 (name "swayrbar")
4532 (version "0.4.2")
4533 (source
4534 (origin
4535 (method url-fetch)
4536 (uri (crate-uri "swayrbar" version))
4537 (file-name (string-append name "-" version ".tar.gz"))
4538 (sha256
4539 (base32 "05jpa87i6q1cpikyqqliy3q2ksslj79kgin8jq9ls6073yk5q6z7"))))
4540 (build-system cargo-build-system)
4541 (arguments
4542 `(#:cargo-test-flags '("--release" "--"
4543 "--skip=config::test_load_swayrbar_config")
4544 #:install-source? #f))
4545 (inputs (cargo-inputs 'swayrbar))
4546 (home-page "https://sr.ht/~tsdh/swayr/#swayrbar")
4547 (synopsis "Swaybar-protocol implementation for sway/swaybar")
4548 (description
4549 "This package provides a swaybar-protocol implementation for sway/swaybar.")
4550 (license license:gpl3+)))
4551
4552(define-public swaysome
4553 (package
4554 (name "swaysome")
4555 (version "2.1.2")
4556 (source
4557 (origin
4558 (method url-fetch)
4559 (uri (crate-uri "swaysome" version))
4560 (file-name (string-append name "-" version ".tar.gz"))
4561 (sha256
4562 (base32 "12rqvjj9d12nm9zppgp4hvfw5l308gn9ljbbgbhi0cglpg11rnjk"))))
4563 (build-system cargo-build-system)
4564 (arguments
4565 `(#:install-source? #f
4566 #:phases
4567 (modify-phases %standard-phases
4568 (add-after 'install 'install-more
4569 (lambda* (#:key outputs #:allow-other-keys)
4570 (let* ((out (assoc-ref outputs "out"))
4571 (man1 (string-append out "/share/man/man1")))
4572 (install-file "swaysome.1" man1)))))))
4573 (inputs (cargo-inputs 'swaysome))
4574 (home-page "https://gitlab.com/hyask/swaysome")
4575 (synopsis "Manage your multiple outputs with the sway window manager")
4576 (description
4577 "This package provides a way to manage your multiple outputs with the sway
4578window manager.")
4579 (license license:expat)))
4580
4581(define-public tealdeer
4582 (package
4583 (name "tealdeer")
4584 (version "1.8.1")
4585 (source
4586 (origin
4587 ;; Completions aren't in the release tarball.
4588 (method git-fetch)
4589 (uri (git-reference
4590 (url "https://github.com/dbrgn/tealdeer")
4591 (commit (string-append "v" version))))
4592 (file-name (git-file-name name version))
4593 (sha256
4594 (base32
4595 "1d3877y9g1v6gi8a326d6wfz7z52qkrl70zi5ry7ybh5q6jha6a3"))))
4596 (build-system cargo-build-system)
4597 (arguments
4598 (list
4599 #:phases
4600 #~(modify-phases %standard-phases
4601 (add-after 'install 'install-completions
4602 (lambda args
4603 (apply (assoc-ref copy:%standard-phases 'install)
4604 #:install-plan
4605 '(("completion/bash_tealdeer"
4606 "share/bash-completion/completions/tealdeer")
4607 ("completion/fish_tealdeer"
4608 "share/fish/vendor_completions.d/tealdeer.fish")
4609 ("completion/zsh_tealdeer"
4610 "share/zsh/site-functions/_tealdeer"))
4611 args))))
4612 #:install-source? #f
4613 #:imported-modules (append %copy-build-system-modules
4614 %cargo-build-system-modules)
4615 #:modules '((guix build cargo-build-system)
4616 ((guix build copy-build-system) #:prefix copy:)
4617 (guix build utils))
4618 #:cargo-test-flags
4619 '(list "--"
4620 ;; These tests go to the network
4621 "--skip=test_quiet_old_cache"
4622 "--skip=test_quiet_cache"
4623 "--skip=test_quiet_failures"
4624 "--skip=test_pager_flag_enable"
4625 "--skip=test_markdown_rendering"
4626 "--skip=test_spaces_find_command"
4627 "--skip=test_autoupdate_cache"
4628 "--skip=test_update_language_arg"
4629 "--skip=test_update_cache"
4630 "--skip=test_create_cache_directory_path")))
4631 (native-inputs
4632 (list pkg-config))
4633 (inputs
4634 (cargo-inputs 'tealdeer))
4635 (home-page "https://github.com/dbrgn/tealdeer/")
4636 (synopsis "Fetch and show tldr help pages for many CLI commands")
4637 (description
4638 "This package fetches and shows tldr help pages for many CLI commands.
4639Full featured offline client with caching support.")
4640 (license (list license:expat license:asl2.0))))
4641
4642;;; TODO: Remove when 2027/03 comes.
4643(define-deprecated/public-alias uv
4644 (@ (gnu packages build-tools) uv))
4645
4646(define-public git-absorb
4647 (package
4648 (name "git-absorb")
4649 (version "0.9.0")
4650 (source
4651 (origin
4652 ;; crates.io does not include the manual page.
4653 (method git-fetch)
4654 (uri (git-reference
4655 (url "https://github.com/tummychow/git-absorb")
4656 (commit version)))
4657 (file-name (git-file-name name version))
4658 (sha256
4659 (base32 "1xr1bjia3sx2i7hw99r2s950xi4fa996bcg3n7j9arcjmrb7w14c"))))
4660 (build-system cargo-build-system)
4661 (arguments
4662 (list
4663 #:install-source? #f
4664 #:modules
4665 '((guix build cargo-build-system)
4666 (guix build utils)
4667 (ice-9 match))
4668 #:phases
4669 #~(modify-phases %standard-phases
4670 (add-after 'install 'install-manual-page
4671 (lambda* (#:key outputs #:allow-other-keys)
4672 (let* ((out (assoc-ref outputs "out"))
4673 (man (string-append out "/share/man/man1")))
4674 (with-directory-excursion "Documentation"
4675 (invoke "a2x"
4676 "--no-xmllint"
4677 "--doctype=manpage"
4678 "--format=manpage"
4679 "git-absorb.adoc"))
4680 (install-file "Documentation/git-absorb.1" man))))
4681 (add-after 'install 'install-completions
4682 (lambda* (#:key native-inputs #:allow-other-keys)
4683 (for-each
4684 (match-lambda
4685 ((shell . path)
4686 (mkdir-p (in-vicinity #$output (dirname path)))
4687 (let ((binary
4688 (if #$(%current-target-system)
4689 (search-input-file native-inputs "bin/git-absorb")
4690 (in-vicinity #$output "bin/git-absorb"))))
4691 (with-output-to-file (in-vicinity #$output path)
4692 (lambda _
4693 (invoke binary "--gen-completions" shell))))))
4694 '(("bash" . "share/bash-completion/completions/git-absorb")
4695 ("elvish" . "share/elvish/lib/git-absorb")
4696 ("fish" . "share/fish/vendor_completions.d/git-absorb.fish")
4697 ("nushell" . "share/nushell/vendor/autoload/git-absorb")
4698 ("zsh" . "share/zsh/site-functions/_git-absorb"))))))))
4699 (native-inputs
4700 (append
4701 (if (%current-target-system)
4702 (list this-package)
4703 '())
4704 (list asciidoc git-minimal/pinned pkg-config)))
4705 (inputs
4706 (cons* libgit2-1.9 zlib (cargo-inputs 'git-absorb)))
4707 (home-page "https://github.com/tummychow/git-absorb")
4708 (synopsis "Git tool for making automatic fixup commits")
4709 (description
4710 "@code{git absorb} automatically absorbs staged changes into their
4711current branch. @code{git absorb} will automatically identify which commits
4712are safe to modify, and which staged changes belong to each of those commits.
4713It will then write @code{fixup!} commits for each of those changes.")
4714 (license license:bsd-3)))
4715
4716(define-public git-delta
4717 (package
4718 (name "git-delta")
4719 (version "0.19.2")
4720 (source
4721 (origin
4722 (method url-fetch)
4723 (uri (crate-uri "git-delta" version))
4724 (file-name (string-append name "-" version ".tar.gz"))
4725 (sha256
4726 (base32 "0g5d8pqw54yd6jivnjyg0q08f5y0zgbw2vwvvwic6c05mrbl9xkz"))))
4727 (build-system cargo-build-system)
4728 (arguments
4729 (list
4730 #:install-source? #f
4731 #:imported-modules (append %copy-build-system-modules
4732 %cargo-build-system-modules)
4733 #:modules '((guix build cargo-build-system)
4734 ((guix build copy-build-system) #:prefix copy:)
4735 (guix build utils))
4736 #:phases
4737 #~(modify-phases %standard-phases
4738 (add-after 'install 'install-extras
4739 (lambda args
4740 (apply (assoc-ref copy:%standard-phases 'install)
4741 #:install-plan
4742 '(("etc/completion/completion.bash"
4743 "share/bash-completion/completions/delta")
4744 ("etc/completion/completion.fish"
4745 "share/fish/vendor_completions.d/delta.fish")
4746 ("etc/completion/completion.zsh"
4747 "share/zsh/site-functions/_delta"))
4748 args))))))
4749 (native-inputs (list git-minimal/pinned pkg-config))
4750 (inputs
4751 (cons* libgit2-1.9
4752 oniguruma
4753 openssl
4754 zlib
4755 (cargo-inputs 'git-delta)))
4756 (home-page "https://github.com/dandavison/delta")
4757 (synopsis "Syntax-highlighting pager for git")
4758 (description
4759 "This package provides a syntax-highlighting pager for @command{git}. It
4760uses @command{bat} for syntax highlighting and provides many features such as
4761advanced keybindings, word-level diff highlighting, syntax highlighting for
4762@command{grep} and a stylized box presentation.")
4763 (license license:expat)))
4764
4765(define-public wallust
4766 (package
4767 (name "wallust")
4768 (version "3.4.0")
4769 (source
4770 (origin
4771 (method url-fetch)
4772 (uri (crate-uri "wallust" version))
4773 (file-name (string-append name "-" version ".tar.gz"))
4774 (sha256
4775 (base32 "1yh55l0pqmg0wciji6nlgvmpcfpi8kd7r3ay02gpi2vbhyhch3mx"))))
4776 (build-system cargo-build-system)
4777 (arguments
4778 (list
4779 #:features '(list "buildgen")
4780 #:imported-modules (append %copy-build-system-modules
4781 %cargo-build-system-modules)
4782 #:modules '((guix build cargo-build-system)
4783 ((guix build copy-build-system) #:prefix copy:)
4784 (guix build utils))
4785 #:install-source? #f
4786 #:phases
4787 #~(modify-phases %standard-phases
4788 (add-after 'install 'install-extras
4789 (lambda args
4790 (apply (assoc-ref copy:%standard-phases 'install)
4791 #:install-plan
4792 '(("completions/wallust.bash"
4793 "share/bash-completion/completions/wallust")
4794 ("completions/wallust.elv"
4795 "share/elvish/lib/wallust")
4796 ("completions/wallust.fish"
4797 "share/fish/vendor_completions.d/")
4798 ("completions/_wallust"
4799 "share/zsh/site-functions/")
4800 ("man/" "share/man/man1/" #:include-regexp ("\\.1$"))
4801 ("man/" "share/man/man5/" #:include-regexp ("\\.5$")))
4802 args))))))
4803 (native-inputs (list pkg-config))
4804 (inputs (cons* libgit2-1.9 zlib (cargo-inputs 'wallust)))
4805 (home-page "https://explosion-mental.codeberg.page/wallust")
4806 (synopsis "Generate themes from images with advanced templating")
4807 (description
4808 "Wallust is a rust-based successor to \"pywal\" which generates color
4809themes from images with advanced templating and generation options.
4810Templates are made using either a subset of Jinja2 or pywal syntax.
4811Color generation may be constrained to obey ANSI color standards, meet
4812minimum contrast levels, and more.")
4813 (license license:expat)))
4814
4815(define-public rabbitmqadmin
4816 (package
4817 (name "rabbitmqadmin")
4818 (version "2.25.0")
4819 (source
4820 (origin
4821 (method git-fetch)
4822 (uri (git-reference
4823 (url "https://github.com/rabbitmq/rabbitmqadmin-ng")
4824 (commit (string-append "v" version))))
4825 (file-name (git-file-name name version))
4826 (sha256
4827 (base32 "1js79z4darfc0a16qq3m3c82yfpv3z7r2vpwkwk907vhvg5r1xjw"))))
4828 (build-system cargo-build-system)
4829 (arguments
4830 (list
4831 #:tests? #f ;Tests require local instance of RabbitMQ broker.
4832 #:install-source? #f
4833 #:modules
4834 '((guix build cargo-build-system)
4835 (guix build utils)
4836 (ice-9 match))
4837 #:phases
4838 #~(modify-phases %standard-phases
4839 (add-after 'install 'install-completions
4840 (lambda* (#:key native-inputs #:allow-other-keys)
4841 (for-each
4842 (match-lambda
4843 ((shell . path)
4844 (mkdir-p (in-vicinity #$output (dirname path)))
4845 (let ((binary
4846 (if #$(%current-target-system)
4847 (search-input-file native-inputs "bin/rabbitmqadmin")
4848 (in-vicinity #$output "bin/rabbitmqadmin"))))
4849 (with-output-to-file (in-vicinity #$output path)
4850 (lambda _
4851 (invoke binary "shell" "completions" "--shell" shell))))))
4852 '(("bash" . "share/bash-completion/completions/rabbitmqadmin")
4853 ("elvish" . "share/elvish/lib/rabbitmqadmin")
4854 ("fish" . "share/fish/vendor_completions.d/rabbitmqadmin.fish")
4855 ("nushell" . "share/nushell/vendor/autoload/rabbitmqadmin")
4856 ("zsh" . "share/zsh/site-functions/_rabbitmqadmin"))))))))
4857 (inputs (cons* mimalloc (cargo-inputs 'rabbitmqadmin)))
4858 (native-inputs
4859 (if (%current-target-system)
4860 (list this-package)
4861 '()))
4862 (home-page "https://www.rabbitmq.com/docs/management-cli")
4863 (synopsis "Manage RabbitMQ broker via the management plugin")
4864 (description
4865 "@command{rabbitmqadmin} is a tool to manage RabbitMQ broker via
4866management plugin.
4867
4868It supports many of the operations available in the management UI:
4869
4870@itemize
4871@item Listing objects like virtual hosts, users, queues, streams, permissions,
4872policies, and so on.
4873@item Creating objects.
4874@item Deleting objects.
4875@item Access to cluster and node metrics.
4876@item Run health checks.
4877@item Listing feature flag state.
4878@item Listing deprecated features in use across the cluster.
4879@item Definition export, transformations, and import.
4880@item Operations on shovels.
4881@item Operations on federation upstreams and links.
4882@item Closing connections.
4883@item Rebalancing of queue leaders across cluster nodes.
4884@end itemize")
4885 (license (list license:asl2.0 license:expat))))
4886
4887(define-public radicle
4888 (package
4889 (name "radicle")
4890 (version "1.9.1")
4891 (source
4892 (origin
4893 (method url-fetch/tarbomb)
4894 (uri (string-append
4895 "https://files.radicle.dev/releases/"
4896 version "/heartwood-" version ".tar.gz"))
4897 (sha256
4898 (base32 "0z4ygjn5gmhh4v3iw5g5hxy536288wz464sb1vh90145wnjx4i74"))
4899 (modules '((guix build utils)))
4900 (snippet
4901 '(begin
4902 (for-each delete-file
4903 (find-files "build" "^macos-sdk"))
4904 (substitute* (find-files "." "^Cargo\\.toml$")
4905 (("\"vendored-libgit2\"")
4906 ""))))))
4907 (build-system cargo-build-system)
4908 (arguments
4909 (list
4910 #:install-source? #f
4911 ;; Parallel testing will open too many files
4912 #:parallel-tests? #f
4913 #:cargo-install-paths ''("crates/radicle-cli"
4914 "crates/radicle-node"
4915 "crates/radicle-remote-helper")
4916 #:cargo-test-flags
4917 '(list "--"
4918 ;; Different order of fields in expected vs actual JSON
4919 "--skip=commands::utility::rad_config")
4920 #:modules
4921 '((guix build cargo-build-system)
4922 (guix build utils)
4923 (ice-9 match))
4924 #:phases
4925 #~(modify-phases %standard-phases
4926 (add-after 'unpack 'setenv
4927 (lambda _
4928 (setenv "RADICLE_VERSION" #$(package-version this-package))
4929 (setenv "LIBGIT2_NO_VENDOR" "1")
4930 (setenv "HOME" (getcwd))
4931 (setenv "TMPDIR" "/tmp")))
4932 (add-after 'install 'install-completions
4933 (lambda* (#:key native-inputs #:allow-other-keys)
4934 (for-each
4935 (match-lambda
4936 ((shell . path)
4937 (mkdir-p (in-vicinity #$output (dirname path)))
4938 (let ((binary
4939 #$@(if (%current-target-system)
4940 #~((search-input-file native-inputs "bin/rad"))
4941 #~((in-vicinity #$output "bin/rad")))))
4942 (with-output-to-file (in-vicinity #$output path)
4943 (lambda _
4944 (invoke binary "completion" shell))))))
4945 '(("bash" . "share/bash-completion/completions/rad")
4946 ("elvish" . "share/elvish/lib/rad")
4947 ("fish" . "share/fish/vendor_completions.d/rad.fish")
4948 ("zsh" . "share/zsh/site-functions/_rad")))))
4949 #$@(if (this-package-native-input "ruby-asciidoctor")
4950 #~((add-before 'build 'build-doc
4951 (lambda _
4952 (apply invoke "scripts/build-man-pages.sh" "."
4953 (find-files "." "\\.adoc$"))
4954 (let ((man1 (string-append #$output "/share/man/man1")))
4955 (mkdir-p man1)
4956 (for-each (lambda (file)
4957 (install-file file man1))
4958 (find-files "." "\\.1$"))))))
4959 #~()))))
4960 (native-inputs
4961 (append
4962 (if (supported-package? ruby-asciidoctor)
4963 (list ruby-asciidoctor)
4964 '())
4965 (if (%current-target-system)
4966 (list this-package)
4967 '())
4968 (list pkg-config
4969 ;; for test
4970 git-minimal/pinned)))
4971 (inputs (cons* libgit2-1.9 sqlite-next (cargo-inputs 'radicle)))
4972 (home-page "https://radicle.dev/")
4973 (synopsis "Peer-to-peer code collaboration stack")
4974 (description
4975 "Radicle is a peer-to-peer code collaboration stack built on Git. Unlike
4976centralized code hosting platforms, there is no single entity controlling the
4977network. Repositories are replicated across peers in a decentralized manner,
4978and users are in full control of their data and workflow.")
4979 (license (list license:asl2.0 license:expat))))
4980
4981(define-public rust-xremap
4982 (package
4983 (name "rust-xremap")
4984 (version "0.10.17")
4985 (source
4986 (origin
4987 (method url-fetch)
4988 (uri (crate-uri "xremap" version))
4989 (file-name (string-append name "-" version ".tar.gz"))
4990 (sha256
4991 (base32
4992 "07hva0dy1d88bcrddm5jg54jlspf1cgbpxb1v9za6crk7bks3c9p"))))
4993 (build-system cargo-build-system)
4994 (arguments
4995 (list
4996 #:features '(list)
4997 #:install-source? #f
4998 #:modules
4999 '((guix build cargo-build-system)
5000 (guix build utils)
5001 (ice-9 match))
5002 #:phases
5003 #~(modify-phases %standard-phases
5004 (add-after 'install 'install-completions
5005 (lambda* (#:key native-inputs #:allow-other-keys)
5006 (for-each
5007 (match-lambda
5008 ((shell . path)
5009 (mkdir-p (in-vicinity #$output (dirname path)))
5010 (let ((binary
5011 (if #$(%current-target-system)
5012 (search-input-file native-inputs "bin/xremap")
5013 (in-vicinity #$output "bin/xremap"))))
5014 (with-output-to-file (in-vicinity #$output path)
5015 (lambda _
5016 (invoke binary "--completions" shell))))))
5017 '(("bash" . "share/bash-completion/completions/xremap")
5018 ("elvish" . "share/elvish/lib/xremap")
5019 ("fish" . "share/fish/vendor_completions.d/xremap.fish")
5020 ("zsh" . "share/zsh/site-functions/_xremap"))))))))
5021 (inputs (cargo-inputs 'rust-xremap))
5022 (native-inputs
5023 (if (%current-target-system)
5024 (list this-package)
5025 '()))
5026 (home-page "https://github.com/xremap/xremap")
5027 (synopsis "Dynamic key remapper for X and Wayland")
5028 (description "This package provides dynamic key remapper for X and Wayland.")
5029 (license license:expat)))
5030
5031(define-public xremap-gnome
5032 (package
5033 (inherit rust-xremap)
5034 (name "xremap-gnome")
5035 (arguments
5036 (substitute-keyword-arguments arguments
5037 ((#:features _) '(list "gnome"))))))
5038
5039(define-public xremap-hyprland
5040 (package
5041 (inherit rust-xremap)
5042 (name "xremap-hyprland")
5043 (arguments
5044 (substitute-keyword-arguments arguments
5045 ((#:features _) '(list "hypr"))))))
5046
5047(define-public xremap-kde
5048 (package
5049 (inherit rust-xremap)
5050 (name "xremap-kde")
5051 (arguments
5052 (substitute-keyword-arguments arguments
5053 ((#:features _) '(list "kde"))))))
5054
5055(define-public xremap-niri
5056 (package
5057 (inherit rust-xremap)
5058 (name "xremap-niri")
5059 (arguments
5060 (substitute-keyword-arguments arguments
5061 ((#:features _) '(list "niri"))))))
5062
5063(define-public xremap-wlroots
5064 (package
5065 (inherit rust-xremap)
5066 (name "xremap-wlroots")
5067 (arguments
5068 (substitute-keyword-arguments arguments
5069 ((#:features _) '(list "wlroots"))))))
5070
5071(define-public xremap-x11
5072 (package
5073 (inherit rust-xremap)
5074 (name "xremap-x11")
5075 (arguments
5076 (substitute-keyword-arguments arguments
5077 ((#:features _) '(list "x11"))))))
5078
5079(define-public xsv
5080 (package
5081 (name "xsv")
5082 (version "0.13.0")
5083 (source (origin
5084 (method url-fetch)
5085 (uri (crate-uri "xsv" version))
5086 (file-name (string-append name "-" version ".tar.gz"))
5087 (sha256
5088 (base32
5089 "0pvzr7x5phlya6m5yikvy13vgbazshw0plysckz9zmf2ly5x4jl8"))))
5090 (build-system cargo-build-system)
5091 (arguments
5092 `(#:install-source? #f))
5093 (inputs (cargo-inputs 'xsv))
5094 (home-page "https://github.com/BurntSushi/xsv")
5095 (synopsis "High performance CSV command line toolkit")
5096 (description
5097 "This package provides a high performance CSV command line toolkit.")
5098 (license (list license:unlicense license:expat))))
5099
5100(define-public zola
5101 (package
5102 (name "zola")
5103 (version "0.22.1")
5104 (source
5105 (origin
5106 (method git-fetch)
5107 (file-name (git-file-name name version))
5108 (uri (git-reference
5109 (url "https://github.com/getzola/zola")
5110 (commit (string-append "v" version))))
5111 (sha256
5112 (base32 "145gag7y26fgwfznm3s48ml1p554zx52vk26zw7qgv24s9ffhacv"))))
5113 (build-system cargo-build-system)
5114 (arguments
5115 (list
5116 #:install-source? #f
5117 #:modules
5118 '((guix build cargo-build-system)
5119 (guix build utils)
5120 (ice-9 match))
5121 #:phases
5122 #~(modify-phases %standard-phases
5123 (replace 'install
5124 (lambda _
5125 (let ((bin (string-append #$output "/bin")))
5126 (install-file "target/release/zola" bin))))
5127 (add-after 'install 'install-completions
5128 (lambda* (#:key native-inputs #:allow-other-keys)
5129 (for-each
5130 (match-lambda
5131 ((shell . path)
5132 (mkdir-p (in-vicinity #$output (dirname path)))
5133 (let ((binary
5134 (if #$(%current-target-system)
5135 (search-input-file native-inputs "bin/zola")
5136 (in-vicinity #$output "bin/zola"))))
5137 (with-output-to-file (in-vicinity #$output path)
5138 (lambda _
5139 (invoke binary "completion" shell))))))
5140 '(("bash" . "share/bash-completion/completions/zola")
5141 ("elvish" . "share/elvish/lib/zola")
5142 ("fish" . "share/fish/vendor_completions.d/zola.fish")
5143 ("zsh" . "share/zsh/site-functions/_zola"))))))))
5144 (native-inputs
5145 (append
5146 (if (%current-target-system)
5147 (list this-package)
5148 '())
5149 (list pkg-config)))
5150 (inputs (cons* libwebp oniguruma
5151 (cargo-inputs 'zola)))
5152 (synopsis "Static site generator")
5153 (description
5154 "Zola generates static websites from Markdown content and Tera templates.
5155It supports taxonomies, shortcodes, and live reloading.")
5156 (home-page "https://www.getzola.org/")
5157 (license license:expat)))
5158
5159(define-public zoxide
5160 (package
5161 (name "zoxide")
5162 (version "0.9.9")
5163 (source
5164 (origin
5165 (method url-fetch)
5166 (uri (crate-uri "zoxide" version))
5167 (file-name (string-append name "-" version ".tar.gz"))
5168 (sha256
5169 (base32 "11yjqhjqmsmww9cdxwibwm0clzdz6lzrmvnk1w0lyv4vn3jpw62m"))))
5170 (build-system cargo-build-system)
5171 (arguments
5172 (list #:install-source? #f
5173 #:imported-modules (append %copy-build-system-modules
5174 %cargo-build-system-modules)
5175 #:modules '((guix build cargo-build-system)
5176 ((guix build copy-build-system) #:prefix copy:)
5177 (guix build utils))
5178 #:phases
5179 #~(modify-phases %standard-phases
5180 (add-after 'unpack 'patch-references
5181 (lambda _
5182 (substitute* (find-files "templates")
5183 (("zoxide (add|query)" all)
5184 (string-append #$output "/bin/" all))
5185 (("(zoxide = \")(zoxide)" _ prefix suffix)
5186 (string-append prefix #$output "/bin/" suffix)))))
5187 (add-after 'install 'install-more
5188 (lambda args
5189 (apply (assoc-ref copy:%standard-phases 'install)
5190 #:install-plan
5191 '(("contrib/completions/zoxide.bash"
5192 "share/bash-completion/completions/zoxide")
5193 ("contrib/completions/zoxide.elv"
5194 "share/elvish/lib/zoxide")
5195 ("contrib/completions/zoxide.fish"
5196 "share/fish/vendor_completions.d/")
5197 ("contrib/completions/zoxide.nu"
5198 "share/nushell/vendor/autoload/zoxide")
5199 ("contrib/completions/_zoxide"
5200 "share/zsh/site-functions/")
5201 ("man/man1" "share/man/"))
5202 args))))))
5203 (inputs (cargo-inputs 'zoxide))
5204 (home-page "https://github.com/ajeetdsouza/zoxide/")
5205 (synopsis "Fast way to navigate your file system")
5206 (description
5207 "Zoxide is a fast replacement for your @command{cd} command. It keeps
5208track of the directories you use most frequently, and uses a ranking algorithm
5209to navigate to the best match.")
5210 (license license:expat)))
5211
5212(define-public htmlq
5213 (package
5214 (name "htmlq")
5215 (version "0.4.0")
5216 (source
5217 (origin
5218 (method url-fetch)
5219 (uri (crate-uri "htmlq" version))
5220 (file-name (string-append name "-" version ".tar.gz"))
5221 (sha256
5222 (base32 "0912cdkz5xji1hzfj1cf42zh1kd860b52xmwwhb7q2jhp6qk25jh"))))
5223 (build-system cargo-build-system)
5224 (arguments
5225 `(#:install-source? #f))
5226 (inputs (cargo-inputs 'htmlq))
5227 (home-page "https://github.com/mgdm/htmlq")
5228 (synopsis "Like jq, but for HTML")
5229 (description "Extract content from HTML files using CSS selectors.")
5230 (license license:expat)))
5231
5232(define-public podlet
5233 (package
5234 (name "podlet")
5235 (version "0.3.0")
5236 (source
5237 (origin
5238 (method url-fetch)
5239 (uri (crate-uri "podlet" version))
5240 (file-name (string-append name "-" version ".tar.gz"))
5241 (sha256
5242 (base32 "1j394gv9fpl1wii7l0v4y31mdni6r98l223wd6x2v3ia82091xg4"))))
5243 (build-system cargo-build-system)
5244 (arguments
5245 `(#:install-source? #f))
5246 (inputs (cargo-inputs 'podlet))
5247 (home-page "https://github.com/containers/podlet")
5248 (synopsis
5249 "Generate Podman Quadlet files from a Podman command, compose file,
5250or existing object")
5251 (description
5252 "This package generates Podman Quadlet files from a Podman command,
5253compose file, or existing object.")
5254 (license license:mpl2.0)))
5255
5256(define-public espflash
5257 (package
5258 (name "espflash")
5259 (version "3.2.0")
5260 (source (origin
5261 (method git-fetch)
5262 (uri (git-reference
5263 (url "https://github.com/esp-rs/espflash.git")
5264 (commit (string-append "v" version))))
5265 (file-name (git-file-name name version))
5266 (sha256
5267 (base32
5268 "0vmq3b66yinqypgzfpdivli2ipiyzingakxy84j31srzg70m7maz"))))
5269 (build-system cargo-build-system)
5270 (inputs
5271 (cons eudev (cargo-inputs 'espflash)))
5272 (native-inputs
5273 (list pkg-config))
5274 (arguments
5275 `(#:install-source? #f
5276 #:phases
5277 (modify-phases %standard-phases
5278 (add-after 'unpack 'chdir
5279 (lambda _
5280 (delete-file "Cargo.lock")
5281 (chdir "espflash"))))))
5282 (home-page "https://github.com/esp-rs/espflash")
5283 (synopsis "Command-line tool for flashing Espressif devices")
5284 (description
5285 "This package provides a command-line tool for flashing Espressif devices.")
5286 (license (list license:expat license:asl2.0))))
5287
5288(define-public espanso-x11
5289 (package
5290 (name "espanso-x11")
5291 (version "2.3.0")
5292 (source
5293 (origin
5294 (method git-fetch)
5295 (uri (git-reference
5296 (url "https://github.com/espanso/espanso")
5297 (commit (string-append "v" version))))
5298 (file-name (git-file-name name version))
5299 (sha256
5300 (base32 "0fb83qqzdji5nn75j4h9v0pb9521xgqnsi65gj1a3hbicvwmbwas"))))
5301 (build-system cargo-build-system)
5302 (arguments
5303 (list
5304 #:install-source? #f
5305 #:cargo-install-paths ''("espanso")
5306 #:features '(list "modulo" "vendored-tls")))
5307 (native-inputs (list pkg-config))
5308 (inputs (cons* dbus
5309 libx11
5310 libxkbcommon
5311 libxtst
5312 openssl
5313 wxwidgets
5314 xdo
5315 (cargo-inputs 'espanso)))
5316 (home-page "https://espanso.org")
5317 (synopsis "Cross-platform Text Expander written in Rust")
5318 (description
5319 "Espanso is a text expander. A text expander is a program
5320that detects when you type a specific keyword and replaces it with something
5321else.
5322
5323To make espanso work, you need to allow @command{espanso} to read inputs. This
5324is a privileged operation, the capability @code{cap_dac_override+p} is
5325required. This can be achieved with @code{sudo setcap \"cap_dac_override+p\"
5326$(which espanso)}. On a Guix system, you can define the following in your
5327 @code{operating-system} definition:
5328@lisp
5329(operating-system
5330 ...
5331 (privileged-programs
5332 (append (list (privileged-program
5333 (program (file-append espanso \"/bin/espanso\"))
5334 (capabilities \"cap_dac_override+p\")))
5335 %default-privileged-programs)))
5336@end lisp")
5337 (license license:gpl3+)))
5338
5339(define-public espanso-wayland
5340 (package
5341 (inherit espanso-x11)
5342 (name "espanso-wayland")
5343 (arguments
5344 (list
5345 #:install-source? #f
5346 #:cargo-install-paths ''("espanso")
5347 #:features '(list "modulo" "vendored-tls" "wayland")))
5348 (inputs (modify-inputs inputs
5349 (append wl-clipboard)))))