Subject: [bug#57722] [PATCH] gnu: ipfs: Install bash completion.

From: Michael Rohleder <[email-masked]>
Date: Tue, 13 Sep 2022 11:49:57 +0200

Hey Maxime,

Thank you for reviewing and your helpful tips!

Here is a second version, I hope it's better.

I dont know how to test cross compiling, though (on a x86_64 system):

./pre-inst-env guix build --system=aarch64-linux go-ipfs
[...]
building /gnu/store/ssvif7gdgv7xn7jmgmcp4ws71fgmwn5x-go-ipfs-0.11.0.drv...
;;; Stat of /tmp/guix-build-go-ipfs-0.11.0.drv-0/guile failed:
;;; In procedure stat: No such file or directory: "/tmp/guix-build-go-ipfs-0.11.0.drv-0/guile"
Backtrace:
           0 (primitive-load "/tmp/guix-build-go-ipfs-0.11.0.drv-0/g?")

ERROR: In procedure primitive-load:
In procedure open-file: No such file or directory: "/tmp/guix-build-go-ipfs-0.11.0.drv-0/guile"

And then I'm completely lost and confused. ;)

From bbf32c53a2402f6f123d00d2e5ece9efdbf10504 Mon Sep 17 00:00:00 2001
From: Michael Rohleder <[email-masked]>
Date: Tue, 13 Sep 2022 11:29:23 +0200
Subject: [PATCH] gnu: go-ipfs: Install bash completion.

* gnu/packages/ipfs.scm (go-ipfs)[arguments]: Use gexp.
Add 'install-bashcompletion phase to install bash completion.
---
 gnu/packages/ipfs.scm | 27 +++++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)

diff --git a/gnu/packages/ipfs.scm b/gnu/packages/ipfs.scm
index ccc36007b4..d1e04c3ae0 100644
--- a/gnu/packages/ipfs.scm
+++ b/gnu/packages/ipfs.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2018 Pierre Neidhardt <[email-masked]>
 ;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice <[email-masked]>
 ;;; Copyright © 2019, 2020 Martin Becze <[email-masked]>
-;;; Copyright © 2020, 2021 Michael Rohleder <[email-masked]>
+;;; Copyright © 2020, 2021, 2022 Michael Rohleder <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,6 +22,7 @@
 (define-module (gnu packages ipfs)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix download)
   #:use-module (guix build-system go)
@@ -229,10 +230,28 @@ (define-public go-ipfs
        (file-name (string-append name "-" version "-source"))))
     (build-system go-build-system)
     (arguments
-     `(#:unpack-path "github.com/ipfs/go-ipfs"
-       #:import-path "github.com/ipfs/go-ipfs/cmd/ipfs"))
+     (list
+      #:unpack-path "github.com/ipfs/go-ipfs"
+      #:import-path "github.com/ipfs/go-ipfs/cmd/ipfs"
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; https://github.com/ipfs/kubo/blob/master/docs/command-completion.md
+          (add-after 'install 'install-bashcompletion
+            (lambda _
+              (let ((completiondir (string-append #$output
+                                                  "/etc/bash_completion.d")))
+                (mkdir-p completiondir)
+                (with-output-to-file (string-append completiondir "/ipfs")
+                  (lambda _
+                    (invoke #$(if (%current-target-system)
+                                  "ipfs"
+                                  #~(string-append #$output "/bin/ipfs"))
+                            "commands" "completion" "bash")))))))))
     (native-inputs
-     (list python-minimal-wrapper zsh))
+     (append (if (%current-target-system)
+                 (list this-package)
+                 '())
+             (list python-minimal-wrapper zsh)))
     (home-page "https://ipfs.io")
     (synopsis "Go implementation of IPFS, a peer-to-peer hypermedia protocol")
     (description "IPFS is a global, versioned, peer-to-peer file system.  It
-- 
2.37.3

-- 
Nichts ist in der Welt ist so gerecht verteilt wie der Verstand. 
Jedermann ist der Meinung, dass er genuegend davon hat.