projects/guix·blob java-team · refs

2133 lines · 85.2 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2012, 2013 Nikita Karetnikov <[email protected]>
3;;; Copyright © 2015 Mathieu Lirzin <[email protected]>
4;;; Copyright © 2015 Mark H Weaver <[email protected]>
5;;; Copyright © 2016, 2018–2022 Tobias Geerinckx-Rice <[email protected]>
6;;; Copyright © 2016, 2019-2021, 2023, 2025 Efraim Flashner <[email protected]>
7;;; Copyright © 2016, 2023, 2024 Janneke Nieuwenhuizen <[email protected]>
8;;; Copyright © 2016 Roel Janssen <[email protected]>
9;;; Copyright © 2016, 2017 Marius Bakke <[email protected]>
10;;; Copyright © 2017 Hartmut Goebel <[email protected]>
11;;; Copyright © 2017 Stefan Reichör <[email protected]>
12;;; Copyright © 2018 Vasile Dumitrascu <[email protected]>
13;;; Copyright © 2018 Eric Bavier <[email protected]>
14;;; Copyright © 2018 Rutger Helling <[email protected]>
15;;; Copyright © 2018, 2019, 2020 Pierre Neidhardt <[email protected]>
16;;; Copyright © 2019, 2021 Leo Famulari <[email protected]>
17;;; Copyright © 2019 Pierre Langlois <[email protected]>
18;;; Copyright © 2020 Pkill -9 <[email protected]>
19;;; Copyright © 2020 Vincent Legoll <[email protected]>
20;;; Copyright © 2020 Raghav Gururajan <[email protected]>
21;;; Copyright © 2021 Michael Rohleder <[email protected]>
22;;; Copyright © 2021 Mathieu Othacehe <[email protected]>
23;;; Copyright © 2021 Brice Waegeneire <[email protected]>
24;;; Copyright © 2021 Justin Veilleux <[email protected]>
25;;; Copyright © 2021 Sarah Morgensen <[email protected]>
26;;; Copyright © 2014, 2022 Ludovic Courtès <[email protected]>
27;;; Copyright © 2022, 2025 Maxim Cournoyer <[email protected]>
28;;; Copyright © 2022 Disseminate Dissent <[email protected]>
29;;; Copyright © 2023 Timotej Lazar <[email protected]>
30;;; Copyright © 2023 Morgan Smith <[email protected]>
31;;; Copyright © 2023 Zheng Junjie <[email protected]>
32;;; Copyright © 2024-2025 Sharlatan Hellseher <[email protected]>
33;;; Copyright © 2025 Ashish SHUKLA <[email protected]>
34;;; Copyright © 2025, 2026 Vinicius Monego <[email protected]>
35;;; Copyright © 2025 Grigory Shepelev <[email protected]>
36;;; Copyright © 2026 Luis Guilherme Coelho <[email protected]>
37;;; Copyright © 2026 Murilo <[email protected]>
38
39;;;
40;;; This file is part of GNU Guix.
41;;;
42;;; GNU Guix is free software; you can redistribute it and/or modify it
43;;; under the terms of the GNU General Public License as published by
44;;; the Free Software Foundation; either version 3 of the License, or (at
45;;; your option) any later version.
46;;;
47;;; GNU Guix is distributed in the hope that it will be useful, but
48;;; WITHOUT ANY WARRANTY; without even the implied warranty of
49;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
50;;; GNU General Public License for more details.
51;;;
52;;; You should have received a copy of the GNU General Public License
53;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
54
55(define-module (gnu packages disk)
56 #:use-module ((guix licenses) #:prefix license:)
57 #:use-module (guix build-system cargo)
58 #:use-module (guix build-system glib-or-gtk)
59 #:use-module (guix build-system gnu)
60 #:use-module (guix build-system go)
61 #:use-module (guix build-system meson)
62 #:use-module (guix build-system perl)
63 #:use-module (guix build-system pyproject)
64 #:use-module (guix build-system qt)
65 #:use-module (guix build-system scons)
66 #:use-module (guix build-system trivial)
67 #:use-module (guix download)
68 #:use-module (guix gexp)
69 #:use-module (guix git-download)
70 #:use-module (guix packages)
71 #:use-module (guix utils)
72 #:use-module (gnu packages)
73 #:use-module (gnu packages admin)
74 #:use-module (gnu packages autotools)
75 #:use-module (gnu packages base)
76 #:use-module (gnu packages bash)
77 #:use-module (gnu packages build-tools)
78 #:use-module (gnu packages c)
79 #:use-module (gnu packages nss)
80 #:use-module (gnu packages check)
81 #:use-module (gnu packages compression)
82 #:use-module (gnu packages crypto)
83 #:use-module (gnu packages cryptsetup)
84 #:use-module (gnu packages databases)
85 #:use-module (gnu packages digest)
86 #:use-module (gnu packages docbook)
87 #:use-module (gnu packages documentation)
88 #:use-module (gnu packages elf)
89 #:use-module (gnu packages file)
90 #:use-module (gnu packages file-systems)
91 #:use-module (gnu packages fontutils)
92 #:use-module (gnu packages freedesktop)
93 #:use-module (gnu packages gettext)
94 #:use-module (gnu packages glib)
95 #:use-module (gnu packages gnome)
96 #:use-module (gnu packages gnupg)
97 #:use-module (gnu packages golang-build)
98 #:use-module (gnu packages golang-check)
99 #:use-module (gnu packages golang-compression)
100 #:use-module (gnu packages golang-xyz)
101 #:use-module (gnu packages graphics)
102 #:use-module (gnu packages gtk)
103 #:use-module (gnu packages guile)
104 #:use-module (gnu packages hurd)
105 #:use-module (gnu packages image)
106 #:use-module (gnu packages imagemagick)
107 #:use-module (gnu packages jemalloc)
108 #:use-module (gnu packages libbsd)
109 #:use-module (gnu packages linux)
110 #:use-module (gnu packages lua)
111 #:use-module (gnu packages ncurses)
112 #:use-module (gnu packages nss)
113 #:use-module (gnu packages perl)
114 #:use-module (gnu packages perl-web)
115 #:use-module (gnu packages pkg-config)
116 #:use-module (gnu packages popt)
117 #:use-module (gnu packages python)
118 #:use-module (gnu packages python-build)
119 #:use-module (gnu packages python-crypto)
120 #:use-module (gnu packages python-web)
121 #:use-module (gnu packages python-xyz)
122 #:use-module (gnu packages qt)
123 #:use-module (gnu packages readline)
124 #:use-module (gnu packages regex)
125 #:use-module (gnu packages rust)
126 #:use-module (gnu packages samba)
127 #:use-module (gnu packages serialization)
128 #:use-module (gnu packages sphinx)
129 #:use-module (gnu packages sqlite)
130 #:use-module (gnu packages swig)
131 #:use-module (gnu packages terminals)
132 #:use-module (gnu packages textutils)
133 #:use-module (gnu packages tls)
134 #:use-module (gnu packages vim)
135 #:use-module (gnu packages w3m)
136 #:use-module (gnu packages web)
137 #:use-module (gnu packages xml)
138 #:use-module (gnu packages xorg))
139
140(define-public bcache-tools
141 ;; The 1.1 release is a year old and missing new features & documentation.
142 (let ((commit "096d205a9f1be8540cbc5a468c0da8203023de70")
143 (revision "0"))
144 (package
145 (name "bcache-tools")
146 (version (git-version "1.1" revision commit))
147 (source
148 (origin
149 (method git-fetch)
150 (uri (git-reference
151 (url (string-append "https://git.kernel.org/pub/scm/"
152 "linux/kernel/git/colyli/bcache-tools.git"))
153 (commit commit)))
154 (file-name (git-file-name name version))
155 (sha256
156 (base32 "0r0vwg4vacz5zgsafk360xn7gi2scy01c79mkmjrdyxjfij5z3iy"))))
157 (build-system gnu-build-system)
158 (arguments
159 `(#:tests? #f ; no test suite
160 #:make-flags
161 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
162 (string-append "UDEVLIBDIR=" (assoc-ref %outputs "out")
163 "/lib/udev")
164 (string-append "DRACUTLIBDIR=" (assoc-ref %outputs "out")
165 "/lib/dracut")
166 (string-append "CC=" ,(cc-for-target)))
167 #:phases
168 (modify-phases %standard-phases
169 (delete 'configure) ; no configure script
170 (add-before 'install 'fix-hard-coded-file-names
171 (lambda _
172 ;; Some rules still hard-code /usr.
173 (substitute* "Makefile"
174 (("/usr") "${PREFIX}"))
175 #t))
176 (add-before 'install 'create-target-directories
177 (lambda* (#:key outputs #:allow-other-keys)
178 (let* ((out (assoc-ref outputs "out")))
179 (for-each (lambda (dir)
180 (mkdir-p (string-append out dir)))
181 (list "/lib/udev/rules.d"
182 "/sbin"
183 "/share/man/man8"))
184 #t))))))
185 (native-inputs
186 (list pkg-config))
187 (inputs
188 `(("util-linux:lib" ,util-linux "lib"))) ; libblkid
189 (home-page "https://bcache.evilpiepirate.org")
190 (synopsis "Tools for the Linux kernel block layer cache")
191 (description
192 "This package contains user-space utilities to create and inspect bcache
193partitions. It's rather minimal as bcache is designed to work well without
194configuration on any system.
195
196Linux's @acronym{bcache, block layer cache} lets one or more fast block devices,
197such as flash-based @acronym{SSDs, solid state drives}, to act as a cache for
198one or more slower (and inexpensive) devices, such as hard disk drives or
199redundant storage arrays. In fact, bcache intends to be a superior alternative
200to battery-backed RAID controllers.
201
202Bcache is designed around the performance characteristics of SSDs and tries to
203minimize write inflation. It's file-system agnostic and does both write-through
204and write-back caching.")
205 (license license:gpl2))))
206
207(define-public udevil
208 (package
209 (name "udevil")
210 (version "0.4.4")
211 (source
212 (origin
213 (method git-fetch)
214 (uri
215 (git-reference
216 (url "https://github.com/IgnorantGuru/udevil")
217 (commit version)))
218 (file-name (git-file-name name version))
219 (sha256
220 (base32 "0x9mjr9abvbxzfa9mrip5264iz1qxvsl01k3ybz95q4a7xl4jcb3"))))
221 (build-system gnu-build-system)
222 (arguments
223 `(#:configure-flags
224 (list
225 "--disable-systemd"
226 (string-append "--sysconfdir="
227 (assoc-ref %outputs "out")
228 "/etc")
229 ;; udevil expects these programs to be run with an UID of root.
230 ;; mount and umount are %default-privileged-programs on Guix System;
231 ;; the others must be explicitly added if desired.
232 "--with-mount-prog=/run/privileged/bin/mount"
233 "--with-umount-prog=/run/privileged/bin/umount"
234 "--with-losetup-prog=/run/privileged/bin/losetup"
235 "--with-setfacl-prog=/run/privileged/bin/setfacl")
236 #:phases
237 (modify-phases %standard-phases
238 (add-after 'unpack 'remove-root-reference
239 (lambda _
240 (substitute* "src/Makefile.in"
241 (("-o root -g root") ""))
242 #t))
243 (add-after 'unpack 'patch-udevil-reference
244 ;; udevil expects itself to be run with uid set as root.
245 ;; devmon also expects udevil to be run with uid set as root.
246 ;; user has to manually add udevil to privileged-programs.
247 (lambda _
248 (substitute* "src/udevil.c"
249 (("/usr/bin/udevil") "/run/privileged/bin/udevil"))
250 (substitute* "src/devmon"
251 (("`which udevil 2>/dev/null`") "/run/privileged/bin/udevil"))
252 #t)))))
253 (native-inputs
254 (list intltool pkg-config))
255 (inputs
256 (list cifs-utils
257 curlftpfs
258 eudev
259 fakeroot
260 glib
261 sshfs))
262 (synopsis "Device and file system manager")
263 (description "udevil is a command line program that mounts and unmounts
264removable devices without a password, shows device info, and monitors device
265changes. It can also mount ISO files, NFS, SMB, FTP, SSH and WebDAV URLs, and
266tmpfs/ramfs filesystems.")
267 (home-page "https://ignorantguru.github.io/udevil/")
268 (license license:gpl3+)))
269
270(define-public parted
271 (package
272 (name "parted")
273 (version "3.7")
274 (source (origin
275 (method url-fetch)
276 (uri (string-append "mirror://gnu/parted/parted-"
277 version ".tar.xz"))
278 (sha256
279 (base32
280 "0yzga4cjq3yplqs47dl9714vwc3v3v8nxrj80rdc5wx4c5syb380"))))
281 (build-system gnu-build-system)
282 (arguments
283 (list
284 #:configure-flags (if (target-hurd?)
285 #~'("--disable-device-mapper")
286 #~'())
287 #:tests? (not (or (target-hurd?)
288 (%current-target-system)))
289 #:phases
290 #~(modify-phases %standard-phases
291 (add-after 'unpack 'fix-locales-and-python
292 (lambda _
293 (substitute* "tests/msdos-overlap"
294 (("/usr/bin/python") (which "python"))))))))
295 (inputs
296 `(,@(if (target-hurd?)
297 (list hurd-minimal)
298 (list lvm2))
299 ,readline
300 (,util-linux "lib")))
301 (native-inputs
302 (list gettext-minimal
303 pkg-config
304
305 ;; For the tests.
306 e2fsprogs
307 perl
308 python-wrapper
309 util-linux))
310 (outputs '("out" "debug"))
311 (home-page "https://www.gnu.org/software/parted/")
312 (synopsis "Disk partition editor")
313 (description
314 "GNU Parted is a package for creating and manipulating disk partition
315tables. It includes a library and command-line utility.")
316 (license license:gpl3+)))
317
318(define-public fdisk
319 (package
320 (name "fdisk")
321 (version "2.0.0a1")
322 (source
323 (origin
324 (method url-fetch)
325 (uri (string-append "mirror://gnu/fdisk/gnufdisk-"
326 version ".tar.gz"))
327 (sha256
328 (base32
329 "1d8za79kw8ihnp2br084rgyjv9whkwp7957rzw815i0izx6xhqy9"))))
330 (build-system gnu-build-system)
331 (inputs
332 `(("gettext" ,gettext-minimal)
333 ("guile" ,guile-1.8)
334 ("libxcrypt" ,libxcrypt)
335 ("util-linux" ,util-linux "lib")
336 ("parted" ,parted)))
337 ;; The build neglects to look for its own headers in its own tree. A next
338 ;; release should fix this, but may never come: GNU fdisk looks abandoned.
339 (arguments
340 `(#:phases
341 (modify-phases %standard-phases
342 (add-after 'unpack 'skip-broken-header-probes
343 (lambda _
344 (substitute* "backend/configure"
345 (("gnufdisk-common.h .*") "\n"))
346 #t)))
347 #:make-flags (list (string-append "CPPFLAGS="
348 " -I../common/include "
349 " -I../debug/include "
350 " -I../exception/include")
351 (string-append
352 "CFLAGS="
353 "-Wno-error=implicit-function-declaration "
354 "-Wno-error=incompatible-pointer-types"))))
355 (home-page "https://www.gnu.org/software/fdisk/")
356 (synopsis "Low-level disk partitioning and formatting")
357 (description
358 "GNU fdisk provides a GNU version of the common disk partitioning tool
359fdisk. fdisk is used for the creation and manipulation of disk partition
360tables, and it understands a variety of different formats.")
361 (license license:gpl3+)))
362
363(define-public findimagedupes
364 (package
365 (name "findimagedupes")
366 (version "2.20.1")
367 (source
368 (origin
369 (method git-fetch)
370 (uri (git-reference
371 (url "https://github.com/jhnc/findimagedupes")
372 (commit version)))
373 (file-name (git-file-name name version))
374 (sha256
375 (base32 "1zfxmc6c1z4hzsq3k85xxida1v291frq4wbmxv9cg4jmw0ddk5ic"))))
376 (build-system perl-build-system)
377 (arguments
378 (list
379 #:tests? #f
380 #:phases #~(modify-phases %standard-phases
381 (delete 'configure)
382 (delete 'build)
383 (replace 'install
384 ;; There's no ‘make install’ target.
385 (lambda* (#:key outputs #:allow-other-keys)
386 (install-file "findimagedupes"
387 (string-append #$output "/bin"))))
388 (add-after 'unpack 'use-image-magick
389 ;; TODO: package perl-graphics-magick and switch this out
390 (lambda _
391 (substitute* "findimagedupes"
392 (("Graphics::Magick")
393 "Image::Magick"))))
394 (add-after 'unpack 'set-inline-dir
395 (lambda _
396 (substitute* "findimagedupes"
397 (("/usr/local")
398 #$output))))
399 (add-after 'install 'inline-generation
400 (lambda _
401 (mkdir-p (string-append #$output "/lib/findimagedupes"))
402 (invoke (string-append #$output "/bin/findimagedupes"))))
403 (add-after 'install 'wrap-findimagedupes
404 (lambda* (#:key outputs #:allow-other-keys)
405 (wrap-program (string-append #$output
406 "/bin/findimagedupes")
407 `("PERL5LIB" ":" prefix
408 (,(getenv "PERL5LIB") ,(string-append #$output
409 "/lib/perl5/site_perl")))))))))
410 (inputs (list bash-minimal perl-db-file perl-file-mimeinfo
411 perl-image-magick perl-inline-c))
412 (home-page "https://github.com/jhnc/findimagedupes")
413 (synopsis "Find visually similar or duplicate images")
414 (description "findimagedupes compares a list of files for visual
415similarity.")
416 (license license:gpl3+)))
417
418(define-public gdu
419 (package
420 (name "gdu")
421 (version "5.36.1")
422 (source
423 (origin
424 (method git-fetch)
425 (uri (git-reference
426 (url "https://github.com/dundee/gdu")
427 (commit (string-append "v" version))))
428 (file-name (git-file-name name version))
429 (sha256
430 (base32 "1wpmflp0jmmpzynn420ywgd0nvgm10ijdwksqgn97f48f1yibllf"))))
431 (build-system go-build-system)
432 (arguments
433 (list
434 #:install-source? #f
435 #:import-path "github.com/dundee/gdu/v5/cmd/gdu"
436 #:unpack-path "github.com/dundee/gdu/v5"
437 #:test-subdirs #~(list "../../...")))
438 (native-inputs
439 (list go-github-com-dgraph-io-badger-v4
440 go-github-com-fatih-color
441 go-github-com-gdamore-tcell-v2
442 go-github-com-h2non-filetype
443 go-github-com-maruel-natural
444 go-github-com-mattn-go-isatty
445 go-github-com-pkg-errors
446 go-github-com-rivo-tview
447 go-github-com-sirupsen-logrus
448 go-github-com-spf13-cobra
449 go-github-com-stretchr-testify
450 go-github-com-ulikunitz-xz
451 go-golang-org-x-sys
452 go-golang-org-x-text
453 go-gopkg-in-yaml-v3
454 go-modernc-org-sqlite))
455 (home-page "https://github.com/dundee/gdu")
456 (synopsis "Disk usage analyzer")
457 (description "Gdu is a disk usage analyzer written in Go. It is intended
458primarily for SSD disks where it can fully utilize parallel processing, but it
459also works on HDDs.")
460 (license license:expat)))
461
462(define-public gpart
463 ;; The latest (0.3) release is from 2015 and is missing a crash fix.
464 (let ((commit "ec03350a01ad69708b5a3e2d47b8e002b0eba6c9")
465 (revision "0"))
466 (package
467 (name "gpart")
468 (version (git-version "0.3" revision commit))
469 (source
470 (origin
471 (method git-fetch)
472 (uri (git-reference
473 (url "https://github.com/baruch/gpart")
474 (commit commit)))
475 (file-name (git-file-name name version))
476 (sha256
477 (base32 "1dassswliaiwhhmx7yz540yyxgk53fvg672dbvgc5q0v6cqrh5jx"))))
478 (build-system gnu-build-system)
479 (arguments
480 `(#:configure-flags
481 (list (string-append "--docdir=" (assoc-ref %outputs "out") "/share/doc/"
482 ,name "-" ,version))
483 #:phases
484 (modify-phases %standard-phases
485 (add-after 'unpack 'skip-premature-configuration
486 (lambda _
487 (substitute* "autogen.sh"
488 (("\\./configure") "")))))))
489 (native-inputs
490 (list autoconf automake))
491 (home-page "https://github.com/baruch/gpart")
492 (synopsis "Guess and recover PC-style partition tables")
493 (description
494 "Gpart tries to guess the partitions on a PC-style, MBR-partitioned disk
495after they have been inadvertently deleted or the primary partition table at
496sector 0 damaged. In both cases, the contents of these partitions still exist
497on the disk but the operating system cannot access them.
498
499Gpart ignores the partition table and scans each sector of the device or image
500file for several known file system and partition types. Only partitions which
501have been formatted in some way can be recognized. Several file system guessing
502modules are built in; more can be written and loaded at run time.
503
504The guessed table can be restored manually, for example with @command{fdisk},
505written to a file, or---if you firmly believe it's entirely correct---directly
506to disk.
507
508It should be stressed that gpart does a very heuristic job. It can easily be
509right in its guesswork but it can also be terribly wrong. Never believe its
510output without any plausibility checks.")
511 (license license:gpl2+))))
512
513(define-public gptfdisk
514 (package
515 (name "gptfdisk")
516 (version "1.0.10")
517 (source
518 (origin
519 (method url-fetch)
520 (uri (string-append "mirror://sourceforge/gptfdisk/gptfdisk/"
521 version "/gptfdisk-" version ".tar.gz"))
522 (sha256
523 (base32 "10m2jgb2m6r0m6snjh0lsxr7ljw0ic5l9h3ki54yrffjqqdxdgia"))))
524 (build-system gnu-build-system)
525 (arguments
526 `(#:test-target "test"
527 #:phases
528 (modify-phases %standard-phases
529 (add-after 'unpack 'fix-include-directory
530 (lambda _
531 (substitute* "gptcurses.cc"
532 (("ncursesw/ncurses.h") "ncurses.h"))))
533 (delete 'configure) ; no configure script
534 (replace 'install
535 ;; There's no ‘make install’ target.
536 (lambda* (#:key outputs #:allow-other-keys)
537 (let* ((out (assoc-ref outputs "out"))
538 (bin (string-append out "/bin"))
539 (man (string-append out "/share/man/man8")))
540 (install-file "gdisk" bin)
541 (install-file "sgdisk" bin)
542 (install-file "cgdisk" bin)
543 (install-file "fixparts" bin)
544 (install-file "cgdisk.8" man)
545 (install-file "fixparts.8" man)
546 (install-file "gdisk.8" man)
547 (install-file "sgdisk.8" man)))))))
548 (native-inputs
549 (list gettext-minimal))
550 (inputs
551 (list ncurses
552 popt
553 `(,util-linux "lib"))) ;libuuid
554 (home-page "https://www.rodsbooks.com/gdisk/")
555 (synopsis "Low-level GPT disk partitioning and formatting")
556 (description "GPT fdisk (aka gdisk) is a text-mode partitioning tool that
557works on Globally Unique Identifier (@dfn{GUID}) Partition Table (@dfn{GPT})
558disks, rather than on the older Master Boot Record (@dfn{MBR}) partition
559scheme.")
560 (license license:gpl2)))
561
562(define-public ddrescue
563 (package
564 (name "ddrescue")
565 (version "1.30")
566 (source
567 (origin
568 (method url-fetch)
569 (uri (string-append "mirror://gnu/ddrescue/ddrescue-"
570 version ".tar.lz"))
571 (sha256
572 (base32 "0hjmfj4g5m2w5xqd80mwx64acnc85clli4f1ryhqfv4x60nn4r12"))))
573 (build-system gnu-build-system)
574 (arguments
575 `(#:configure-flags (list (string-append "CXX=" ,(cxx-for-target)))))
576 (home-page "https://www.gnu.org/software/ddrescue/ddrescue.html")
577 (synopsis "Data recovery utility")
578 (native-inputs (list lzip))
579 (description
580 "GNU ddrescue is a fully automated data recovery tool. It copies data
581from one file to another, working to rescue data in case of read errors. The
582program also includes a tool for manipulating its log files, which are used
583to recover data more efficiently by only reading the necessary blocks.")
584 (license license:gpl3+)))
585
586(define-public dosfstools
587 (package
588 (name "dosfstools")
589 (version "4.2")
590 (source
591 (origin
592 (method git-fetch)
593 (uri (git-reference
594 (url "https://github.com/dosfstools/dosfstools")
595 (commit (string-append "v" version))))
596 (file-name (git-file-name name version))
597 (sha256
598 (base32 "1xygsixmmc9l7drxylggnzkqqiks8zmlsbhg3z723ii2ak94236s"))))
599 (build-system gnu-build-system)
600 (arguments
601 `(#:configure-flags (list "--enable-compat-symlinks")
602 #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
603 (string-append "CC=" ,(cc-for-target)))))
604 (native-inputs
605 (list autoconf automake
606 ;; For tests.
607 xxd))
608 (home-page "https://github.com/dosfstools/dosfstools")
609 (synopsis "Utilities for making and checking MS-DOS FAT file systems")
610 (description
611 "The dosfstools package includes the mkfs.fat and fsck.fat utilities,
612which respectively make and check MS-DOS FAT file systems.")
613 (license license:gpl3+)))
614
615(define dosfstools/static
616 (static-package
617 (package (inherit dosfstools))))
618
619(define-public fatfsck/static
620 (package
621 (name "fatfsck-static")
622 (version (package-version dosfstools))
623 (build-system trivial-build-system)
624 (source #f)
625 (arguments
626 `(#:modules ((guix build utils))
627 #:builder
628 (begin
629 (use-modules (guix build utils))
630 (let ((src (string-append (assoc-ref %build-inputs "dosfstools")
631 "/sbin"))
632 (exe "fsck.fat")
633 (bin (string-append (assoc-ref %outputs "out") "/sbin")))
634 (mkdir-p bin)
635 (with-directory-excursion bin
636 (copy-file (string-append src "/" exe) exe)
637 (remove-store-references exe)
638 (chmod exe #o555)
639 ;; Add fsck.vfat symlink to match the Linux driver name.
640 (symlink exe "fsck.vfat")
641 #t)))))
642 (inputs (list dosfstools/static))
643 (home-page (package-home-page dosfstools))
644 (synopsis "Statically linked fsck.fat from dosfstools")
645 (description "This package provides a statically-linked @command{fsck.fat}
646and a @command{fsck.vfat} compatibility symlink for use in an initrd.")
647 (license (package-license dosfstools))))
648
649(define-public fatresize
650 (package
651 (name "fatresize")
652 (version "1.1.0")
653 (source (origin
654 (method git-fetch)
655 (uri (git-reference
656 (url "https://github.com/ya-mouse/fatresize")
657 (commit (string-append "v" version))))
658 (file-name (git-file-name name version))
659 (sha256
660 (base32
661 "1vhz84kxfyl0q7mkqn68nvzzly0a4xgzv76m6db0bk7xyczv1qr2"))))
662 (build-system gnu-build-system)
663 (native-inputs
664 (list pkg-config))
665 (inputs
666 (list parted))
667 (home-page "https://github.com/ya-mouse/fatresize")
668 (synopsis "Resize FAT partitions")
669 (description
670 "This package provides a tool to resize FAT partitions using libparted.")
671 (license license:gpl3+)))
672
673(define-public hdparm
674 (package
675 (name "hdparm")
676 (version "9.65")
677 (source (origin
678 (method url-fetch)
679 (uri (string-append "mirror://sourceforge/hdparm/hdparm/"
680 "hdparm-" version ".tar.gz"))
681 (sha256
682 (base32
683 "0jssagggg52ssl9kg99m88afghj7bm1854vyf4p96q6h23wjjjfi"))))
684 (build-system gnu-build-system)
685 (arguments
686 (list #:make-flags
687 #~(list (string-append "binprefix=" #$output)
688 (string-append "manprefix=" #$output)
689 (string-append "CC=" #$(cc-for-target))
690 ;; Let Guix strip binaries and not break cross-compilation.
691 "STRIP=true")
692 #:phases
693 #~(modify-phases %standard-phases
694 (delete 'configure)) ; no configure script
695 #:tests? #f)) ; no test suite
696 (home-page "https://sourceforge.net/projects/hdparm/")
697 (synopsis "View and tune ATA disk drive parameters")
698 (description
699 "@command{hdparm} is a command-line utility to control ATA controllers and
700disk drives. It can increase performance and/or reliability by careful tuning
701of hardware settings like power and acoustic management, DMA modes, and caching.
702It can also display detailed device information, or be used as a simple
703performance benchmarking tool.
704
705@command{hdparm} provides a command line interface to various Linux kernel
706interfaces provided by the SATA/ATA/SAS @code{libata} subsystem, and the older
707IDE driver subsystem. Many external USB drive enclosures with SCSI-ATA Command
708Translation (@dfn{SAT}) are also supported.")
709 (license (license:non-copyleft "file://LICENSE.TXT"))))
710
711(define-public sdparm
712 (package
713 (name "sdparm")
714 (version "1.12")
715 (source
716 (origin
717 (method url-fetch)
718 (uri (string-append "http://sg.danny.cz/sg/p/"
719 "sdparm-" version ".tar.xz"))
720 (sha256
721 (base32 "1gmdxr36allrgap2j4dv238d8awkj327ww0jjwpjwrpbvfpyzjf4"))))
722 (build-system gnu-build-system)
723 (home-page "https://sg.danny.cz/sg/sdparm.html")
724 (synopsis "Provide access to SCSI device parameters")
725 (description
726 "Sdparm reads and modifies SCSI device parameters. These devices can be
727SCSI disks, in which case the role of @command{sdparm} is similar to its
728namesake: the @command{hdparm} utility originally designed for ATA disks.
729However, @command{sdparm} can be used to access parameters on any device that
730uses a SCSI command set. Such devices include CD/DVD drives (irrespective of
731transport), SCSI and ATAPI tape drives, and SCSI enclosures. This utility can
732also send commands associated with starting and stopping the media, loading
733and unloading removable media and some other housekeeping functions.")
734 (license license:bsd-3)))
735
736(define-public open-isns
737 (package
738 (name "open-isns")
739 (version "0.103")
740 (source
741 (origin
742 (method git-fetch)
743 (uri (git-reference
744 (url "https://github.com/open-iscsi/open-isns")
745 (commit (string-append "v" version))))
746 (file-name (git-file-name name version))
747 (modules '((guix build utils)))
748 (sha256
749 (base32 "0008f4sv0z3mmqgf5ifx6rp7nwpp41qd3shhi3b2ci1ir8r91skf"))))
750 (build-system meson-build-system)
751 (arguments
752 (list
753 ;; TODO: Figure out how to run tests, "build" directory contains 0 files
754 ;; from "source/tests", attempt to run them from that directorie failed
755 ;; with error: no pid file: /tmp/isns-test/Test01/server0/pid
756 #:tests? #f
757 #:configure-flags
758 #~(list "-Dslp=disabled"
759 (string-append "-Dsystemddir=" #$output "/lib/systemd")
760 "--sharedstatedir=/var")
761 #:phases
762 #~(modify-phases %standard-phases
763 (add-after 'unpack 'fix-meson.build
764 (lambda _
765 (substitute* "meson.build"
766 (("/usr/lib64")
767 (string-append #$output "/lib"))
768 (("/var/lib")
769 (string-append #$output "/lib"))))))))
770 (native-inputs
771 (list meson
772 ninja
773 pkg-config))
774 (inputs
775 (list openssl))
776 (home-page "https://github.com/open-iscsi/open-isns")
777 (synopsis "Linux server and client for iSNS")
778 (description
779 "This package provides a partial implementation of @acronym{iSNS,
780 Internet Storage Name Service}, specified by
781@url{https://www.rfc-editor.org/rfc/rfc3720.html, RFC4171}. It's an
782maintained fork of https://github.com/cleech/open-isns.")
783 (license license:gpl2)))
784
785(define-public open-iscsi
786 (package
787 (name "open-iscsi")
788 (version "2.1.11")
789 (source
790 (origin
791 (method git-fetch)
792 (uri (git-reference
793 (url "https://github.com/open-iscsi/open-iscsi")
794 (commit version)))
795 (file-name (git-file-name name version))
796 (sha256
797 (base32 "0bafxz3vwk0wfa5r3cl3h9sngdfkll10i8467q8d0im4sj489kay"))))
798 (build-system meson-build-system)
799 (arguments
800 (list
801 ;; XXX: 2nd of 4th test fails with iSCSI ERROR: Could not open
802 ;; /run/lock/iscsi: 2: No such file or directory
803 ;; ../source/libopeniscsiusr/idbm.c:_idbm_lock():327
804 #:tests? #f
805 #:configure-flags
806 #~(list "-Dno_systemd=true"
807 (string-append "-Discsi_sbindir="
808 #$output "/sbin")
809 (string-append "--sbindir="
810 #$output "/sbin"))
811 #:phases
812 #~(modify-phases %standard-phases
813 (add-after 'unpack 'dont-install-to-/var
814 (lambda _
815 (substitute* "meson.build"
816 (("install_data\\(iscsi_etc_iface_file_src, install_dir: db_root \\/ 'ifaces'\\)")
817 "")))))))
818 (native-inputs
819 (list meson
820 ninja
821 perl
822 pkg-config))
823 (inputs
824 (list kmod
825 open-isns
826 openssl
827 (list util-linux "lib")))
828 (home-page "https://github.com/open-iscsi/open-iscsi")
829 (synopsis "Linux iSCSI tools")
830 (description
831 "The Open @acronym{iSCSI, Internet Small Computer Systems Interface}
832project is a high-performance, transport independent, multi-platform
833implementation of @url{https://www.rfc-editor.org/rfc/rfc3720.html, RFC3720}
834iSCSI.
835
836Features:
837@itemize
838@item highly optimized and very small-footprint data path
839@item persistent configuration database
840@item SendTargets discovery
841@item provides @acronym{CHAP, Challenge Handshake Authentication Protocol}
842support
843@item @acronym{PDU, Protocol Data Unit} header Digest
844@item multiple sessions
845@end itemize")
846 ;; The daemon and other top-level commands are licensed as GPLv3, while
847 ;; the libopeniscsiusr library used by some of those commmands is licensed
848 ;; as LGPLv3.
849 (license (list license:gpl2+ ;attached license
850 license:gpl3 ;mentioned in README
851 license:lgpl3)))) ;mentioned in README
852
853(define-public idle3-tools
854 (package
855 (name "idle3-tools")
856 (version "0.9.1")
857 (source
858 (origin
859 (method url-fetch)
860 (uri (string-append "mirror://sourceforge/idle3-tools/idle3-tools-"
861 version ".tgz"))
862 (sha256
863 (base32
864 "00ia7xq9yldxyl9gz0mr4xa568nav14p0fnv82f2rbbkg060cy4p"))))
865 (build-system gnu-build-system)
866 (arguments
867 `(#:tests? #f ;no test suite
868 #:phases
869 (modify-phases %standard-phases
870 (delete 'configure))
871 #:make-flags (list "CC=gcc"
872 (string-append "manprefix=")
873 (string-append "DESTDIR="
874 (assoc-ref %outputs "out")))))
875 (home-page "https://idle3-tools.sourceforge.net")
876 (synopsis "Change or disable Western Digital hard drives' Idle3 timer")
877 (description
878 "Idle3-tools provides a utility to get, set, or disable the Idle3 timer
879present in many Western Digital hard drives. This timer is part of the
880\"IntelliPark\" feature that stops the disk when not in use. Unfortunately,
881the default timer setting is not well suited to Linux or other *nix systems,
882and can dramatically shorten the lifespan of the drive if left unchecked.")
883 (license license:gpl3+)))
884
885(define-public greaseweazle-host-tools
886 (package
887 (name "greaseweazle-host-tools")
888 (version "1.22")
889 (source (origin
890 (method git-fetch)
891 (uri (git-reference
892 (url "https://github.com/keirf/greaseweazle")
893 (commit (string-append "v" version))))
894 (file-name (git-file-name name version))
895 (sha256
896 (base32
897 "1ji5sq9jf0p44982zkb5dj2d3mrpy675k0mkyg3r17q5syz0wbia"))))
898 (build-system pyproject-build-system)
899 (arguments
900 (list
901 #:tests? #f ;XXX: root access is required, see: <scripts/tests/test.sh>
902 #:phases
903 #~(modify-phases %standard-phases
904 (add-after 'install 'install-udev-rules
905 (lambda _
906 (install-file "scripts/49-greaseweazle.rules"
907 (string-append #$output "/lib/udev/rules.d/")))))))
908 (native-inputs
909 (list python-setuptools
910 python-setuptools-scm))
911 (propagated-inputs
912 (list python-bitarray python-crcmod python-pyserial python-requests))
913 (synopsis "Tools for accessing a floppy drive at the raw flux level")
914 (description
915 "This package provides the host tools for controlling a Greaseweazle: an
916Open Source USB device capable of reading and writing raw data on nearly any
917type of floppy disk")
918 (home-page "https://github.com/keirf/greaseweazle")
919 (license license:public-domain)))
920
921(define-public gparted
922 (package
923 (name "gparted")
924 (version "1.6.0")
925 (source
926 (origin
927 (method url-fetch)
928 (uri (string-append "mirror://sourceforge/gparted/gparted/gparted-"
929 version "/gparted-" version ".tar.gz"))
930 (sha256
931 (base32 "0nzaqvbdwq3daddby79k9rh3d560g5kaxqamkasxqka9rsrm37wv"))))
932 (build-system glib-or-gtk-build-system)
933 (arguments
934 ;; Tests require access to files outside the build container, such
935 ;; as ‘/dev/disk/by-id/’.
936 `(#:tests? #f))
937 (inputs
938 (list `(,util-linux "lib") parted glib gtkmm-3 lvm2 libxml2))
939 (native-inputs
940 (list intltool
941 itstool
942 yelp-tools
943 pkg-config))
944 (home-page "https://gparted.org/")
945 (synopsis "Partition editor to graphically manage disk partitions")
946 (description "GParted is a GNOME partition editor for creating,
947reorganizing, and deleting disk partitions. It uses libparted from the parted
948project to detect and manipulate partition tables. Optional file system tools
949permit managing file systems not included in libparted.")
950 ;; The home page says GPLv2, but the source code says GPLv2+.
951 (license license:gpl2+)))
952
953(define-public testdisk
954 (package
955 (name "testdisk")
956 (version "7.2")
957 (source (origin
958 (method url-fetch)
959 (uri (string-append "https://www.cgsecurity.org/testdisk-"
960 version ".tar.bz2"))
961 (sha256
962 (base32
963 "0gr87j0ynbwzb958j443dnp013rr33cvrqx2j5fiq05l1ki3nd7q"))))
964 (build-system gnu-build-system)
965 (inputs
966 (list ntfs-3g
967 `(,util-linux "lib")
968 openssl
969 ;; FIXME: add reiserfs.
970 zlib
971 e2fsprogs
972 libjpeg-turbo
973 ncurses))
974 (home-page "https://www.cgsecurity.org/wiki/TestDisk")
975 (synopsis "Data recovery tool")
976 (description "TestDisk is primarily designed to help recover lost
977partitions and/or make non-booting disks bootable again when these symptoms
978were caused by faulty software or human error (such as accidentally deleting a
979partition table). TestDisk can:
980@enumerate
981@item Fix partition table, recover deleted partition
982@item Recover FAT32 boot sector from its backup
983@item Rebuild FAT12/FAT16/FAT32 boot sector
984@item Fix FAT tables
985@item Rebuild NTFS boot sector
986@item Recover NTFS boot sector from its backup
987@item Fix MFT using MFT mirror
988@item Locate ext2/ext3/ext4 Backup SuperBlock
989@item Un-delete files from FAT, exFAT, NTFS and ext2 file systems
990@item Copy files from deleted FAT, exFAT, NTFS and ext2/ext3/ext4 partitions.
991@end enumerate
992This package also includes the @command{photorec} command, described below.
993
994PhotoRec is file data recovery software designed to recover lost files
995including video, documents and archives from hard disks, CD-ROMs, and lost
996pictures (thus the Photo Recovery name) from digital camera memory. PhotoRec
997ignores the file system and goes after the underlying data, so it will still
998work even if your media's file system has been severely damaged or
999reformatted. It can recover lost files from at least:
1000@enumerate
1001@item FAT
1002@item NTFS
1003@item exFAT
1004@item ext2/ext3/ext4 file system
1005@item HFS+
1006@end enumerate")
1007 (license license:gpl2+)))
1008
1009(define-public pydf
1010 (let ((commit "af38bb3b7aacbcc32271e6dafa8b8b0a77ffead8")
1011 (revision "0"))
1012 (package
1013 (name "pydf")
1014 (version (git-version "15" revision commit))
1015 (source
1016 (origin
1017 (method git-fetch)
1018 (uri (git-reference
1019 (url "https://github.com/garabik/pydf")
1020 (commit commit)))
1021 (file-name (git-file-name name version))
1022 (sha256
1023 (base32 "18ljigg8zm9pc3qg3alpyh3n4a4f1wcza4p36cchjn2vd4466jf4"))))
1024 (build-system pyproject-build-system)
1025 (arguments (list #:tests? #f)) ; No tests.
1026 (native-inputs (list python-setuptools))
1027 (home-page "http://kassiopeia.juls.savba.sk/~garabik/software/pydf/")
1028 (synopsis "Colourised @command{df} clone")
1029 (description
1030 "All-singing, all-dancing, fully colourised @command{df} clone written
1031in Python. It displays the amount of disk space available on the mounted file
1032systems, using different colours for different types of file systems. Output
1033format is completely customizable.")
1034 (license license:public-domain))))
1035
1036(define-public f3
1037 (package
1038 (name "f3")
1039 (version "9.0")
1040 (source
1041 (origin
1042 (method git-fetch)
1043 (uri (git-reference
1044 (url "https://github.com/AltraMayor/f3")
1045 (commit (string-append "v" version))))
1046 (file-name (git-file-name name version))
1047 (sha256
1048 (base32 "0k9299phdxp0yag0mm58sfrbqmb19zvia57wgcaqawf9clafba35"))))
1049 (build-system gnu-build-system)
1050 (arguments
1051 (list #:tests? #f ; no check target
1052 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
1053 (string-append "PREFIX=" #$output))
1054 #:phases
1055 #~(modify-phases %standard-phases
1056 (delete 'configure) ; no configure script
1057 (add-after 'build 'build-extra
1058 (lambda* (#:key make-flags #:allow-other-keys)
1059 (apply invoke "make" "extra" make-flags)))
1060 (add-after 'build 'install-extra
1061 (lambda* (#:key make-flags #:allow-other-keys)
1062 (apply invoke "make" "install-extra" make-flags))))))
1063 (inputs
1064 (list eudev parted))
1065 (home-page "http://oss.digirati.com.br/f3/")
1066 (synopsis "Test real capacity of flash memory cards and such")
1067 (description "F3 (Fight Flash Fraud or Fight Fake Flash) tests the full
1068capacity of a flash card (flash drive, flash disk, pendrive). F3 writes to
1069the card and then checks if can read it. It will assure you haven't been sold
1070a card with a smaller capacity than stated.")
1071 (license license:gpl3+)))
1072
1073(define-public python-pyparted
1074 (package
1075 (name "python-pyparted")
1076 (version "3.13.0")
1077 (source
1078 (origin
1079 (method git-fetch)
1080 (uri (git-reference
1081 (url "https://github.com/dcantrell/pyparted")
1082 (commit (string-append "v" version))))
1083 (file-name (git-file-name name version))
1084 (sha256
1085 (base32 "09gjp60sr8l0v41anmdfnh9lizfz1mbb7mxvqq73s30vn4504982"))))
1086 (build-system pyproject-build-system)
1087 (native-inputs
1088 (list e2fsprogs
1089 pkg-config
1090 python-pytest
1091 python-setuptools
1092 python-wheel))
1093 (inputs
1094 (list parted))
1095 (home-page "https://github.com/dcantrell/pyparted")
1096 (synopsis "Parted bindings for Python")
1097 (description "This package provides @code{parted} bindings for Python.")
1098 (license license:gpl2+)))
1099
1100(define-public duperemove
1101 (package
1102 (name "duperemove")
1103 (version "0.15.2")
1104 (source
1105 (origin
1106 (method git-fetch)
1107 (uri (git-reference
1108 (url "https://github.com/markfasheh/duperemove")
1109 (commit (string-append "v" version))))
1110 (sha256
1111 (base32 "0dsjw7nqflxapsb1fkxbqncqzq6aa8dxklc5igcvfv5mmsmchwb3"))
1112 (file-name (git-file-name name version))))
1113 (build-system gnu-build-system)
1114 (native-inputs (list xxhash libbsd pkg-config))
1115 (inputs (list glib sqlite))
1116 (arguments
1117 `(#:tests? #f ;no test suite
1118 #:phases (modify-phases %standard-phases
1119 (delete 'configure)) ;no configure script
1120 #:make-flags (list (string-append "PREFIX=" %output)
1121 (string-append "CC="
1122 ,(cc-for-target))
1123 ;; Set to <next release>dev by default.
1124 (string-append "VER="
1125 ,version))))
1126 (home-page "https://github.com/markfasheh/duperemove")
1127 (synopsis "Tools for de-duplicating file system data")
1128 (description
1129 "Duperemove is a simple tool for finding duplicated extents
1130and submitting them for deduplication. When given a list of files it will
1131hash their contents on a block by block basis and compare those hashes to each
1132other, finding and categorizing blocks that match each other. When given the
1133@option{-d} option, duperemove will submit those extents for deduplication
1134using the Linux kernel extent-same @code{ioctl}.
1135
1136Duperemove can store the hashes it computes in a @dfn{hash file}. If given an
1137existing hash file, duperemove will only compute hashes for those files which
1138have changed since the last run. Thus you can run duperemove repeatedly on
1139your data as it changes, without having to re-checksum unchanged data.
1140
1141Duperemove can also take input from the @command{fdupes} program.")
1142 (license license:gpl2)))
1143
1144(define-public ranger
1145 (package
1146 (name "ranger")
1147 (version "1.9.4")
1148 (source
1149 (origin
1150 (method url-fetch)
1151 (uri (string-append "https://ranger.fm/ranger-" version ".tar.gz"))
1152 (sha256
1153 (base32 "128ggxfhfmckl7x89flwxks7gxq0m02insdizcsp62193c6mxmvs"))))
1154 (build-system pyproject-build-system)
1155 (arguments
1156 (list
1157 #:phases
1158 #~(modify-phases %standard-phases
1159 (add-after 'unpack 'set-paths
1160 (lambda _
1161 (substitute* (find-files "ranger" "\\.py$")
1162 (("\"file\"")
1163 (simple-format #f "~s"
1164 #$(file-append (this-package-input "file")
1165 "/bin/file"))))))
1166 (add-after 'install 'wrap-program
1167 ;; Tell 'ranger' where 'w3mimgdisplay' is.
1168 (lambda _
1169 (let* ((ranger (string-append #$output "/bin/ranger"))
1170 (w3m #$(this-package-input "w3m"))
1171 (w3mimgdisplay (string-append w3m
1172 "/libexec/w3m/w3mimgdisplay")))
1173 (wrap-program ranger
1174 `("W3MIMGDISPLAY_PATH" ":" prefix
1175 (,w3mimgdisplay)))))))))
1176 (native-inputs (list python-pytest python-setuptools python-wheel))
1177 (inputs (list bash-minimal file w3m))
1178 (home-page "https://ranger.fm")
1179 (synopsis "Console file manager")
1180 (description
1181 "ranger is a console file manager with Vi key bindings. It provides a
1182minimalistic and nice curses interface with a view on the directory hierarchy.
1183It ships with @code{rifle}, a file launcher that is good at automatically
1184finding out which program to use for what file type.")
1185 (license license:gpl3)))
1186
1187(define-public fff
1188 (package
1189 (name "fff")
1190 (version "2.2")
1191 (source (origin
1192 (method git-fetch)
1193 (uri (git-reference
1194 (url "https://github.com/dylanaraps/fff")
1195 (commit version)))
1196 (file-name (git-file-name name version))
1197 (sha256
1198 (base32
1199 "14ymdw6l6phnil0xf1frd5kgznaiwppcic0v4hb61s1zpf4wrshg"))))
1200 (build-system gnu-build-system)
1201 (inputs
1202 (list bash
1203 file))
1204 (arguments
1205 (list
1206 #:tests? #f ; no tests
1207 #:make-flags
1208 #~(list
1209 (string-append "PREFIX=" #$output))
1210 #:phases
1211 #~(modify-phases %standard-phases
1212 (add-after 'unpack 'refer-to-inputs
1213 (lambda* (#:key inputs #:allow-other-keys)
1214 (let ((file (assoc-ref inputs "file")))
1215 (substitute* "fff"
1216 (("\\bfile [-\"]" match)
1217 (string-append file "/bin/" match))))))
1218 (delete 'configure)))) ; no configure script
1219 (home-page "https://github.com/dylanaraps/fff")
1220 (synopsis "Simple file manager written in bash")
1221 (description
1222 "@command{fff} (fast file-manager) is a simple, blazing fast and minimal
1223file manager for Linux, written in bash. It only requires bash and coreutils,
1224and its highly optimized now for efficient performance.")
1225 (license license:expat)))
1226
1227(define-public volume-key
1228 (package
1229 (name "volume-key")
1230 (version "0.3.12")
1231 (source
1232 (origin
1233 (method git-fetch)
1234 (uri (git-reference
1235 (url "https://pagure.io/volume_key")
1236 (commit (string-append "volume_key-" version))))
1237 (file-name (git-file-name name version))
1238 (sha256
1239 (base32 "0zadzbh26ckk263w02d02r2x3mry2kxbybkhwwaxwpv6jsrm7xr6"))))
1240 (build-system gnu-build-system)
1241 (native-inputs
1242 (list autoconf
1243 automake
1244 gettext-minimal
1245 libtool
1246 pkg-config
1247 python ; used to generate the Python bindings
1248 python-setuptools
1249 swig-4.0))
1250 (inputs
1251 (append
1252 (cons cryptsetup-minimal (libcryptsetup-propagated-inputs))
1253 (cons lvm2 (libdevmapper-propagated-inputs))
1254 (list nss
1255 (list util-linux "lib")
1256 glib
1257 gpgme)))
1258 (arguments
1259 (list
1260 #:tests? #f ; not sure how tests are supposed to pass, even when run manually
1261 #:configure-flags
1262 #~(list "--without-python"
1263 (string-append "--with-gpgme-prefix="
1264 #$(this-package-input "gpgme")))
1265 #:phases
1266 #~(modify-phases %standard-phases
1267 (add-before 'configure 'set-python-paths
1268 (lambda* (#:key inputs #:allow-other-keys)
1269 (let ((python #$(this-package-native-input "python")))
1270 (setenv "PYTHON3"
1271 (string-append python "/bin/python3"))
1272 (setenv "PYTHON3_CONFIG"
1273 (string-append python "/bin/python3-config"))))))))
1274 (home-page "https://pagure.io/volume_key")
1275 (synopsis "Manipulate storage volume encryption keys")
1276 (description
1277 "This package provides a library for manipulating storage volume
1278encryption keys and storing them separately from volumes to handle forgotten
1279passphrases.")
1280 (license license:gpl2)))
1281
1282(define-public ndctl
1283 (package
1284 (name "ndctl")
1285 (version "84")
1286 (source (origin
1287 (method git-fetch)
1288 (uri (git-reference
1289 (url "https://github.com/pmem/ndctl")
1290 (commit (string-append "v" version))))
1291 (file-name (git-file-name name version))
1292 (sha256
1293 (base32
1294 "0jal7w4mk5l5j0qfays27kya8n1h2qwkncl0s317rfxp56bkjp6y"))))
1295 (build-system meson-build-system)
1296 (arguments
1297 ;; The test suite runs but SKIPs all tests: do not consider this tested!
1298 (list #:configure-flags
1299 #~(list (string-append "-Drootprefix=" #$output)
1300 (string-append "-Dlibdir=" #$output "/lib")
1301 (string-append "-Dbashcompletiondir=" #$output
1302 "/share/bash-completion/completions")
1303 (string-append "-Dsysconfdir=" #$output "/etc")
1304 (string-append "-Diniparserdir="
1305 #$(this-package-input "iniparser")
1306 "/include")
1307 "-Dasciidoctor=disabled" ; use docbook-xsl instead
1308 "-Dsystemd=disabled")
1309 #:phases
1310 #~(modify-phases %standard-phases
1311 (add-after 'unpack 'fix-version
1312 ;; Our VERSION's always better than the build's poor guess.
1313 (lambda _
1314 (with-output-to-file "version"
1315 (lambda _ (display #$version)))))
1316 (add-after 'unpack 'patch-FHS-file-names
1317 (lambda _
1318 (substitute* "git-version-gen"
1319 (("/bin/sh") (which "sh")))
1320 (substitute* "git-version"
1321 (("/bin/bash") (which "bash"))))))))
1322 (native-inputs
1323 (list asciidoc
1324 bash-completion
1325 docbook-xsl
1326 libxml2
1327 pkg-config
1328 xmlto
1329 ;; Required for offline docbook generation.
1330 which))
1331 (inputs
1332 (list eudev
1333 iniparser
1334 json-c
1335 keyutils
1336 kmod
1337 libtraceevent
1338 libtracefs
1339 `(,util-linux "lib")))
1340 (home-page "https://github.com/pmem/ndctl")
1341 (synopsis "Manage the non-volatile memory device sub-system in the Linux kernel")
1342 (description
1343 "This package provides a utility library for managing the
1344libnvdimm (non-volatile memory device) sub-system in the Linux kernel.")
1345 ;; COPYING says LGPL2.1, but many source files are GPL2 so that's
1346 ;; the effective license. Note that some files under ccan/ are
1347 ;; covered by BSD-3 or public domain, see the individual directories.
1348 (license license:gpl2)))
1349
1350(define-public dmraid
1351 (package
1352 (name "dmraid")
1353 (version "1.0.0.rc16-3")
1354 (source (origin
1355 (method url-fetch)
1356 (uri (string-append "https://people.redhat.com/~heinzm/sw/dmraid/src/dmraid-"
1357 version ".tar.bz2"))
1358 (sha256
1359 (base32
1360 "1n7vsqvh7y6yvil682q129d21yhb0cmvd5fvsbkza7ypd78inhlk"))))
1361 (build-system gnu-build-system)
1362 (inputs (list lvm2))
1363 (native-inputs (list which))
1364 (arguments
1365 `(#:tests? #f ; No tests.
1366 ;; Prevent a race condition where some target would attempt to link
1367 ;; libdmraid.so before it had been built as reported in
1368 ;; <https://bugs.gnu.org/31999#187>.
1369 #:parallel-build? #f
1370 #:phases (modify-phases %standard-phases
1371 (add-before 'configure 'change-directory
1372 (lambda _
1373 (chdir (string-append ,version "/dmraid"))
1374 (substitute* "make.tmpl.in"
1375 (("/bin/sh") (which "sh")))
1376 #t)))
1377 #:configure-flags (list ;; Make sure programs such as 'dmevent_tool' can
1378 ;; find libdmraid.so.
1379 (string-append "LDFLAGS=-Wl,-rpath="
1380 (assoc-ref %outputs "out")
1381 "/lib"))))
1382 (home-page "https://people.redhat.com/~heinzm/sw/dmraid/")
1383 (synopsis "Device mapper RAID interface")
1384 (description
1385 "This software supports RAID device discovery, RAID set activation, creation,
1386removal, rebuild and display of properties for ATARAID/DDF1 metadata.
1387
1388@command{dmraid} uses @file{libdevmapper} and the device-mapper kernel runtime
1389to create devices with respective mappings for the ATARAID sets discovered.")
1390 (license license:gpl2+)))
1391
1392(define-public libblockdev
1393 (package
1394 (name "libblockdev")
1395 (version "3.3.0")
1396 (source (origin
1397 (method url-fetch)
1398 (uri (string-append "https://github.com/storaged-project/"
1399 "libblockdev/releases/download/"
1400 version "/libblockdev-" version ".tar.gz"))
1401 (sha256
1402 (base32
1403 "19yzidh8i32327h8h7b9yx86yv1hm7kz1y91cn4gxzyypqd8wwy4"))))
1404 (build-system gnu-build-system)
1405 (arguments
1406 (list
1407 #:modules (cons '(ice-9 format) %default-gnu-modules)
1408 #:phases
1409 #~(modify-phases %standard-phases
1410 (add-after 'unpack 'patch-configuration-directory
1411 (lambda _
1412 (substitute* "src/lib/blockdev.c"
1413 (("/etc/libblockdev/conf.d/" path)
1414 (string-append #$output path)))))
1415 (add-after 'unpack 'patch-paths
1416 (lambda* (#:key inputs #:allow-other-keys)
1417 (define* (find-program program #:key fail-if-missing?)
1418 (or (and (string=? "vfat-resize" program)
1419 (string-append #$output "/bin/vfat-resize"))
1420 (false-if-exception
1421 (search-input-file inputs
1422 (string-append "bin/" program)))
1423 (false-if-exception
1424 (search-input-file inputs
1425 (string-append "sbin/" program)))
1426 (if fail-if-missing?
1427 (error "could not find" program)
1428 (begin
1429 (format (current-warning-port)
1430 "warning: program ~s left unpatched~%"
1431 program)
1432 program))))
1433 (substitute* (find-files "src/plugins" "\\.c$")
1434 (("(gchar \\*arg.+\\{\")([^\"]+)" all start program)
1435 (string-append
1436 start (find-program program))))
1437 (substitute* "src/plugins/fs/generic.c"
1438 (("_util = \"([^\"]*)\"" all program)
1439 (format #f "_util = ~s" (find-program program))))
1440 ;; Tip: look for check_deps calls in the source to find where
1441 ;; commands are looked up from PATH.
1442 (let-syntax
1443 ((patch-helpers
1444 (lambda (x)
1445 (syntax-case x ()
1446 ((_ file (helpers ...))
1447 (with-syntax ((pattern (datum->syntax x 'pattern)))
1448 #'(let ((pattern (format #f "\"(~{~a~^|~})\""
1449 '(helpers ...))))
1450 (substitute* file
1451 ((pattern dummy program)
1452 (format
1453 #f "~s"
1454 (find-program
1455 program #:fail-if-missing? #t)))))))))))
1456
1457 (patch-helpers "src/plugins/fs/btrfs.c"
1458 ("mkfs.btrfs" "btrfsck" "btrfs" "btrfstune"))
1459 (patch-helpers "src/plugins/fs/exfat.c"
1460 ("mkfs.exfat" "fsck.exfat" "tune.exfat"))
1461 (patch-helpers "src/plugins/fs/ext.c"
1462 ("mke2fs" "e2fsck" "tune2fs" "resize2fs"))
1463 (patch-helpers "src/plugins/fs/f2fs.c"
1464 ("mkfs.f2fs" "fsck.f2fs" "dump.f2fs"
1465 "resize.f2fs"))
1466 (patch-helpers "src/plugins/fs/nilfs.c"
1467 ("mkfs.nilfs2" "nilfs-tune" "nilfs-resize"))
1468 (patch-helpers "src/plugins/fs/ntfs.c"
1469 ("mkntfs" "ntfsfix" "ntfsresize" "ntfslabel"
1470 "ntfsinfo"))
1471 (patch-helpers "src/plugins/fs/udf.c"
1472 ("mkudffs" "udflabel" "udfinfo"))
1473 (patch-helpers "src/plugins/fs/vfat.c"
1474 ("mkfs.vfat" "fat label" "fsck.vfat"
1475 "vfat-resize" "fatlabel"))
1476 (patch-helpers "src/plugins/fs/xfs.c"
1477 ("mkfs.xfs" "xfs_db" "xfs_repair" "xfs_admin"
1478 "xfs_growfs"))
1479 (patch-helpers "src/plugins/swap.c"
1480 ("mkswap" "swaplabel"))))))))
1481 (native-inputs
1482 (list gobject-introspection
1483 pkg-config
1484 python-wrapper))
1485 (inputs
1486 (append
1487 (cons cryptsetup-minimal (libcryptsetup-propagated-inputs))
1488 (if (supported-package? multipath-tools)
1489 (list multipath-tools)
1490 '())
1491 (list bcache-tools
1492 btrfs-progs
1493 dosfstools
1494 dmraid
1495 e2fsprogs
1496 eudev
1497 exfatprogs
1498 f2fs-tools
1499 glib
1500 gptfdisk
1501 json-glib-minimal
1502 keyutils
1503 kmod
1504 libatasmart
1505 libbytesize
1506 libnvme
1507 libyaml
1508 lvm2
1509 mdadm
1510 ndctl
1511 nilfs-utils
1512 nss
1513 ntfs-3g
1514 parted
1515 udftools
1516 util-linux
1517 volume-key
1518 xfsprogs)))
1519 (home-page "https://github.com/storaged-project/libblockdev")
1520 (synopsis "Library for manipulating block devices")
1521 (description
1522 "libblockdev is a C library supporting GObject introspection for
1523manipulation of block devices. It has a plugin-based architecture where each
1524technology (like LVM, Btrfs, MD RAID, Swap...) is implemented in a separate
1525plugin, possibly with multiple implementations (e.g. using LVM CLI or the new
1526LVM D-Bus API).")
1527 (license license:lgpl2.1+)))
1528
1529(define-public rmlint
1530 (package
1531 (name "rmlint")
1532 (version "2.10.3")
1533 (source (origin
1534 (method git-fetch)
1535 (uri (git-reference
1536 (url "https://github.com/sahib/rmlint")
1537 (commit (string-append "v" version))))
1538 (file-name (git-file-name name version))
1539 (sha256
1540 (base32
1541 "1033h99z443wqb66rrh34gmnlnlbjsm5j1sqpg069jdih2ffi6a3"))))
1542 (build-system scons-build-system)
1543 (arguments
1544 (list
1545 #:scons-flags
1546 #~(list (string-append "--prefix=" #$output)
1547 (string-append "--actual-prefix=" #$output))
1548 #:tests? #f ; no tests
1549 #:phases
1550 #~(modify-phases %standard-phases
1551 (add-after 'unpack 'scons-propagate-environment
1552 (lambda* (#:key inputs #:allow-other-keys)
1553 ;; TODO: `rmlint --gui` fails with
1554 ;; "Failed to load shredder: No module named 'shredder'".
1555 ;; The GUI might also need extra dependencies, such as
1556 ;; python-gobject, python-cairo, dconf, librsvg, gtksourceview3.
1557 (substitute* "lib/cmdline.c"
1558 (("const char \\*commands\\[\\] = \\{\"python3\", \"python\", NULL\\};")
1559 (string-append "const char *commands[] = {\""
1560 (search-input-file inputs "/bin/python")
1561 "\", \"python\", NULL};")))
1562 ;; By design, SCons does not, by default, propagate
1563 ;; environment variables to subprocesses. See:
1564 ;; <http://comments.gmane.org/gmane.linux.distributions.nixos/4969>
1565 ;; Here, we modify the SConstruct file to arrange for
1566 ;; environment variables to be propagated.
1567 (substitute* "SConstruct"
1568 (("^env = Environment\\(.*\\)" all)
1569 (string-append all "\nenv['ENV']=os.environ"))))))))
1570 (native-inputs
1571 (list `(,glib "bin") pkg-config python-sphinx))
1572 (inputs
1573 (list elfutils
1574 glib
1575 json-glib
1576 python-wrapper
1577 `(,util-linux "lib")))
1578 (home-page "https://rmlint.rtfd.org")
1579 (synopsis "Remove duplicates and other lint from the file system")
1580 (description "@command{rmlint} finds space waste and other broken things
1581on your file system and offers to remove it. @command{rmlint} can find:
1582
1583@itemize
1584@item duplicate files and duplicate directories,
1585@item non-stripped binaries (i.e. binaries with debug symbols),
1586@item broken symbolic links,
1587@item empty files and directories,
1588@item files with broken user and/or group ID.
1589@end itemize\n")
1590 (license license:gpl3+)))
1591
1592(define-public lf
1593 (package
1594 (name "lf")
1595 (version "41")
1596 (source
1597 (origin
1598 (method git-fetch)
1599 (uri (git-reference
1600 (url "https://github.com/gokcehan/lf")
1601 (commit (string-append "r" version))))
1602 (file-name (git-file-name name version))
1603 (sha256
1604 (base32 "1rrc720ziaf84wz98y414kfjyh80mqb6wsb3x658g9cjhff7vmxk"))))
1605 (build-system go-build-system)
1606 (arguments
1607 (list
1608 #:install-source? #f
1609 #:import-path "github.com/gokcehan/lf"
1610 #:phases
1611 #~(modify-phases %standard-phases
1612 (add-after 'install 'install-man-page
1613 (lambda* (#:key import-path #:allow-other-keys)
1614 (install-file
1615 (string-append "src/" import-path "/lf.1")
1616 (string-append #$output "/share/man/man1"))))
1617 (add-after 'install 'install-desktop-entry
1618 (lambda* (#:key import-path #:allow-other-keys)
1619 (install-file
1620 (string-append "src/" import-path "/lf.desktop")
1621 (string-append #$output "/share/applications")))))))
1622 (native-inputs
1623 (list go-github-com-djherbis-times
1624 go-github-com-fsnotify-fsnotify
1625 go-github-com-gdamore-tcell-v2
1626 go-github-com-mattn-go-runewidth
1627 go-golang-org-x-sys
1628 go-golang-org-x-term))
1629 (home-page "https://github.com/gokcehan/lf")
1630 (synopsis "Console file browser similar to Ranger")
1631 (description
1632 "@code{lf} (as in \"list files\") is a terminal file manager written in
1633Go. It is heavily inspired by @code{ranger} with some missing and extra
1634features. Some of the missing features are deliberately omitted since they
1635are better handled by external tools.")
1636 (license license:expat)))
1637
1638(define-public yazi
1639 (package
1640 (name "yazi")
1641 (version "26.5.6")
1642 (source
1643 (origin
1644 (method git-fetch)
1645 (uri (git-reference
1646 (url "https://github.com/sxyazi/yazi")
1647 (commit (string-append "v" version))))
1648 (file-name (git-file-name name version))
1649 (sha256
1650 (base32 "08zjkj5vj5qimjcj8n8pzdm84qirkxjykpckhd9z1yfv09ksmmmi"))
1651 (modules '((guix build utils)))
1652 (snippet
1653 #~(begin ;; Don't try to vendor lua.
1654 ;; We substitute on each individual Cargo.toml
1655 ;; because new features might get added in
1656 ;; the future, makes updating the package easier.
1657 (substitute* '("yazi-actor/Cargo.toml"
1658 "yazi-runner/Cargo.toml"
1659 "yazi-scheduler/Cargo.toml"
1660 "yazi-core/Cargo.toml"
1661 "yazi-binding/Cargo.toml"
1662 "yazi-dds/Cargo.toml"
1663 "yazi-parser/Cargo.toml"
1664 "yazi-fm/Cargo.toml"
1665 "yazi-widgets/Cargo.toml"
1666 "yazi-shim/Cargo.toml"
1667 "yazi-plugin/Cargo.toml")
1668 (("\"vendored-lua\", ") "")
1669 (("^vendored-lua.*") "vendored-lua = []\n"))))))
1670 (build-system cargo-build-system)
1671 (arguments
1672 (list
1673 #:install-source? #f
1674 #:rust rust-1.95
1675 #:cargo-install-paths ''("yazi-cli"
1676 "yazi-fm")
1677 #:phases
1678 #~(modify-phases %standard-phases
1679 (add-after 'configure 'generate-completions
1680 (lambda _
1681 (setenv "YAZI_GEN_COMPLETIONS" "1")))
1682 (add-after 'generate-completions 'override-jemalloc
1683 (lambda _
1684 ;; This flag is needed when not using the bundled jemalloc.
1685 ;; https://github.com/tikv/jemallocator/issues/19
1686 (setenv "CARGO_FEATURE_UNPREFIXED_MALLOC_ON_SUPPORTED_PLATFORMS"
1687 "1")
1688 ;; Override jemalloc
1689 (setenv "JEMALLOC_OVERRIDE"
1690 (string-append #$(this-package-input "jemalloc")
1691 "/lib/libjemalloc.so"))))
1692 (add-after 'install 'install-extra
1693 (lambda _
1694 (let* ((share (string-append #$output "/share"))
1695 (applications (string-append share "/applications"))
1696 (bash-completions-dir
1697 (string-append share "/bash-completion/completions"))
1698 (elv-completions-dir
1699 (string-append share "/elvish/lib"))
1700 (fish-completions-dir
1701 (string-append share "/fish/vendor_completions.d"))
1702 (nu-completions-dir
1703 (string-append share "/nushell/vendor/autoload")))
1704 (install-file "assets/yazi.desktop" applications)
1705 (for-each mkdir-p (list bash-completions-dir
1706 elv-completions-dir
1707 fish-completions-dir
1708 nu-completions-dir))
1709 (copy-file "yazi-boot/completions/yazi.bash"
1710 (string-append bash-completions-dir "/yazi"))
1711 (copy-file "yazi-boot/completions/yazi.elv"
1712 (string-append elv-completions-dir "/yazi"))
1713 (copy-file "yazi-boot/completions/yazi.fish"
1714 (string-append fish-completions-dir "/yazi.fish"))
1715 (copy-file "yazi-boot/completions/yazi.nu"
1716 (string-append nu-completions-dir "/yazi.nu")))))
1717 (add-after 'install-extra 'wrap-required
1718 (lambda _
1719 (wrap-program (string-append #$output "/bin/yazi")
1720 `("PATH" ":" prefix
1721 (,(string-append #$(this-package-input "file") "/bin")))))))))
1722 (native-inputs (list pkg-config))
1723 (inputs (cons* file
1724 jemalloc
1725 lua-5.5
1726 oniguruma
1727 (cargo-inputs 'yazi)))
1728 (home-page "https://yazi-rs.github.io")
1729 (synopsis "Terminal file manager based on async I/O")
1730 (description
1731 "Yazi (duck in Chinese) is a terminal file manager based on non-blocking
1732async I/O. It aims to provide an efficient, user-friendly, and customizable
1733file management experience.")
1734 (license (list license:expat))))
1735
1736(define-public xfe
1737 (package
1738 (name "xfe")
1739 (version "1.44")
1740 (source
1741 (origin
1742 (method url-fetch)
1743 (uri
1744 (string-append "mirror://sourceforge/xfe/xfe/" version "/"
1745 "xfe-" version ".tar.xz"))
1746 (sha256
1747 (base32 "1dihq03jqjllb69r78d9ihjjadi39v7sgzdf68qpxz5xhp8i8k2r"))))
1748 (build-system gnu-build-system)
1749 (arguments
1750 `(#:phases
1751 (modify-phases %standard-phases
1752 (add-after 'unpack 'patch-potfiles
1753 (lambda _
1754 ;; To add missing entry 'intl/plural.c' to potfiles list.
1755 ;; Refer to https://sourceforge.net/p/xfe/bugs/257/
1756 (substitute* "po/POTFILES.in"
1757 (("src/help.h")
1758 (string-append "src/help.h\n"
1759 "intl/plural.c")))))
1760 (add-after 'unpack 'patch-bin-dirs
1761 (lambda* (#:key inputs #:allow-other-keys)
1762 (let* ((bash (assoc-ref inputs "bash"))
1763 (coreutils (assoc-ref inputs "coreutils"))
1764 (findutils (assoc-ref inputs "findutils"))
1765 (file-prog (assoc-ref inputs "file")))
1766 (with-directory-excursion "src"
1767 (substitute* '("FilePanel.cpp" "help.h" "SearchPanel.cpp"
1768 "startupnotification.cpp" "xfeutils.cpp"
1769 "../st/config.h")
1770 (("/bin/sh" file) (string-append bash file))
1771 (("/bin/ls" file) (string-append coreutils file))
1772 (("/usr(/bin/du)" _ file) (string-append coreutils file))
1773 (("/usr(/bin/sort)" _ file) (string-append coreutils file))
1774 (("/usr(/bin/cut)" _ file) (string-append coreutils file))
1775 (("/usr(/bin/xargs)" _ file) (string-append findutils file))
1776 (("/usr(/bin/file)" _ file) (string-append file-prog file))))
1777 #t)))
1778 (add-after 'unpack 'patch-share-dirs
1779 (lambda* (#:key outputs #:allow-other-keys)
1780 (let* ((out (assoc-ref outputs "out"))
1781 (share (string-append out "/share"))
1782 (xfe (string-append share "/xfe")))
1783 (with-directory-excursion "src"
1784 (substitute* '("foxhacks.cpp" "help.h" "xfedefs.h"
1785 "XFileExplorer.cpp")
1786 (("/(usr|opt)(/local)?/share") share)
1787 (("~/.config/xfe") xfe)))
1788 #t))))))
1789 (native-inputs
1790 (list intltool pkg-config))
1791 (inputs
1792 `(("bash" ,bash)
1793 ("coreutils" ,coreutils)
1794 ("file" ,file)
1795 ("findutils" ,findutils)
1796 ("fox" ,fox)
1797 ("freetype" ,freetype)
1798 ("x11" ,libx11)
1799 ("xcb" ,libxcb)
1800 ("xcb-util" ,xcb-util)
1801 ("xft" ,libxft)
1802 ("xrandr" ,libxrandr)))
1803 (synopsis "File Manager for X-Based Graphical Systems")
1804 (description "XFE (X File Explorer) is a file manager for X. It is based on
1805the popular but discontinued, X Win Commander. It aims to be the file manager
1806of choice for all light thinking Unix addicts!")
1807 (home-page "http://roland65.free.fr/xfe/")
1808 (license license:gpl2+)))
1809
1810(define-public hddtemp
1811 (package
1812 (name "hddtemp")
1813 ;; <https://savannah.nongnu.org/projects/hddtemp/> advertises the project as
1814 ;; ‘orphaned/unmaintained’. Use a maintained fork/continuation.
1815 (version "0.4.3")
1816 (source
1817 (origin
1818 (method git-fetch)
1819 (uri (git-reference
1820 (url "https://github.com/vitlav/hddtemp")
1821 (commit (string-append "v" version))))
1822 (file-name (git-file-name name version))
1823 (sha256
1824 (base32 "04kylb2ka0jimi238zpfq1yii2caidpmj3ck51rvxz03y5lpq8fw"))))
1825 (build-system gnu-build-system)
1826 (arguments
1827 `(#:configure-flags (list (string-append
1828 "--with-db-path="
1829 (assoc-ref %outputs "out")
1830 "/share/hddtemp/hddtemp.db"))
1831 #:phases
1832 (modify-phases %standard-phases
1833 (add-before 'bootstrap 'delete-autogen.sh
1834 (lambda _
1835 ;; The default 'bootstrap phase works better.
1836 (delete-file "autogen.sh")))
1837 (add-after 'install 'install-db
1838 (lambda* (#:key outputs #:allow-other-keys)
1839 (let ((out (assoc-ref outputs "out")))
1840 (install-file "data/hddtemp.db"
1841 (string-append out "/share/hddtemp"))))))))
1842 (native-inputs
1843 `(("autoconf" ,autoconf)
1844 ("automake" ,automake)
1845 ("gettext" ,gettext-minimal)))
1846 (home-page "https://github.com/vitlav/hddtemp")
1847 (synopsis "Report the temperature of hard drives from S.M.A.R.T. information")
1848 (description "@command{hddtemp} is a small utility that gives you the
1849temperature of your hard drive by reading S.M.A.R.T. information (for drives
1850that support this feature).")
1851 (license license:gpl2+)))
1852
1853(define-public memkind
1854 (package
1855 (name "memkind")
1856 (version "1.13.0")
1857 (source (origin
1858 (method git-fetch)
1859 (uri (git-reference
1860 (url "https://github.com/memkind/memkind")
1861 (commit (string-append "v" version))))
1862 (file-name (git-file-name name version))
1863 (sha256
1864 (base32 "0zbil6xqmsrnh773ihxyfna6pvvxv3kczdb3g863ssflwwvv7h4w"))))
1865 (build-system gnu-build-system)
1866 (inputs
1867 (list ;; memkind patched jemalloc to add je_arenalookupx,
1868 ;; je_check_reallocatex--i.e. they forked jemalloc.
1869 ;("jemalloc" ,jemalloc)
1870 ndctl numactl))
1871 (native-inputs
1872 (list autoconf automake libtool))
1873 (arguments
1874 `(#:configure-flags
1875 (list (string-append "--docdir=" (assoc-ref %outputs "out")
1876 "/share/doc/" ,name "-" ,version))
1877 #:parallel-build? #f ;fails otherwise
1878 #:tests? #f ; Tests require a NUMA-enabled system.
1879 #:phases
1880 (modify-phases %standard-phases
1881 (add-before 'build 'autogen-jemalloc
1882 (lambda _
1883 (with-directory-excursion "jemalloc"
1884 (substitute* "Makefile.in"
1885 (("/bin/sh") (which "sh")))
1886 (invoke "autoconf")
1887 (substitute* "configure"
1888 (("/bin/sh") (which "sh")))))))))
1889 (home-page "https://github.com/memkind/memkind")
1890 (synopsis "Heap manager with memory kinds (for NUMA)")
1891 (description "This package provides a user-extensible heap manager
1892built on top of jemalloc which enables control of memory characteristics
1893and a partitioning of the heap between kinds of memory (for NUMA).")
1894 (license license:bsd-3)))
1895
1896(define-public mmc-utils
1897 (let ((commit "3969aa4804edb8aed7bcb3c958e49d0c7388b067")
1898 (revision "1"))
1899 (package
1900 (name "mmc-utils")
1901 (version (git-version "0.1" revision commit))
1902 (source
1903 (origin
1904 (method git-fetch)
1905 (uri (git-reference
1906 (url "https://git.kernel.org/pub/scm/utils/mmc/mmc-utils.git")
1907 (commit commit)))
1908 (file-name (git-file-name name version))
1909 (sha256
1910 (base32 "0pvcm685x63afvp8795jd4vn4zs8psh8bs6j2yvk1kgrawpyk10g"))))
1911 (build-system gnu-build-system)
1912 (arguments
1913 `(#:tests? #f ; No test suite
1914 #:make-flags (list (string-append "prefix=" (assoc-ref %outputs "out"))
1915 (string-append "CC=" ,(cc-for-target)))
1916 #:phases
1917 (modify-phases %standard-phases
1918 ;; No ./configure script
1919 (delete 'configure)
1920 ;; The Makefile's "install-man" target is a no-op.
1921 (add-after 'install 'install-doc
1922 (lambda* (#:key outputs #:allow-other-keys)
1923 (let* ((out (assoc-ref outputs "out"))
1924 (man1 (string-append out "/share/man/man1")))
1925 (install-file "man/mmc.1" man1)))))))
1926 (home-page
1927 "https://www.kernel.org/doc/html/latest/driver-api/mmc/mmc-tools.html")
1928 (synopsis "Configure MMC storage devices from userspace")
1929 (description "mmc-utils is a command-line tool for configuring and
1930inspecting MMC storage devices from userspace.")
1931 (license license:gpl2))))
1932
1933(define-public duc
1934 (package
1935 (name "duc")
1936 (version "1.4.5")
1937 (source (origin
1938 (method git-fetch)
1939 (uri (git-reference
1940 (url "https://github.com/zevv/duc")
1941 (commit version)))
1942 (file-name (git-file-name name version))
1943 (sha256
1944 (base32
1945 "0sglcn38rgn6y3m5ahngizyn3x2rzhqjphs7g0ppnlinkz56rcv4"))
1946 (patches
1947 (search-patches "duc-fix-test-sh.patch"))))
1948 (build-system gnu-build-system)
1949 (arguments
1950 (list
1951 #:phases
1952 #~(modify-phases %standard-phases
1953 (add-after 'unpack 'patch
1954 (lambda* (#:key outputs #:allow-other-keys)
1955 (let* ((out (assoc-ref outputs "out")))
1956 (substitute* "src/duc/cmd-ui.c"
1957 (("ncursesw/ncurses.h") "ncurses.h"))
1958 (substitute* "examples/index.cgi"
1959 (("/usr/local/bin/duc")
1960 (string-append out "/bin/duc"))))))
1961 (add-after 'install 'install-examples
1962 (lambda* (#:key outputs #:allow-other-keys)
1963 (let* ((out (assoc-ref outputs "out"))
1964 (doc (string-append out "/share/doc/" #$name "-" #$version)))
1965 (copy-recursively "examples" (string-append doc "/examples")))))
1966 (replace 'check
1967 (lambda* (#:key tests? #:allow-other-keys)
1968 (substitute* "test.sh"
1969 ;; Keep the test logs where --keep-failed can see them.
1970 (("^(DUC_TEST_DIR=).*" _ assign)
1971 (format #f "~a~a/test-directory~%" assign (getcwd)))
1972 ;; XXX ‘actual size’ differed on my system (a consistent 348160
1973 ;; bytes where the tests expect 540672). However, the ‘apparent
1974 ;; size’ matches, as does the actual test output. Good enough…?
1975 ((" [0-9]*B actual") " [0-9]*B actual"))
1976 (when tests?
1977 (invoke "./test.sh"))))))) ; no ‘check’ target
1978 (native-inputs
1979 (list autoconf automake libtool pkg-config))
1980 (inputs
1981 (list cairo pango tokyocabinet ncurses))
1982 (home-page "https://duc.zevv.nl")
1983 (synopsis "Library and suite of tools for inspecting disk usage")
1984 (description "Duc maintains a database of accumulated sizes of
1985directories of the file system, and allows you to query this database with
1986some tools, or create fancy graphs showing you where your bytes are.
1987
1988Duc comes with console utilities, ncurses and X11 user interfaces and a CGI
1989wrapper for disk usage querying and visualisation.")
1990 (license license:lgpl3+)))
1991
1992(define-public qdirstat
1993 (package
1994 (name "qdirstat")
1995 (version "1.9")
1996 (source (origin
1997 (method git-fetch)
1998 (uri (git-reference
1999 (url "https://github.com/shundhammer/qdirstat")
2000 (commit version)))
2001 (file-name (git-file-name name version))
2002 (sha256
2003 (base32
2004 "09amjkg0h097kahscap59imyg4wpjy43lkaiqw60ady3s6b6c1x7"))))
2005 (build-system qt-build-system)
2006 (arguments
2007 (list
2008 #:tests? #f
2009 #:modules '((guix build qt-build-system)
2010 ((guix build gnu-build-system) #:prefix gnu:)
2011 (guix build utils))
2012 #:phases
2013 #~(modify-phases %standard-phases
2014 (replace 'configure
2015 (lambda _
2016 (system* "qmake" (string-append "INSTALL_PREFIX=" #$output))))
2017 (replace 'build (assoc-ref gnu:%standard-phases 'build))
2018 (replace 'install (assoc-ref gnu:%standard-phases 'install))
2019 (add-after 'install 'wrap
2020 (lambda _
2021 (wrap-program (string-append #$output
2022 "/bin/qdirstat-cache-writer")
2023 `("PERL5LIB" ":" prefix
2024 (,(string-append
2025 #$(this-package-input "perl-uri-escape")
2026 "/lib/perl5/site_perl")))))))))
2027 (inputs
2028 (list bash-minimal
2029 perl
2030 perl-uri-escape
2031 qtbase-5
2032 qtwayland-5
2033 zlib))
2034 (home-page "https://github.com/shundhammer/qdirstat")
2035 (synopsis "Storage utilisation visualization tool")
2036 (description
2037 "QDirStat is a graphical application to show where your disk space has
2038gone and to help you to clean it up.")
2039 (license license:gpl2)))
2040
2041(define-public nwipe
2042 (package
2043 (name "nwipe")
2044 (version "0.36")
2045 (source
2046 (origin
2047 (method git-fetch)
2048 (uri (git-reference
2049 (url "https://github.com/martijnvanbrummelen/nwipe")
2050 (commit (string-append "v" version))))
2051 (file-name (git-file-name name version))
2052 (sha256
2053 (base32 "075zwakv3lva46v6wab00l5x7bs2k73mzzhwlbvm839r8a6gm0dh"))))
2054 (build-system gnu-build-system)
2055 (arguments
2056 (list #:phases
2057 #~(modify-phases %standard-phases
2058 (add-after 'install 'wrap
2059 (lambda* (#:key inputs outputs #:allow-other-keys)
2060 (wrap-program (search-input-file outputs "bin/nwipe")
2061 (list "PATH" ":" 'prefix
2062 (map (lambda (p) (dirname (search-input-file inputs p)))
2063 '("sbin/dmidecode"
2064 "sbin/hdparm"
2065 "sbin/smartctl")))))))))
2066 (inputs
2067 (list bash-minimal
2068 dmidecode
2069 hdparm
2070 libconfig
2071 ncurses
2072 parted
2073 smartmontools))
2074 (native-inputs
2075 (list autoconf automake libtool pkg-config))
2076 (home-page "https://github.com/martijnvanbrummelen/nwipe")
2077 (synopsis "Secure disk wiping utility")
2078 (description
2079 "@command{nwipe} securely erases disks using a variety of methods to
2080ensure the data cannot be recovered. It can wipe multiple drives in parallel
2081and can be used noninteractively or with a text-based user interface.")
2082 (license
2083 (list license:gpl2
2084 license:bsd-3 ; mt19937ar-cok
2085 license:public-domain)))) ; {isaac_rand,PDFGen}
2086
2087(define-public wipe
2088 (package
2089 (name "wipe")
2090 (version "2.3.1")
2091 (source (origin
2092 (method url-fetch)
2093 (uri (string-append "mirror://sourceforge/wipe/wipe/" version
2094 "/wipe-" version ".tar.bz2"))
2095 (sha256
2096 (base32
2097 "180snqvh6k6il6prb19fncflf2jcvkihlb4w84sbndcv1wvicfa6"))))
2098 (build-system gnu-build-system)
2099 (arguments
2100 (list
2101 #:tests? #f ;no tests
2102 #:phases
2103 #~(modify-phases %standard-phases
2104 (add-after 'unpack 'patch-makefile
2105 (lambda _
2106 (substitute* "Makefile.in"
2107 ;; The Makefile.in uses install -o root, but during the
2108 ;; build there is no root user, so if we leave that in,
2109 ;; the build fails with the following error:
2110 ;; /gnu/[...]/install: invalid user ‘root’
2111 (("-o root") "")
2112 ;; It's up to the distribution to strip the binaries or
2113 ;; not.
2114 (("\\$\\(INSTALL_BIN\\) -s ")
2115 "$(INSTALL_BIN) "))))
2116 (add-after 'unpack 'force-autotools-bootstrap
2117 (lambda _
2118 ;; Rebuild the build system scripts, as the ones in bundles are
2119 ;; very old and do not support all the options used by Guix.
2120 (delete-file "configure"))))))
2121 (native-inputs (list autoconf automake libtool))
2122 (home-page "https://wipe.sourceforge.net")
2123 (synopsis "Secure file/block device wiping utility")
2124 (description
2125 "Wipe can erase files and block devices securely. To work properly it
2126relies on several assumptions like having the block device write the correct
2127sectors, etc. For files it also doesn't work on log-structured file systems
2128such as F2FS, JFFS, LogFS, etc. You should @emph{not} trust @command{wipe} to
2129work as advertised until you have manually verified that all its assumption
2130hold true on your system. To overwrite data it uses the Mersenne Twister
2131pseudo-random number generator (PRNG) that is seeded with @file{/dev/urandom}
2132or, if unavailable, @file{/dev/random}.")
2133 (license license:gpl2+)))