summary refs log tree commit diff
path: root/gnu/packages/version-control.scm
diff options
context:
space:
mode:
authorEfraim Flashner <efraim@flashner.co.il>2023-01-30 11:33:18 +0200
committerEfraim Flashner <efraim@flashner.co.il>2023-01-30 12:39:40 +0200
commit4cf1acc7f3033b50b0bf19e02c9f522d522d338c (patch)
tree9fd64956ee60304c15387eb394cd649e49f01467 /gnu/packages/version-control.scm
parentedb8c09addd186d9538d43b12af74d6c7aeea082 (diff)
parent595b53b74e3ef57a1c0c96108ba86d38a170a241 (diff)
downloadguix-4cf1acc7f3033b50b0bf19e02c9f522d522d338c.tar.gz
Merge remote-tracking branch 'origin/master' into core-updates
 Conflicts:
	doc/guix.texi
	gnu/local.mk
	gnu/packages/admin.scm
	gnu/packages/base.scm
	gnu/packages/chromium.scm
	gnu/packages/compression.scm
	gnu/packages/databases.scm
	gnu/packages/diffoscope.scm
	gnu/packages/freedesktop.scm
	gnu/packages/gnome.scm
	gnu/packages/gnupg.scm
	gnu/packages/guile.scm
	gnu/packages/inkscape.scm
	gnu/packages/llvm.scm
	gnu/packages/openldap.scm
	gnu/packages/pciutils.scm
	gnu/packages/ruby.scm
	gnu/packages/samba.scm
	gnu/packages/sqlite.scm
	gnu/packages/statistics.scm
	gnu/packages/syndication.scm
	gnu/packages/tex.scm
	gnu/packages/tls.scm
	gnu/packages/version-control.scm
	gnu/packages/xml.scm
	guix/build-system/copy.scm
	guix/scripts/home.scm
Diffstat (limited to 'gnu/packages/version-control.scm')
-rw-r--r--gnu/packages/version-control.scm404
1 files changed, 198 insertions, 206 deletions
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 6684580b4a..98b80b6073 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -31,7 +31,7 @@
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020, 2021, 2022 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
-;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
+;;; Copyright © 2020, 2021, 2022 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
 ;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
@@ -45,6 +45,8 @@
 ;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
 ;;; Copyright © 2022 Jai Vetrivelan <jaivetrivelan@gmail.com>
 ;;; Copyright © 2022 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2022 Dhruvin Gandhi <contact@dhruvin.dev>
+;;; Copyright © 2015, 2022 David Thompson <davet@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -69,7 +71,6 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix hg-download)
-  #:use-module (guix build python-build-system)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
@@ -104,6 +105,7 @@
   #:use-module (gnu packages image)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages mail)
+  #:use-module (gnu packages man)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages nano)
   #:use-module (gnu packages ncurses)
@@ -137,7 +139,8 @@
   #:use-module (gnu packages tls)
   #:use-module (gnu packages)
   #:use-module (ice-9 match)
-  #:use-module (srfi srfi-1))
+  #:use-module (srfi srfi-1)
+  #:export (make-gitolite))
 
 (define-public breezy
   (package
@@ -221,14 +224,14 @@ Python 3.3 and later, rather than on Python 2.")
 (define-public git
   (package
     (name "git")
-    (version "2.37.3")
+    (version "2.39.1")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://kernel.org/software/scm/git/git-"
-                                  version ".tar.xz"))
-              (sha256
-               (base32
-                "0yp8hdj0w18jhmmdflzz74z418cw95i08pc22yycyn8nyvbl2il1"))))
+             (method url-fetch)
+             (uri (string-append "mirror://kernel.org/software/scm/git/git-"
+                                 version ".tar.xz"))
+             (sha256
+              (base32
+               "0qf1wly7zagg23svpv533va5v213y7y3lfw76ldkf35k8w48m8s0"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("native-perl" ,perl)
@@ -248,15 +251,12 @@ Python 3.3 and later, rather than on Python 2.")
                  version ".tar.xz"))
            (sha256
             (base32
-             "053lj9wy8y2yr5jzpb0af4w50gz3ckhgc15wqx7is4z6k9a76lww"))))
+             "0xf7ki90xw77nvmnkw50xaivyfi8jddfq0h8crzi7m9zjs7aa8mm"))))
        ;; For subtree documentation.
        ("asciidoc" ,asciidoc)
-       ("docbook2x" ,docbook2x)
        ("docbook-xsl" ,docbook-xsl)
-       ("libxslt" ,libxslt)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)
-       ("xmlto" ,xmlto)))
+       ("xmlto" ,xmlto)
+       ("pkg-config" ,pkg-config)))
     (inputs
      `(("curl" ,curl)
        ("expat" ,expat)
@@ -903,7 +903,7 @@ write native speed custom Git applications in any language with bindings.")
 (define-public git-crypt
   (package
     (name "git-crypt")
-    (version "0.6.0")
+    (version "0.7.0")
     (source
      (origin
        (method git-fetch)
@@ -912,7 +912,7 @@ write native speed custom Git applications in any language with bindings.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1ba5s0fvmd9hhnfhfsjrm40v0qpxfnwc8vmm55m0k4dryzkzx66q"))))
+        (base32 "0ymk2z0jfyhycia8hg6wbj2g06m163yzqzanfk172cxb13fa8c26"))))
     (build-system gnu-build-system)
     (inputs
      (list git openssl))
@@ -956,7 +956,7 @@ to lock down your entire repository.")
 (define-public git-remote-gcrypt
   (package
    (name "git-remote-gcrypt")
-   (version "1.4")
+   (version "1.5")
    (source (origin
              (method git-fetch)
              (uri (git-reference
@@ -965,7 +965,7 @@ to lock down your entire repository.")
              (file-name (git-file-name name version))
              (sha256
               (base32
-               "1x5ca1fi0hyn5w5mnz230x27bqr8j78adnzmlc7cbhzr13q36y5q"))))
+               "1m1wlbqpqyhh2z0ka3gjs5yabd32nnkzw5hak6czcqrhhkfsqbmv"))))
    (build-system trivial-build-system)
    (arguments
     `(#:modules ((guix build utils))
@@ -1403,7 +1403,7 @@ manipulate them in various ways.")
 (define-public vcsh
   (package
     (name "vcsh")
-    (version "1.20190621-4")
+    (version "2.0.5")
     (source
      (origin
        (method git-fetch)
@@ -1412,25 +1412,30 @@ manipulate them in various ways.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1gx5nbqyprgy6picns5hxky3lyzkqfq3xhm614f0wcdi58xrsdh0"))))
+        (base32 "15lb09c2q261p1pp5r7j9k8389ybrd2q19xhnp1nnha6gs78i4wq"))))
     (build-system gnu-build-system)
     (native-inputs
-     (list which))
+     (list autoconf
+           automake
+           ;; for man page
+           ronn-ng
+           ;; for tests
+           perl
+           perl-test-harness
+           perl-shell-command
+           perl-test-most
+           ;; for bash-completion
+           pkg-config))
     (inputs
-     (list git perl perl-test-harness perl-shell-command perl-test-most))
+     (list git))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (delete 'configure)
-         (delete 'build)
-         (add-after 'install 'install-bash-completion
-           ;; As of 1.20190621, zsh completion is installed by default but bash
-           ;; completion is not.  Do so manually.
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out         (assoc-ref outputs "out"))
-                    (completions (string-append out "/etc/bash_completion.d")))
-               (mkdir-p completions)
-               (copy-file "_vcsh_bash" (string-append completions "/vcsh"))))))
+         (add-before 'bootstrap 'fix-version-gen
+           (lambda _
+             (call-with-output-file ".tarball-version"
+               (lambda (port)
+                 (display version port))))))
        #:make-flags (list (string-append "PREFIX="
                                          (assoc-ref %outputs "out")))
        #:test-target "test"))
@@ -1480,7 +1485,9 @@ linear.  It will test every change between two points in the DAG.  It will
 also walk each side of a merge and test those changes individually.")
       (license (license:x11-style "file://LICENSE")))))
 
-(define-public gitolite
+(define* (make-gitolite #:optional (extra-inputs '()))
+  "Make a gitolite package object with EXTRA-INPUTS added to the binary
+wrappers, to be used for optional gitolite extensions."
   (package
     (name "gitolite")
     (version "3.6.12")
@@ -1495,91 +1502,89 @@ also walk each side of a merge and test those changes individually.")
         (base32 "05xw1pmagvkrbzga5pgl3xk9qyc6b5x73f842454f3w9ijspa8zy"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f                      ; no tests
-       #:phases (modify-phases %standard-phases
-                  (delete 'configure)
-                  (delete 'build)
-                  (add-before 'install 'patch-scripts
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      (let ((perl (search-input-file inputs "/bin/perl")))
-                        ;; This seems to take care of every shell script that
-                        ;; invokes Perl.
-                        (substitute* (find-files ".")
-                          ((" perl -")
-                           (string-append " " perl " -")))
-
-                        (substitute* (find-files "src/triggers" ".*")
-                          ((" sed ")
-                           (string-append " " (which "sed") " ")))
-
-                        (substitute*
-                            '("src/triggers/post-compile/update-gitweb-access-list"
-                              "src/triggers/post-compile/ssh-authkeys-split"
-                              "src/triggers/upstream")
-                          ((" grep ")
-                           (string-append " " (which "grep") " ")))
-
-                        ;; Avoid references to the store in authorized_keys.
-                        ;; This works because gitolite-shell is in the PATH.
-                        (substitute* "src/triggers/post-compile/ssh-authkeys"
-                          (("\\$glshell \\$user")
-                           "gitolite-shell $user")))))
-                  (add-before 'install 'patch-source
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      ;; Gitolite uses cat to test the readability of the
-                      ;; pubkey
-                      (substitute* "src/lib/Gitolite/Setup.pm"
-                        (("\"cat ")
-                         (string-append "\"" (which "cat") " "))
-                        (("\"ssh-keygen")
-                         (string-append "\"" (which "ssh-keygen"))))
-
-                      (substitute* '("src/lib/Gitolite/Hooks/PostUpdate.pm"
-                                     "src/lib/Gitolite/Hooks/Update.pm")
-                        (("/usr/bin/perl")
-                         (search-input-file inputs "/bin/perl")))
-
-                      (substitute* "src/lib/Gitolite/Common.pm"
-                        (("\"ssh-keygen")
-                         (string-append "\"" (which "ssh-keygen")))
-                        (("\"logger\"")
-                         (string-append "\""
-                                        (assoc-ref inputs "inetutils")
-                                        "/bin/logger\"")))
-
-                      (substitute* "src/lib/Gitolite/Cache.pm"
-                        (("/usr/sbin/redis-server") "redis-server"))
-
-                      (substitute* "src/commands/svnserve"
-                        (("/usr/bin/svnserve") "svnserve"))))
-                  (replace 'install
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      (let* ((output (assoc-ref outputs "out"))
-                             (sharedir (string-append output "/share/gitolite"))
-                             (bindir (string-append output "/bin")))
-                        (mkdir-p sharedir)
-                        (mkdir-p bindir)
-                        (invoke "./install" "-to" sharedir)
-                        ;; Create symlinks for executable scripts in /bin.
-                        (for-each (lambda (script)
-                                    (symlink (string-append sharedir "/" script)
-                                             (string-append bindir "/" script)))
-                                  '("gitolite" "gitolite-shell")))))
-                  (add-after 'install 'wrap-scripts
-                    (lambda* (#:key inputs outputs #:allow-other-keys)
-                      (let ((out (assoc-ref outputs "out"))
-                            (coreutils (assoc-ref inputs "coreutils"))
-                            (findutils (assoc-ref inputs "findutils"))
-                            (git (assoc-ref inputs "git")))
-                        (for-each (lambda (file-name)
-                                    (wrap-program (string-append out file-name)
-                                      `("PATH" ":" prefix
-                                        ,(map (lambda (dir)
-                                                (string-append dir "/bin"))
-                                              (list out coreutils findutils git)))))
-                                  '("/bin/gitolite" "/bin/gitolite-shell"))))))))
+     (list #:tests? #f ; no tests
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure)
+               (delete 'build)
+               (add-before 'install 'patch-scripts
+                 (lambda* _
+                   ;; This seems to take care of every shell script that
+                   ;; invokes Perl.
+                   (substitute* (find-files ".")
+                     ((" perl -")
+                      (string-append " " #$perl "/bin/perl" " -")))
+
+                   (substitute* (find-files "src/triggers" ".*")
+                     ((" sed ")
+                      (string-append " " #$sed "/bin/sed" " ")))
+
+                   (substitute*
+                       '("src/triggers/post-compile/update-gitweb-access-list"
+                         "src/triggers/post-compile/ssh-authkeys-split"
+                         "src/triggers/upstream")
+                     ((" grep ")
+                      (string-append " " #$grep "/bin/grep" " ")))
+
+                   ;; Avoid references to the store in authorized_keys.
+                   ;; This works because gitolite-shell is in the PATH.
+                   (substitute* "src/triggers/post-compile/ssh-authkeys"
+                     (("\\$glshell \\$user")
+                      "gitolite-shell $user"))))
+               (add-before 'install 'patch-source
+                 (lambda* _
+                   ;; Gitolite uses cat to test the readability of the
+                   ;; pubkey
+                   (substitute* "src/lib/Gitolite/Setup.pm"
+                     (("\"cat ")
+                      (string-append "\"" #$coreutils "/bin/cat" " "))
+                     (("\"ssh-keygen")
+                      (string-append "\"" #$openssh "/bin/ssh-keygen")))
+
+                   (substitute* '("src/lib/Gitolite/Hooks/PostUpdate.pm"
+                                  "src/lib/Gitolite/Hooks/Update.pm")
+                     (("/usr/bin/perl")
+                      (string-append #$perl "/bin/perl")))
+
+                   (substitute* "src/lib/Gitolite/Common.pm"
+                     (("\"ssh-keygen")
+                      (string-append "\"" #$openssh "/bin/ssh-keygen"))
+                     (("\"logger\"")
+                      (string-append "\"" #$inetutils "/bin/logger\"")))
+
+                   (substitute* "src/lib/Gitolite/Cache.pm"
+                     (("/usr/sbin/redis-server") "redis-server"))
+
+                   (substitute* "src/commands/svnserve"
+                     (("/usr/bin/svnserve") "svnserve"))))
+               (replace 'install
+                 (lambda* _
+                   (let* ((sharedir (string-append #$output "/share/gitolite"))
+                          (bindir (string-append #$output "/bin")))
+                     (mkdir-p sharedir)
+                     (mkdir-p bindir)
+                     (invoke "./install" "-to" sharedir)
+                     ;; Create symlinks for executable scripts in /bin.
+                     (for-each (lambda (script)
+                                 (symlink (string-append sharedir "/" script)
+                                          (string-append bindir "/" script)))
+                               '("gitolite" "gitolite-shell")))))
+               (add-after 'install 'wrap-scripts
+                 (lambda* _
+                   (for-each (lambda (file-name)
+                               (wrap-program (string-append #$output file-name)
+                                 `("PATH" ":" prefix
+                                   ,(map (lambda (dir)
+                                           (string-append dir "/bin"))
+                                         (list #$output
+                                               #$coreutils
+                                               #$findutils
+                                               #$git
+                                               #$@extra-inputs)))))
+                             '("/bin/gitolite" "/bin/gitolite-shell")))))))
     (inputs
-     (list bash-minimal coreutils findutils git inetutils openssh perl))
+     (append (list bash-minimal coreutils findutils git inetutils openssh perl)
+             extra-inputs))
     (home-page "https://gitolite.com")
     (synopsis "Git access control layer")
     (description
@@ -1587,6 +1592,8 @@ also walk each side of a merge and test those changes individually.")
 control to Git repositories.")
     (license license:gpl2)))
 
+(define-public gitolite (make-gitolite))
+
 (define-public gitile
   (package
     (name "gitile")
@@ -2231,7 +2238,7 @@ standards-compliant ChangeLog entries based on the changes that it detects.")
 (define-public diffstat
   (package
     (name "diffstat")
-    (version "1.64")
+    (version "1.65")
     (source (origin
               (method url-fetch)
               (uri
@@ -2242,7 +2249,7 @@ standards-compliant ChangeLog entries based on the changes that it detects.")
                                 "diffstat-" version ".tgz")))
               (sha256
                (base32
-                "1z7pwcv48fjnhxrjcsjdy83x8b9ckl582mbbds90a79fkn6y7bmq"))))
+                "12m2aysq6syw83bn4gqhpm284a2ran8w6m8pja2wvsvdj8j79wlc"))))
     (build-system gnu-build-system)
     (home-page "https://invisible-island.net/diffstat/")
     (synopsis "Make histograms from the output of @command{diff}")
@@ -2387,82 +2394,6 @@ as possible.  Resolution of contention for source files, a major headache for
 any project with more than one developer, is one of Aegis's major functions.")
     (license license:gpl3+)))
 
-(define-public reposurgeon
-  (package
-    (name "reposurgeon")
-    (version "3.43")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "http://www.catb.org/~esr/" name "/"
-                                  name "-" version ".tar.xz"))
-              (sha256
-               (base32
-                "1af0z14wcm4bk5a9ysinbwq2fp3lf5f7i8mvwh7286hr3fnagcaz"))
-              (patches (search-patches
-                        "reposurgeon-add-missing-docbook-files.patch"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:make-flags
-       (list "ECHO=echo"
-             (string-append "target=" (assoc-ref %outputs "out")))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-inputs
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((tzdata (assoc-ref inputs "tzdata")))
-               (substitute* "reposurgeon"
-                 (("/usr/share/zoneinfo")
-                  (string-append tzdata "/share/zoneinfo")))
-               (substitute* "test/svn-to-svn"
-                 (("/bin/echo") "echo"))
-               #t)))
-         (delete 'configure)            ; no configure script
-         (add-before 'build 'fix-docbook
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* (find-files "." "\\.xml$")
-               (("docbook/docbookx.dtd")
-                (string-append (assoc-ref inputs "docbook-xml")
-                               "/xml/dtd/docbook/docbookx.dtd")))
-             #t))
-         (add-before 'check 'set-up-test-environment
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((tzdata (assoc-ref inputs "tzdata")))
-               (setenv "TZDIR" (string-append tzdata "/share/zoneinfo"))
-               #t)))
-         (add-after 'install 'install-emacs-data
-           (lambda* (#:key outputs #:allow-other-keys)
-             (install-file "reposurgeon-mode.el"
-                           (string-append (assoc-ref outputs "out")
-                                          "/share/emacs/site-lisp"))
-             #t)))))
-    (inputs
-     `(("python" ,python-wrapper)
-       ("tzdata" ,tzdata)))
-    (native-inputs
-     (list ;; For building documentation.
-           asciidoc
-           docbook-xml
-           docbook-xsl
-           libxml2
-           xmlto
-           ;; For tests.
-           cvs
-           git
-           mercurial
-           subversion))
-    (home-page "http://www.catb.org/~esr/reposurgeon/")
-    (synopsis "Edit version-control repository history")
-    (description "Reposurgeon enables risky operations that version-control
-systems don't want to let you do, such as editing past comments and metadata
-and removing commits.  It works with any version control system that can
-export and import Git fast-import streams, including Git, Mercurial, Fossil,
-Bazaar, CVS, RCS, and Src.  It can also read Subversion dump files directly
-and can thus be used to script production of very high-quality conversions
-from Subversion to any supported Distributed Version Control System (DVCS).")
-    ;; Most files are distributed under bsd-2, except 'repocutter' which is
-    ;; under bsd-3.
-    (license (list license:bsd-2 license:bsd-3))))
-
 (define-public tig
   (package
     (name "tig")
@@ -2720,25 +2651,20 @@ by rclone usable with git-annex.")
 (define-public fossil
   (package
     (name "fossil")
-    (version "2.18")
+    (version "2.20")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
              "https://www.fossil-scm.org/home/tarball/"
-             "84f25d7eb10c0714109d69bb2809abfa8b4b5c3d73b151a5b10df724dacd46d8"
+             "210e89a0597f225f49722b096cf5563bf193e920e02a9bd38503a906deacd416"
              "/fossil-src-" version ".tar.gz"))
        ;; XXX: Currently the above hash must be manually updated.
        (sha256
-        (base32 "0cq7677p84nnbfvk2dsh3c3y900gslw3zaw8iipfq932vmf1s31h"))
+        (base32 "08g7img88n2nwcdkpzmg4aqbp2iy40nllgas53502dspm97ym4h8"))
        (modules '((guix build utils)))
        (snippet
-        '(begin
-           (delete-file-recursively "compat")
-           ;; Disable obsolete SQLite feature check; remove for 2.19.
-           (substitute* "tools/sqlcompattest.c"
-             ((".*\"ENABLE_JSON1\".*")
-              ""))))))
+        '(delete-file-recursively "compat"))))
     (build-system gnu-build-system)
     (native-inputs
      (list tcl                          ;for configuration only
@@ -3458,3 +3384,69 @@ Git project instead of @command{git filter-branch}.")
      "Gitlint is a Git commit message linter written in Python: it checks your
 commit messages for style.")
     (license license:expat)))
+
+(define-public hut
+  (package
+    (name "hut")
+    (version "0.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.sr.ht/~emersion/hut")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0ybngrwwmkm00dlkdhvkfcvcjhp5xzs8fh90zqr0h12ssqx9pll3"))))
+    (build-system go-build-system)
+    (arguments
+     (list
+      #:import-path "git.sr.ht/~emersion/hut"
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'build
+            (lambda* (#:key import-path #:allow-other-keys)
+              (with-directory-excursion (string-append "src/" import-path)
+                ;; The flags are copied from (guix build go-build-system).
+                (setenv "CGO_LDFLAGS" "-s -w")
+                (invoke "make" "all" "GOFLAGS=-v -x"))))
+          (replace 'install
+            (lambda* (#:key import-path #:allow-other-keys)
+              (with-directory-excursion (string-append "src/" import-path)
+                (invoke "make" "install"
+                        (string-append "PREFIX=" #$output))))))))
+    (native-inputs
+     (list scdoc))
+    (inputs
+     (list go-git-sr-ht-emersion-go-scfg
+           go-git-sr-ht-emersion-gqlclient
+           go-github-com-juju-ansiterm
+           go-github-com-spf13-cobra
+           go-golang-org-x-oauth2
+           go-golang-org-x-term))
+    (home-page "https://git.sr.ht/~emersion/hut")
+    (synopsis "CLI tool for sr.ht")
+    (description "@command{hut} is a CLI tool for
+@uref{https://sr.ht/~sircmpwn/sourcehut/, sr.ht}.  It helps you interact with
+sr.ht's public services:
+@table @asis
+@item builds
+submit and manage build jobs
+@item git
+create, and manage git repositories and artifacts
+@item hg
+list Mercurial repositories
+@item lists
+manage mailing lists and patches
+@item meta
+manage PGP, and SSH keys
+@item pages
+publish and manage hosted websites
+@item paste
+create and manage pastes
+@item todo
+create and manage trackers, tickets
+@item graphql
+interact with GraphQL APIs directly
+@end table")
+    (license license:agpl3)))