gnu: gpart: Fix typo in description.
[jackhill/guix/guix.git] / gnu / packages / disk.scm
index 07ea1c9..bf0897b 100644 (file)
@@ -2,8 +2,8 @@
 ;;; Copyright © 2012, 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2015 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2016, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2016, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018 Vasile Dumitrascu <va511e@yahoo.com>
 ;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2018 Rutger Helling <rhelling@mykolab.com>
-;;; Copyright © 2018, 2019 Pierre Neidhardt <mail@ambrevar.xyz>
+;;; Copyright © 2018, 2019, 2020 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2019 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2020 Pkill -9 <pkill9@runbox.com>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
+;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
+;;; Copyright © 2021 Michael Rohleder <mike@rohleder.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages elf)
+  #:use-module (gnu packages file-systems)
+  #:use-module (gnu packages file)
+  #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages graphics)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages linux)
@@ -61,6 +67,7 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
+  #:use-module (gnu packages samba)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages swig)
@@ -70,7 +77,9 @@
   #:use-module (gnu packages w3m)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
+  #:use-module (gnu packages xorg)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system go)
   #:use-module (guix build-system python)
   #:use-module (guix build-system trivial)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
-  #:use-module (guix packages))
+  #:use-module (guix packages)
+  #:use-module (guix utils))
+
+(define-public bcache-tools
+  ;; The 1.1 release is a year old and missing new features & documentation.
+  (let ((commit "096d205a9f1be8540cbc5a468c0da8203023de70")
+        (revision "0"))
+    (package
+      (name "bcache-tools")
+      (version (git-version "1.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url (string-append "https://git.kernel.org/pub/scm/"
+                                   "linux/kernel/git/colyli/bcache-tools.git"))
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0r0vwg4vacz5zgsafk360xn7gi2scy01c79mkmjrdyxjfij5z3iy"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:tests? #f                    ; no test suite
+         #:make-flags
+         (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
+               (string-append "UDEVLIBDIR=" (assoc-ref %outputs "out")
+                              "/lib/udev")
+               (string-append "DRACUTLIBDIR=" (assoc-ref %outputs "out")
+                              "/lib/dracut")
+               (string-append "CC=" ,(cc-for-target)))
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'configure)          ; no configure script
+           (add-before 'install 'fix-hard-coded-file-names
+             (lambda _
+               ;; Some rules still hard-code /usr.
+               (substitute* "Makefile"
+                 (("/usr") "${PREFIX}"))
+               #t))
+           (add-before 'install 'create-target-directories
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out")))
+                 (for-each (lambda (dir)
+                             (mkdir-p (string-append out dir)))
+                           (list "/lib/udev/rules.d"
+                                 "/sbin"
+                                 "/share/man/man8"))
+                 #t))))))
+      (native-inputs
+       `(("pkg-config" ,pkg-config)))
+      (inputs
+       `(("util-linux:lib" ,util-linux "lib"))) ; libblkid
+      (home-page "https://bcache.evilpiepirate.org")
+      (synopsis "Tools for the Linux kernel block layer cache")
+      (description
+       "This package contains user-space utilities to create and inspect bcache
+partitions.  It's rather minimal as bcache is designed to work well without
+configuration on any system.
+
+Linux's @acronym{bcache, block layer cache} lets one or more fast block devices,
+such as flash-based @acronym{SSDs, solid state drives}, to act as a cache for
+one or more slower (and inexpensive) devices, such as hard disk drives or
+redundant storage arrays.  In fact, bcache intends to be a superior alternative
+to battery-backed RAID controllers.
+
+Bcache is designed around the performance characteristics of SSDs and tries to
+minimize write inflation.  It's file-system agnostic and does both write-through
+and write-back caching.")
+      (license license:gpl2))))
+
+(define-public udevil
+  (package
+    (name "udevil")
+    (version "0.4.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/IgnorantGuru/udevil")
+         (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0x9mjr9abvbxzfa9mrip5264iz1qxvsl01k3ybz95q4a7xl4jcb3"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (list
+        "--disable-systemd"
+        (string-append "--sysconfdir="
+                       (assoc-ref %outputs "out")
+                       "/etc")
+        ;; udevil expects these programs to be run with uid set as root.
+        ;; user has to manually add these programs to setuid-programs.
+        ;; mount and umount are default setuid-programs in guix system.
+        "--with-mount-prog=/run/setuid-programs/mount"
+        "--with-umount-prog=/run/setuid-programs/umount"
+        "--with-losetup-prog=/run/setuid-programs/losetup"
+        "--with-setfacl-prog=/run/setuid-programs/setfacl")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-root-reference
+           (lambda _
+             (substitute* "src/Makefile.in"
+               (("-o root -g root") ""))
+             #t))
+         (add-after 'unpack 'patch-udevil-reference
+           ;; udevil expects itself to be run with uid set as root.
+           ;; devmon also expects udevil to be run with uid set as root.
+           ;; user has to manually add udevil to setuid-programs.
+           (lambda _
+             (substitute* "src/udevil.c"
+               (("/usr/bin/udevil") "/run/setuid-programs/udevil"))
+             (substitute* "src/devmon"
+               (("`which udevil 2>/dev/null`") "/run/setuid-programs/udevil"))
+             #t)))))
+    (native-inputs
+     `(("intltool" ,intltool)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("cifs-utils" ,cifs-utils)
+       ("curlftpfs" ,curlftpfs)
+       ("eudev" ,eudev)
+       ("fakeroot" ,fakeroot)
+       ("glib" ,glib)
+       ("sshfs" ,sshfs)))
+    (synopsis "Device and file system manager")
+    (description "udevil is a command line program that mounts and unmounts
+removable devices without a password, shows device info, and monitors device
+changes.  It can also mount ISO files, NFS, SMB, FTP, SSH and WebDAV URLs, and
+tmpfs/ramfs filesystems.")
+    (home-page "https://ignorantguru.github.io/udevil/")
+    (license license:gpl3+)))
 
 (define-public parted
   (package
     (name "parted")
-    (version "3.3")
+    (version "3.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/parted/parted-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "0i1xp367wpqw75b20c3jnism3dg3yqj4a7a22p2jb1h1hyyv9qjp"))))
+                "0hjkv84x1bs2qqyx1fnzjqyyqrhv7kpdbq9bgydmi99d8wi80ag1"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
        ;; For the tests.
        ("e2fsprogs" ,e2fsprogs)
        ("perl" ,perl)
-       ("python" ,python-2)
+       ("python-wrapper" ,python-wrapper)
        ("util-linux" ,util-linux)))
     (home-page "https://www.gnu.org/software/parted/")
     (synopsis "Disk partition editor")
@@ -161,17 +302,69 @@ fdisk.  fdisk is used for the creation and manipulation of disk partition
 tables, and it understands a variety of different formats.")
     (license license:gpl3+)))
 
+(define-public gpart
+  ;; The latest (0.3) release is from 2015 and is missing a crash fix.
+  (let ((commit "ec03350a01ad69708b5a3e2d47b8e002b0eba6c9")
+        (revision "0"))
+    (package
+      (name "gpart")
+      (version (git-version "0.3" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/baruch/gpart")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1dassswliaiwhhmx7yz540yyxgk53fvg672dbvgc5q0v6cqrh5jx"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:configure-flags
+         (list (string-append "--docdir=" (assoc-ref %outputs "out") "/share/doc/"
+                              ,name "-" ,version))
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'skip-premature-configuration
+             (lambda _
+               (substitute* "autogen.sh"
+                 (("\\./configure") "")))))))
+      (native-inputs
+       `(("autoconf" ,autoconf)
+         ("automake" ,automake)))
+      (home-page "https://github.com/baruch/gpart")
+      (synopsis "Guess and recover PC-style partition tables")
+      (description
+       "Gpart tries to guess the partitions on a PC-style, MBR-partitioned disk
+after they have been inadvertently deleted or the primary partition table at
+sector 0 damaged.  In both cases, the contents of these partitions still exist
+on the disk but the operating system cannot access them.
+
+Gpart ignores the partition table and scans each sector of the device or image
+file for several known file system and partition types.  Only partitions which
+have been formatted in some way can be recognized.  Several file system guessing
+modules are built in; more can be written and loaded at run time.
+
+The guessed table can be restored manually, for example with @command{fdisk},
+written to a file, or---if you firmly believe it's entirely correct---directly
+to disk.
+
+It should be stressed that gpart does a very heuristic job.  It can easily be
+right in its guesswork but it can also be terribly wrong.  Never believe its
+output without any plausibility checks.")
+      (license license:gpl2+))))
+
 (define-public gptfdisk
   (package
     (name "gptfdisk")
-    (version "1.0.5")
+    (version "1.0.7")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://sourceforge/gptfdisk/gptfdisk/"
                           version "/gptfdisk-" version ".tar.gz"))
       (sha256
-       (base32 "0bybgp30pqxb6x5krxazkq4drca0gz4inxj89fpyr204rn3kjz8f"))))
+       (base32 "1h1871gwlq05gdc2wym98ghfmq6pn5lh8g5cqy3r49svz2vh8h3m"))))
     (build-system gnu-build-system)
     (inputs
      `(("gettext" ,gettext-minimal)
@@ -222,6 +415,8 @@ scheme.")
       (sha256
        (base32 "0qqh38izl5ppap9a5izf3hijh94k65s3zbfkczd4b7x04syqwlyf"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags (list (string-append "CXX=" ,(cxx-for-target)))))
     (home-page "https://www.gnu.org/software/ddrescue/ddrescue.html")
     (synopsis "Data recovery utility")
     (native-inputs `(("lzip" ,lzip)))
@@ -235,23 +430,26 @@ to recover data more efficiently by only reading the necessary blocks.")
 (define-public dosfstools
   (package
     (name "dosfstools")
-    (version "4.1")
+    (version "4.2")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/" name "/" name
-                           "/releases/download/v" version "/"
-                           name "-" version ".tar.xz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/dosfstools/dosfstools")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0wy13i3i4x2bw1hf5m4fd0myh61f9bcrs035fdlf6gyc1jksrcp6"))))
+        (base32 "1xygsixmmc9l7drxylggnzkqqiks8zmlsbhg3z723ii2ak94236s"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list "--enable-compat-symlinks")
        #:make-flags (list (string-append "PREFIX=" %output)
                           "CC=gcc")))
     (native-inputs
-     `(("xxd" ,xxd))) ; for tests
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ;; For tests.
+       ("xxd" ,xxd)))
     (home-page "https://github.com/dosfstools/dosfstools")
     (synopsis "Utilities for making and checking MS-DOS FAT file systems")
     (description
@@ -353,15 +551,15 @@ and can dramatically shorten the lifespan of the drive if left unchecked.")
 (define-public gparted
   (package
     (name "gparted")
-    (version "1.1.0")
+    (version "1.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/gparted/gparted/gparted-"
                            version "/gparted-" version ".tar.gz"))
        (sha256
-        (base32 "092rgwjh1825fal6v3yafq2wr0i61hh0a2n0j4296zn0zdx7pzp2"))))
-    (build-system gnu-build-system)
+        (base32 "06f72hqx5jf2irzsmi7lgpxxj38ncixh0acb4307wyjd4mfp343c"))))
+    (build-system glib-or-gtk-build-system)
     (arguments
       ;; Tests require access to paths outside the build container, such
       ;; as '/dev/disk/by-id'
@@ -410,20 +608,20 @@ systems.  Output format is completely customizable.")
 (define-public f3
   (package
     (name "f3")
-    (version "7.2")
+    (version "8.0")
     (source
      (origin
       (method git-fetch)
       (uri (git-reference
-            (url "https://github.com/AltraMayor/f3.git")
+            (url "https://github.com/AltraMayor/f3")
             (commit (string-append "v" version))))
       (file-name (git-file-name name version))
       (sha256
-       (base32 "1iwdg0r4wkgc8rynmw1qcqz62l0ldgc8lrazq33msxnk5a818jgy"))))
+       (base32 "17l5vspfcgfbkqg7bakp3gql29yb05gzawm8n3im30ilzdr53678"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f                      ; no check target
-       #:make-flags (list "CC=gcc"
+     `(#:tests? #f                      ; no check target
+       #:make-flags (list (string-append "CC=" ,(cc-for-target))
                           (string-append "PREFIX=" %output))
        #:phases
        (modify-phases %standard-phases
@@ -448,16 +646,16 @@ a card with a smaller capacity than stated.")
 (define-public python-parted
   (package
     (name "python-parted")
-    (version "3.11.2")
+    (version "3.11.7")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/dcantrell/pyparted.git")
+             (url "https://github.com/dcantrell/pyparted")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0r6916n3w4vldxrq30a3z2iagvxgly4vfmlidjm65vwqnyv17bvn"))))
+        (base32 "01193fmkss9icjvqpw85szpk8ld1pnha7p9kqm7mpwk6rc6gi2m3"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -483,21 +681,18 @@ a card with a smaller capacity than stated.")
     (description "This package provides @code{parted} bindings for Python.")
     (license license:gpl2+)))
 
-(define-public python2-parted
-  (package-with-python2 python-parted))
-
 (define-public duperemove
   (package
     (name "duperemove")
-    (version "0.11.1")
+    (version "0.11.2")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/markfasheh/duperemove.git")
+             (url "https://github.com/markfasheh/duperemove")
              (commit (string-append "v" version))))
        (sha256
-        (base32 "1scz76pvpljvrpfn176125xwaqwyy4pirlm11sc9spb2hyzknw2z"))
+        (base32 "1a87mka2sfzhbch2jip6wlvvs0glxq9lqwmyrp359d1rmwwmqiw9"))
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
@@ -511,7 +706,9 @@ a card with a smaller capacity than stated.")
        (modify-phases %standard-phases
          (delete 'configure))           ; no configure script
        #:make-flags (list (string-append "PREFIX=" %output)
-                          "CC=gcc")))
+                          (string-append "CC=" ,(cc-for-target))
+                          ;; Set to <next release>dev by default.
+                          (string-append "VER=" ,version))))
     (home-page "https://github.com/markfasheh/duperemove")
     (synopsis "Tools for de-duplicating file system data")
     (description "Duperemove is a simple tool for finding duplicated extents
@@ -620,16 +817,16 @@ passphrases.")
 (define-public ndctl
   (package
     (name "ndctl")
-    (version "67")
+    (version "71.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://github.com/pmem/ndctl.git")
+                    (url "https://github.com/pmem/ndctl")
                     (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "076jgw1g2aafqgnq705in0wnabysqk46dq5yxdv1qzgjmyhka39n"))))
+                "1vi61bm9wyawklswh9mj9zdp28ar7r97qckwnhgiyila73fb3jx2"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("asciidoc" ,asciidoc)
@@ -721,7 +918,7 @@ to create devices with respective mappings for the ATARAID sets discovered.")
 (define-public libblockdev
   (package
     (name "libblockdev")
-    (version "2.23")
+    (version "2.25")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/storaged-project/"
@@ -729,10 +926,19 @@ to create devices with respective mappings for the ATARAID sets discovered.")
                                   version "-1/libblockdev-" version ".tar.gz"))
               (sha256
                (base32
-                "15c7g2gbkahmy8c6677pvbvblan5h8jxcqqmn6nlvqwqynq2mkjm"))))
+                "0s0nazkpzpn4an00qghjkk9n7gdm5a8dqfr5hfnlk5mk5lma8njm"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-configuration-directory
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+              (substitute* "src/lib/blockdev.c"
+               (("/etc/libblockdev/conf.d/" path) (string-append out path)))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
+     `(("gobject-introspection" ,gobject-introspection)
+       ("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)
        ("util-linux" ,util-linux)))
     (inputs
@@ -742,7 +948,6 @@ to create devices with respective mappings for the ATARAID sets discovered.")
        ("dmraid" ,dmraid)
        ("eudev" ,eudev)
        ("glib" ,glib)
-       ("gobject-introspection" ,gobject-introspection)
        ("kmod" ,kmod)
        ("libbytesize" ,libbytesize)
        ("libyaml" ,libyaml)
@@ -767,7 +972,7 @@ LVM D-Bus API).")
 (define-public rmlint
   (package
     (name "rmlint")
-    (version "2.9.0")
+    (version "2.10.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -776,7 +981,7 @@ LVM D-Bus API).")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1b5cziam14h80xrfb285fmfrzz2rligxcpsq1xsig14xf4l2875i"))))
+                "15xfkcw1bkfyf3z8kl23k3rlv702m0h7ghqxvhniynvlwbgh6j2x"))))
     (build-system scons-build-system)
     (arguments
      `(#:scons ,scons-python2
@@ -839,7 +1044,7 @@ on your file system and offers to remove it.  @command{rmlint} can find:
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://github.com/gokcehan/lf.git")
+                    (url "https://github.com/gokcehan/lf")
                     (commit (string-append "r" version))))
               (file-name (git-file-name name version))
               (sha256
@@ -858,3 +1063,156 @@ written in Go.  It is heavily inspired by ranger with some missing and
 extra features.  Some of the missing features are deliberately omitted
 since they are better handled by external tools.")
     (license license:expat)))
+
+(define-public xfe
+  (package
+    (name "xfe")
+    (version "1.43.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://sourceforge/xfe/xfe/" version "/"
+                       "xfe-" version ".tar.gz"))
+       (sha256
+        (base32 "1fl51k5jm2vrfc2g66agbikzirmp0yb0lqhmsssixfb4mky3hpzs"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-bin-dirs
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let* ((bash (assoc-ref inputs "bash"))
+                    (coreutils (assoc-ref inputs "coreutils"))
+                    (findutils (assoc-ref inputs "findutils"))
+                    (file-prog (assoc-ref inputs "file")))
+               (with-directory-excursion "src"
+                 (substitute* '("FilePanel.cpp" "help.h" "SearchPanel.cpp"
+                                "startupnotification.cpp" "xfeutils.cpp"
+                                "../st/config.h")
+                   (("/bin/sh" file) (string-append bash file))
+                   (("/bin/ls" file) (string-append coreutils file))
+                   (("/usr(/bin/du)" _ file) (string-append coreutils file))
+                   (("/usr(/bin/sort)" _ file) (string-append coreutils file))
+                   (("/usr(/bin/cut)" _ file) (string-append coreutils file))
+                   (("/usr(/bin/xargs)" _ file) (string-append findutils file))
+                   (("/usr(/bin/file)" _ file) (string-append file-prog file))))
+               #t)))
+         (add-after 'unpack 'patch-share-dirs
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (share (string-append out "/share"))
+                    (xfe (string-append share "/xfe")))
+               (with-directory-excursion "src"
+                 (substitute* '("foxhacks.cpp" "help.h" "xfedefs.h"
+                                "XFileExplorer.cpp")
+                   (("/(usr|opt)(/local)?/share") share)
+                   (("~/.config/xfe") xfe)))
+               #t))))))
+    (native-inputs
+     `(("intltool" ,intltool)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("bash" ,bash)
+       ("coreutils" ,coreutils)
+       ("file" ,file)
+       ("findutils" ,findutils)
+       ("fox" ,fox)
+       ("freetype" ,freetype)
+       ("x11" ,libx11)
+       ("xcb" ,libxcb)
+       ("xcb-util" ,xcb-util)
+       ("xft" ,libxft)
+       ("xrandr" ,libxrandr)))
+    (synopsis "File Manager for X-Based Graphical Systems")
+    (description "XFE (X File Explorer) is a file manager for X.  It is based on
+the popular but discontinued, X Win Commander.  It aims to be the file manager
+of choice for all light thinking Unix addicts!")
+    (home-page "http://roland65.free.fr/xfe/")
+    (license license:gpl2+)))
+
+(define-public hddtemp
+  (package
+    (name "hddtemp")
+    (version "0.3-beta15")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://savannah/hddtemp/hddtemp-"
+                                  version
+                                  ".tar.bz2"))
+              (sha256
+               (base32
+                "0nzgg4nl8zm9023wp4dg007z6x3ir60rwbcapr9ks2al81c431b1"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags (list (string-append
+                                "--with-db-path="
+                                (assoc-ref %outputs "out")
+                                "/share/hddtemp/hddtemp.db"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-db
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((target (string-append (assoc-ref outputs "out")
+                                          "/share/hddtemp/hddtemp.db")))
+               (mkdir-p (dirname target))
+               (copy-file (assoc-ref inputs "db") target)))))))
+    (inputs
+     `(("db" ,(origin
+                (method url-fetch)
+                (uri "mirror://savannah/hddtemp/hddtemp.db")
+                (sha256
+                 (base32 "1fr6qgns6qv7cr40lic5yqwkkc7yjmmgx8j0z6d93csg3smzhhya"))))))
+    (home-page "https://savannah.nongnu.org/projects/hddtemp/")
+    (synopsis "Report the temperature of hard drives from S.M.A.R.T. information")
+    (description "@command{hddtemp} is a small utility that gives you the
+temperature of your hard drive by reading S.M.A.R.T. information (for drives
+that support this feature).")
+    (license license:gpl2+)))
+
+(define-public memkind
+  (package
+    (name "memkind")
+    (version "1.11.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/memkind/memkind")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0w5hws12l167mbr4n6a6fl0mhf8mci61fsn55lh2cxz33f7q8n2x"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(;; memkind patched jemalloc to add je_arenalookupx,
+       ;; je_check_reallocatex--i.e. they forked jemalloc.
+       ;("jemalloc" ,jemalloc)
+       ("ndctl" ,ndctl)
+       ("numactl" ,numactl)))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)))
+    (arguments
+     `(#:configure-flags
+       (list (string-append "--docdir=" (assoc-ref %outputs "out")
+                            "/share/doc/" ,name "-" ,version))
+       #:tests? #f ; Tests require a NUMA-enabled system.
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'autogen-jemalloc
+           (lambda _
+             (with-directory-excursion "jemalloc"
+               (substitute* "Makefile.in"
+                (("/bin/sh") (which "sh")))
+               (invoke "autoconf")
+               (substitute* "configure"
+                (("/bin/sh") (which "sh"))))
+             #t)))))
+    (home-page "https://github.com/memkind/memkind")
+    (synopsis "Heap manager with memory kinds (for NUMA)")
+    (description "This package provides a user-extensible heap manager
+built on top of jemalloc which enables control of memory characteristics
+and a partitioning of the heap between kinds of memory (for NUMA).")
+    (license license:bsd-3)))