summary refs log tree commit diff
path: root/gnu/packages
diff options
context:
space:
mode:
authorPierre Neidhardt <mail@ambrevar.xyz>2018-10-15 19:46:58 +0200
committerPierre Neidhardt <mail@ambrevar.xyz>2018-10-15 19:46:58 +0200
commitd0a7961e145cdace45e14b5ca441a73cbcdb38fd (patch)
tree00d9ec0db580f658db4bcbc5ee30f94fcfe8f142 /gnu/packages
parent2d5fa80e83190b6bdbeb8a45e68a885b283e2490 (diff)
downloadguix-d0a7961e145cdace45e14b5ca441a73cbcdb38fd.tar.gz
Add gx (WIP)
Diffstat (limited to 'gnu/packages')
-rw-r--r--gnu/packages/golang.scm1071
-rw-r--r--gnu/packages/ipfs.scm210
-rw-r--r--gnu/packages/syncthing.scm132
3 files changed, 1280 insertions, 133 deletions
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 7f26fbdab6..a14b17fab4 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -36,6 +36,7 @@
   #:use-module (guix git-download)
   #:use-module (guix packages)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system trivial)
   #:use-module (guix build-system go)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages gcc)
@@ -46,7 +47,8 @@
   #:use-module (gnu packages lua)
   #:use-module (gnu packages mp3)
   #:use-module (ice-9 match)
-  #:use-module (srfi srfi-1))
+  #:use-module (srfi srfi-1)
+  #:export (go-golang-org-x-crypto-union))
 
 ;; According to https://golang.org/doc/install/gccgo, gccgo-4.8.2 includes a
 ;; complete go-1.1.2 implementation, gccgo-4.9 includes a complete go-1.2
@@ -983,6 +985,147 @@ Tiny Encryption Algorithm (XTEA) block cipher.")
       (home-page "https://go.googlesource.com/crypto/")
       (license license:bsd-3))))
 
+(define-public go-golang-org-x-crypto-ed25519
+  (let ((commit "95a4943f35d008beabde8c11e5075a1b714e6419")
+        (revision "1"))
+    (package
+      (name "go-golang-org-x-crypto-ed25519")
+      (version (git-version "0.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://go.googlesource.com/crypto")
+                      (commit commit)))
+                (file-name (string-append "go.googlesource.com-crypto-"
+                                          version "-checkout"))
+                (sha256
+                 (base32
+                  "0bkm0jx9mxmi1liabb9c04kf765n7d0062zdp3zmvzyamsq00lcx"))))
+      (build-system go-build-system)
+      (arguments
+       `(#:import-path "golang.org/x/crypto/ed25519"
+         #:unpack-path "golang.org/x/crypto"
+         #:phases
+         (modify-phases %standard-phases
+           (add-before 'reset-gzip-timestamps 'make-gzip-archive-writable
+             (lambda* (#:key outputs #:allow-other-keys)
+               (map (lambda (file)
+                      (make-file-writable file))
+                    (find-files
+                      (string-append (assoc-ref outputs "out")
+                                     "/src/golang.org/x/crypto/ed25519/testdata")
+                      ".*\\.gz$"))
+               #t)))))
+      (synopsis "ED25519 in Go")
+      (description "This package provides a Go implementation of the ED25519
+signature algorithm.")
+      (home-page "https://go.googlesource.com/crypto/")
+      (license license:bsd-3))))
+
+(define-public go-golang-org-x-crypto-ripemd160
+  (let ((commit "95a4943f35d008beabde8c11e5075a1b714e6419")
+        (revision "1"))
+    (package
+      (name "go-golang-org-x-crypto-ripemd160")
+      (version (git-version "0.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://go.googlesource.com/crypto")
+                      (commit commit)))
+                (file-name (string-append "go.googlesource.com-crypto-"
+                                          version "-checkout"))
+                (sha256
+                 (base32
+                  "0bkm0jx9mxmi1liabb9c04kf765n7d0062zdp3zmvzyamsq00lcx"))))
+      (build-system go-build-system)
+      (arguments
+       `(#:import-path "golang.org/x/crypto/ripemd160"
+         #:unpack-path "golang.org/x/crypto"
+         #:phases
+         (modify-phases %standard-phases
+           (add-before 'reset-gzip-timestamps 'make-gzip-archive-writable
+             (lambda* (#:key outputs #:allow-other-keys)
+               (map (lambda (file)
+                      (make-file-writable file))
+                    (find-files
+                      (string-append (assoc-ref outputs "out")
+                                     "/src/golang.org/x/crypto/ed25519/testdata")
+                      ".*\\.gz$"))
+               #t)))))
+      (synopsis "RIPEMD-160 in Go")
+      (description "This package provides a Go implementation of the RIPEMD-160
+hash algorithm.")
+      (home-page "https://go.googlesource.com/crypto/")
+      (license license:bsd-3))))
+
+(define-public go-golang-org-x-crypto-blake2s
+  (package
+    (inherit go-golang-org-x-crypto-bcrypt)
+    (name "go-golang-org-x-crypto-blake2s")
+    (arguments
+     (substitute-keyword-arguments (package-arguments go-golang-org-x-crypto-bcrypt)
+       ((#:import-path _)
+        "golang.org/x/crypto/blake2s")))
+    (synopsis "BLAKE2s in Go")
+    (description "This package provides a Go implementation of the BLAKE2s
+hash algorithm.")))
+
+(define-public go-golang-org-x-crypto-sha3
+  (package
+    (inherit go-golang-org-x-crypto-bcrypt)
+    (name "go-golang-org-x-crypto-sha3")
+    (arguments
+     (substitute-keyword-arguments (package-arguments go-golang-org-x-crypto-bcrypt)
+       ((#:import-path _)
+        "golang.org/x/crypto/sha3")))
+    (synopsis "SHA-3 in Go")
+    (description "This package provides a Go implementation of the SHA-3
+fixed-output-length hash functions and the SHAKE variable-output-length hash
+functions defined by FIPS-202.")))
+
+;; Go searches for library modules by looking in the GOPATH environment
+;; variable.  This variable is a list of paths.  However, Go does not
+;; keep searching on GOPATH if it tries and fails to import a module.
+;; So, we use a union for packages sharing a namespace.
+(define* (go-golang-org-x-crypto-union #:optional
+                                    (packages (list go-golang-org-x-crypto-blowfish
+                                                    go-golang-org-x-crypto-bcrypt
+                                                    go-golang-org-x-crypto-tea
+                                                    go-golang-org-x-crypto-xtea
+                                                    go-golang-org-x-crypto-pbkdf2
+                                                    go-golang-org-x-crypto-twofish
+                                                    go-golang-org-x-crypto-cast5
+                                                    go-golang-org-x-crypto-salsa20
+                                                    go-golang-org-x-crypto-ed25519
+                                                    go-golang-org-x-crypto-ripemd160
+                                                    go-golang-org-x-crypto-blake2s
+                                                    go-golang-org-x-crypto-sha3)))
+  (package
+    (name "go-golang-org-x-crypto")
+    (version (package-version go-golang-org-x-crypto-bcrypt))
+    (source #f)
+    (build-system trivial-build-system)
+    (arguments
+     '(#:modules ((guix build union))
+       #:builder (begin
+                   (use-modules (ice-9 match)
+                                (guix build union))
+                   (match %build-inputs
+                     (((names . directories) ...)
+                      (union-build (assoc-ref %outputs "out")
+                                   directories)
+                      #t)))))
+    (inputs (map (lambda (package)
+                   (list (package-name package) package))
+                 packages))
+    (synopsis "Union of the Go x crypto libraries")
+    (description "A union of the Golang cryptographic libraries.  A
+union is required because `go build` assumes that all of the headers and
+libraries are in the same directory.")
+    (home-page (package-home-page go-golang-org-x-crypto-bcrypt))
+    (license (package-license go-golang-org-x-crypto-bcrypt))))
+
 (define-public go-golang-org-x-net-ipv4
   (let ((commit "d866cfc389cec985d6fda2859936a575a55a3ab6")
         (revision "1"))
@@ -2344,3 +2487,929 @@ and lookup requests.  Browse requests are not supported yet.")
       (synopsis "Go wrapper for taglib")
       (description "Go wrapper for taglib")
       (license license:unlicense))))
+
+(define-public go-github-com-libp2p-go-flow-metrics
+  (let ((commit
+          "7e5a55af485341567f98d6847a373eb5ddcdcd43")
+        (revision "0"))
+    (package
+      (name "go-github-com-libp2p-go-flow-metrics")
+      (version (git-version "0.2.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/libp2p/go-flow-metrics.git")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+            (base32
+              "1p87iyk6q6f3g3xkncssx400qlld8f2z93qiz8m1f97grfyhjif1"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/libp2p/go-flow-metrics"
+         ;; TODO: Tests hang.
+         #:tests? #f))
+      (home-page
+        "https://github.com/libp2p/go-flow-metrics")
+      (synopsis "Simple library for tracking flow metrics")
+      (description "A simple alternative to rcrowley's @command{go-metrics}
+that's a lot faster (and only does simple bandwidth metrics).")
+      (license license:expat))))
+
+(define-public go-github-com-davecgh-go-spew
+  (let ((commit
+          "d8f796af33cc11cb798c1aaeb27a4ebc5099927d")
+        (revision "0"))
+    (package
+      (name "go-github-com-davecgh-go-spew")
+      (version (git-version "0.0.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/davecgh/go-spew.git")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+            (base32
+              "19z27f306fpsrjdvkzd61w1bdazcdbczjyjck177g33iklinhpvx"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:unpack-path "github.com/davecgh/go-spew"
+         #:import-path "github.com/davecgh/go-spew/spew"))
+      (native-inputs `())
+      (home-page "https://github.com/davecgh/go-spew")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-btcsuite-btclog
+  (let ((commit
+          "84c8d2346e9fc8c7b947e243b9c24e6df9fd206a")
+        (revision "0"))
+    (package
+      (name "go-github-com-btcsuite-btclog")
+      (version (git-version "0.0.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/btcsuite/btclog.git")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+            (base32
+              "02dl46wcnfpg9sqvg0ipipkpnd7lrf4fnvb9zy56jqa7mfcwc7wk"))))
+      (build-system go-build-system)
+      (arguments
+        '(#:import-path "github.com/btcsuite/btclog"))
+      (home-page "https://github.com/btcsuite/btclog")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-btcsuite-btcutil
+  (let ((commit
+          "ab6388e0c60ae4834a1f57511e20c17b5f78be4b")
+        (revision "0"))
+    (package
+      (name "go-github-com-btcsuite-btcutil")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/btcsuite/btcutil.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1ijim9n97psl6s47mi2ldllmsvg4bd4jhjmgcvwpcd19frs35mgf"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/btcsuite/btcutil"))
+      ;; TODO: Finish with union.
+      (native-inputs
+       `(("go-golang-org-x-crypto-ripemd160" ,go-golang-org-x-crypto-ripemd160)
+         ("go-github-com-btcsuite-btcd-chaincfg" ,go-github-com-btcsuite-btcd-chaincfg)
+         ("go-github-com-btcsuite-btcd-chaincfg-chainhash" ,go-github-com-btcsuite-btcd-chaincfg-chainhash)
+         ("go-github-com-btcsuite-btcd-btcec" ,go-github-com-btcsuite-btcd-btcec)
+         ("go-github-com-btcsuite-btcd-wire" ,go-github-com-btcsuite-btcd-wire)))
+      (home-page "https://github.com/btcsuite/btcutil")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-btcsuite-btcd-btcec
+  (let ((commit
+         "67e573d211ace594f1366b4ce9d39726c4b19bd0")
+        (revision "0"))
+    (package
+      (name "go-github-com-btcsuite-btcd-btcec")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/btcsuite/btcd.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "04s92gsy71w1jirlr5lkk9y6r5cparbas7nmf6ywbp7kq7fn8ajn"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:unpack-path "github.com/btcsuite/btcd"
+         #:import-path "github.com/btcsuite/btcd/btcec"))
+      (native-inputs
+       `(("go-github-com-davecgh-go-spew" ,go-github-com-davecgh-go-spew)
+         ;; ("go-github-com-btcsuite-btcd-chaincfg-chainhash" ,go-github-com-btcsuite-btcd-chaincfg-chainhash)
+         ))
+      (home-page "https://github.com/btcsuite/btcd")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-btcsuite-btcd-chaincfg
+  (package
+    (inherit go-github-com-btcsuite-btcd-btcec)
+    (name "go-github-com-btcsuite-btcd-chaincfg")
+    (arguments
+     '(#:unpack-path "github.com/btcsuite/btcd"
+       #:import-path "github.com/btcsuite/btcd/chaincfg"))))
+
+(define-public go-github-com-btcsuite-btcd-chaincfg-chainhash
+  (package
+    (inherit go-github-com-btcsuite-btcd-btcec)
+    (name "go-github-com-btcsuite-btcd-chaincfg-chainhash")
+    (arguments
+     '(#:unpack-path "github.com/btcsuite/btcd"
+       #:import-path "github.com/btcsuite/btcd/chaincfg/chainhash"))))
+
+(define-public go-github-com-btcsuite-btcd-wire
+  (package
+    (inherit go-github-com-btcsuite-btcd-btcec)
+    (name "go-github-com-btcsuite-btcd-wire")
+    (arguments
+     '(#:unpack-path "github.com/btcsuite/btcd"
+       #:import-path "github.com/btcsuite/btcd/wire"))))
+
+(define-public go-github-com-btcsuite-btcd
+  (let ((commit
+          "67e573d211ace594f1366b4ce9d39726c4b19bd0")
+        (revision "0"))
+    (package
+      (name "go-github-com-btcsuite-btcd")
+      (version (git-version "0.0.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/btcsuite/btcd.git")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+            (base32
+              "04s92gsy71w1jirlr5lkk9y6r5cparbas7nmf6ywbp7kq7fn8ajn"))))
+      (build-system go-build-system)
+      (arguments
+        '(#:import-path "github.com/btcsuite/btcd"))
+      ;; "https://github.com/btcsuite/btcutil"
+;; "https://github.com/btcsuite/btcutil/bloom"
+;; "https://github.com/btcsuite/btcutil/gcs"
+;; "https://github.com/btcsuite/btcutil/gcs/builder"
+;; "https://github.com/btcsuite/go-socks/socks"
+;; "https://github.com/btcsuite/goleveldb/leveldb"
+;; "https://github.com/btcsuite/goleveldb/leveldb/comparer"
+;; "https://github.com/btcsuite/goleveldb/leveldb/errors"
+;; "https://github.com/btcsuite/goleveldb/leveldb/filter"
+;; "https://github.com/btcsuite/goleveldb/leveldb/iterator"
+;; "https://github.com/btcsuite/goleveldb/leveldb/opt"
+;; "https://github.com/btcsuite/goleveldb/leveldb/util"
+;; "https://github.com/btcsuite/websocket"
+      ;; "https://github.com/jrick/logrotate/rotator"
+      (native-inputs
+       `(("go-github-com-btcsuite-btclog" ,go-github-com-btcsuite-btclog)
+         ("go-github-com-davecgh-go-spew" ,go-github-com-davecgh-go-spew)
+         ("go-golang-org-x-crypto-ripemd160" ,go-golang-org-x-crypto-ripemd160)
+         ("go-github.com-jessevdk-go-flags" ,go-github.com-jessevdk-go-flags)))
+      (home-page "https://github.com/btcsuite/btcd")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define* (go-github-com-gogo-protobuf-union
+           #:optional (packages (list go-github-com-gogo-protobuf
+                                      go-github-com-gogo-protobuf-protoc-gen-gogo)))
+  (package
+    (name "go-github-com-gogo-protobuf-union")
+    (version (package-version go-github-com-gogo-protobuf))
+    (source #f)
+    (build-system trivial-build-system)
+    (arguments
+     '(#:modules ((guix build union))
+       #:builder (begin
+                   (use-modules (ice-9 match)
+                                (guix build union))
+                   (match %build-inputs
+                     (((names . directories) ...)
+                      (union-build (assoc-ref %outputs "out")
+                                   directories)
+                      #t)))))
+    (inputs (map (lambda (package)
+                   (list (package-name package) package))
+                 packages))
+    (synopsis "Union of Go protobuf libraries")
+    (description "This is a union of Go protobuf libraries")
+    (home-page (package-home-page go-github-com-gogo-protobuf))
+    (license (package-license go-github-com-gogo-protobuf))))
+
+(define-public go-github-com-gogo-protobuf
+  (let ((commit "160de10b2537169b5ae3e7e221d28269ef40d311")
+        (revision "2"))
+    (package
+      (name "go-github-com-gogo-protobuf")
+      (version (git-version "0.5" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/gogo/protobuf")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0hxq28sgxym04rv0q40gpwkh4ni359q21hq3g78wwxwx4qfd4zwm"))))
+      (build-system go-build-system)
+      (arguments
+       `(#:import-path "github.com/gogo/protobuf/proto"
+         #:unpack-path "github.com/gogo/protobuf"))
+      (propagated-inputs
+       `(("go-github-com-gogo-protobuf-protoc-gen-gogo"
+          ,go-github-com-gogo-protobuf-protoc-gen-gogo)))
+      (synopsis "Protocol Buffers for Go with Gadgets")
+      (description "Gogoprotobuf is a fork of golang/protobuf with extra code
+generation features.  This code generation is used to achieve:
+@itemize
+@item fast marshalling and unmarshalling
+@item more canonical Go structures
+@item goprotobuf compatibility
+@item less typing by optionally generating extra helper code
+@item peace of mind by optionally generating test and benchmark code
+@item other serialization formats
+@end itemize")
+      (home-page "https://github.com/gogo/protobuf")
+      (license license:bsd-3))))
+
+(define-public go-github-com-gogo-protobuf-protoc-gen-gogo
+  (let ((commit "efccd33a0c20aa078705571d5ddbfa14c8395a63")
+        (revision "0"))
+    (package
+      (name "go-github-com-gogo-protobuf-protoc-gen-gogo")
+      (version (git-version "0.2" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/gogo/protobuf")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "09kfa3aqmhh7p0rc6wd4fw5cjccidsk9vgcy13albv0g8vnbmmgw"))))
+      (build-system go-build-system)
+      (arguments
+       `(#:import-path "github.com/gogo/protobuf/protoc-gen-gogo"
+         #:unpack-path "github.com/gogo/protobuf"))
+      (synopsis "Protocol Buffers for Go with Gadgets")
+      (description "Gogoprotobuf is a fork of golang/protobuf with extra code
+generation features.  This code generation is used to achieve:
+@itemize
+@item fast marshalling and unmarshalling
+@item more canonical Go structures
+@item goprotobuf compatibility
+@item less typing by optionally generating extra helper code
+@item peace of mind by optionally generating test and benchmark code
+@item other serialization formats
+@end itemize")
+      (home-page "https://github.com/gogo/protobuf")
+      (license license:bsd-3))))
+
+(define-public go-github-com-gogo-protobuf-proto
+  (let ((commit
+          "fd322a3c49630fe6d05737e2b7d9426e6680e28d")
+        (revision "0"))
+    (package
+      (name "go-github-com-gogo-protobuf-proto")
+      (version (git-version "0.0.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/gogo/protobuf.git")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+            (base32
+              "1zi85584dy91hyrwpanygz1pppi0chn3hzzv128i83i6j45a5fp9"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:unpack-path "github.com/gogo/protobuf"
+         #:import-path "github.com/gogo/protobuf/proto"))
+      (native-inputs `())
+      (home-page "https://github.com/gogo/protobuf")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-minio-sha256-simd
+  (let ((commit
+         "51976451ce1942acbb55707a983ed232fa027110")
+        (revision "0"))
+    (package
+      (name "go-github-com-minio-sha256-simd")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/minio/sha256-simd.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0kaxvpidf6ygkkb06vi95pirll31jnmywhyalfjvf7djhim2wr8f"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/minio/sha256-simd"))
+      (home-page
+       "https://github.com/minio/sha256-simd")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-libp2p-go-libp2p-crypto
+  (let ((commit
+         "7240b40a3ddc47c4d17c15baabcbe45e5219171b")
+        (revision "0"))
+    (package
+      (name "go-github-com-libp2p-go-libp2p-crypto")
+      (version (git-version "2.0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/libp2p/go-libp2p-crypto.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0qwpy57qv5143l9dlfwfvpqsxdd2i4zwnawx1w4pmgxxim3nw1wb"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/libp2p/go-libp2p-crypto"))
+      (native-inputs
+       `(("go-golang-org-x-crypto-ed25519" ,go-golang-org-x-crypto-ed25519)
+         ("go-github-com-btcsuite-btcd-btcec" ,go-github-com-btcsuite-btcd-btcec)
+         ("go-github-com-gogo-protobuf-proto" ,go-github-com-gogo-protobuf-proto)
+         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)))
+      (home-page
+       "https://github.com/libp2p/go-libp2p-crypto")
+      (synopsis "Various cryptographic utilities used by IPFS")
+      (description "Various cryptographic utilities used by IPFS")
+      (license license:expat))))
+
+(define-public go-github-com-mr-tron-base58
+  (let ((commit
+         "d724c80ecac7b49e4e562d58b2b4f4ee4ed8c312")
+        (revision "0"))
+    (package
+      (name "go-github-com-mr-tron-base58")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/mr-tron/base58.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "12qhgnn9wf3c1ang16r4i778whk4wsrj7d90h2xgmz4fi1469rqa"))))
+      (build-system go-build-system)
+      (arguments
+       `(#:unpack-path "github.com/mr-tron/base58"
+         #:import-path "github.com/mr-tron/base58/base58"))
+      (home-page "https://github.com/mr-tron/base58")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-gxed-hashland-keccakpg
+  (let ((commit
+         "d9f6b97f8db22dd1e090fd0bbbe98f09cc7dd0a8")
+        (revision "0"))
+    (package
+      (name "go-github-com-gxed-hashland-keccakpg")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/gxed/hashland.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1q23y4lacsz46k9gmgfw4iwwydw36j2601rbidmmswl94grpc386"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:unpack-path "github.com/gxed/hashland"
+         #:import-path "github.com/gxed/hashland/keccakpg"))
+      (native-inputs `())
+      (home-page "https://github.com/gxed/hashland")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-minio-blake2b-simd
+  (let ((commit
+         "3f5f724cb5b182a5c278d6d3d55b40e7f8c2efb4")
+        (revision "0"))
+    (package
+      (name "go-github-com-minio-blake2b-simd")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/minio/blake2b-simd.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0b6jbnj62c0gmmfd4zdmh8xbg01p80f13yygir9xprqkzk6fikmd"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/minio/blake2b-simd"))
+      (home-page "https://github.com/minio/blake2b-simd")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-spaolacci-murmur3
+  (let ((commit
+         "f09979ecbc725b9e6d41a297405f65e7e8804acc")
+        (revision "0"))
+    (package
+      (name "go-github-com-spaolacci-murmur3")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/spaolacci/murmur3.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1lv3zyz3jy2d76bhvvs8svygx66606iygdvwy5cwc0p5z8yghq25"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/spaolacci/murmur3"))
+      (home-page
+       "https://github.com/spaolacci/murmur3")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-multiformats-go-multihash
+  (let ((commit
+         "97cdb562a04c6ef66d8ed40cd62f8fbcddd396d6")
+        (revision "0"))
+    (package
+      (name "go-github-com-multiformats-go-multihash")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/multiformats/go-multihash.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "02wd9akrwy4y5m0nig9m24p14bjjgb4n1djydrq8cm4yhbvjrrk0"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/multiformats/go-multihash"))
+      (native-inputs
+       `(("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
+         ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
+         ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
+         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
+         ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
+         ("go-golang-org-x-crypto-union" ,(go-golang-org-x-crypto-union))))
+      (home-page
+       "https://github.com/multiformats/go-multihash")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-libp2p-go-libp2p-peer
+  (let ((commit
+         "993d742bc29dcf4894b7730ba610fd78900be76c")
+        (revision "0"))
+    (package
+      (name "go-github-com-libp2p-go-libp2p-peer")
+      (version (git-version "2.3.8" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/libp2p/go-libp2p-peer.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1h96qjdi0i1wbr0jliap2903mycphas3ny0zdrm77yca9plcnphh"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/libp2p/go-libp2p-peer"))
+      (native-inputs
+       `(("go-github-com-libp2p-go-libp2p-crypto" ,go-github-com-libp2p-go-libp2p-crypto)
+         ("go-github-com-gogo-protobuf-proto" ,go-github-com-gogo-protobuf-proto)
+         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
+         ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
+         ("go-github-com-btcsuite-btcd-btcec" ,go-github-com-btcsuite-btcd-btcec)
+         ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
+         ("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
+         ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
+         ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
+         ("go-golang-org-x-crypto-union" ,(go-golang-org-x-crypto-union))))
+      (home-page
+       "https://github.com/libp2p/go-libp2p-peer")
+      (synopsis "PKI based identities for use in go-libp2p")
+      (description "PKI based identities for use in go-libp2p")
+      (license license:expat))))
+
+(define-public go-github-com-libp2p-go-libp2p-protocol
+  (let ((commit
+         "b29f3d97e3a2fb8b29c5d04290e6cb5c5018004b")
+        (revision "0"))
+    (package
+      (name "go-github-com-libp2p-go-libp2p-protocol")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/libp2p/go-libp2p-protocol.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1xgjfnx9zcqglg9li29wdqywsp8hz22wx6phns9zscni2jsfidld"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path
+         "github.com/libp2p/go-libp2p-protocol"))
+      (native-inputs `())
+      (home-page
+       "https://github.com/libp2p/go-libp2p-protocol")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-libp2p-go-libp2p-metrics
+  (let ((commit
+         "a10ff6e75dae3c868023867e8caa534a04bdc624")
+        (revision "0"))
+    (package
+      (name "go-github-com-libp2p-go-libp2p-metrics")
+      (version (git-version "2.1.6" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/libp2p/go-libp2p-metrics.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "05wy0cq4h6yg9bzgapcvm2criwriicbswx80ma82gyn4a9fdrk8m"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/libp2p/go-libp2p-metrics"))
+      (native-inputs
+       `(("go-github-com-libp2p-go-flow-metrics" ,go-github-com-libp2p-go-flow-metrics)
+         ("go-github-com-libp2p-go-libp2p-peer" ,go-github-com-libp2p-go-libp2p-peer)
+         ("go-github-com-libp2p-go-libp2p-protocol" ,go-github-com-libp2p-go-libp2p-protocol)
+         ("go-github-com-libp2p-go-libp2p-crypto" ,go-github-com-libp2p-go-libp2p-crypto)
+         ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
+         ("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
+         ("go-github-com-btcsuite-btcd-btcec" ,go-github-com-btcsuite-btcd-btcec)
+         ("go-github-com-gogo-protobuf-proto" ,go-github-com-gogo-protobuf-proto)
+         ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
+         ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
+         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
+         ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
+         ("go-golang-org-x-crypto-union" ,(go-golang-org-x-crypto-union))))
+      (home-page
+       "https://github.com/libp2p/go-libp2p-metrics")
+      (synopsis "Connection wrapper for go-libp2p that provides bandwidth metrics")
+      (description "A connection wrapper for @command{go-libp2p} that provides bandwidth
+statistics for wrapped connections.")
+      (license license:expat))))
+
+(define-public go-github-com-mitchellh-go-homedir
+  (let ((commit
+          "ae18d6b8b3205b561c79e8e5f69bff09736185f4")
+        (revision "0"))
+    (package
+      (name "go-github-com-mitchellh-go-homedir")
+      (version (git-version "0.0.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/mitchellh/go-homedir.git")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+            (base32
+              "0f0z0aa4wivk4z1y503dmnw0k0g0g403dly8i4q263gfshs82sbq"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/mitchellh/go-homedir"
+         ;; TODO: Tests fail because it tries to access home.
+         #:tests? #f))
+      (native-inputs `())
+      (home-page
+        "https://github.com/mitchellh/go-homedir")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-multiformats-go-multiaddr
+  (let ((commit
+          "fe1c46f8be5af4aff4db286e08839295bd922efb")
+        (revision "0"))
+    (package
+      (name "go-github-com-multiformats-go-multiaddr")
+      (version (git-version "0.0.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/multiformats/go-multiaddr.git")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+            (base32
+              "0p5f8h098a4yjjmzsgqs7vhx1iqifb8izwg3559cr4h7clkpzznh"))))
+      (build-system go-build-system)
+      (arguments
+        '(#:import-path
+          "github.com/multiformats/go-multiaddr"))
+      (native-inputs
+       `(("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
+         ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
+         ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
+         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
+         ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
+         ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
+         ("go-golang-org-x-crypto-union" ,(go-golang-org-x-crypto-union))))
+      (home-page
+        "https://github.com/multiformats/go-multiaddr")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-multiformats-go-multiaddr-net
+  (let ((commit
+          "1cb9a0e8a6de3c8a10f6cee60d01d793603c4f7e")
+        (revision "0"))
+    (package
+      (name "go-github-com-multiformats-go-multiaddr-net")
+      (version (git-version "0.0.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/multiformats/go-multiaddr-net.git")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+            (base32
+              "1ypgi47xdz3bh8lh7f8cmk7w3ql9g4izx5l3kzdg9gda1xn5zxq3"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/multiformats/go-multiaddr-net"
+         ;; TODO: Tests fail because they try to accept the network.
+         #:tests? #f))
+      (native-inputs
+       `(("go-github-com-multiformats-go-multiaddr" ,go-github-com-multiformats-go-multiaddr)
+         ("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
+         ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
+         ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
+         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
+         ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
+         ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
+         ("go-golang-org-x-crypto-union" ,(go-golang-org-x-crypto-union))))
+      (home-page
+        "https://github.com/multiformats/go-multiaddr-net")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-whyrusleeping-tar-utils
+  (let ((commit
+          "8c6c8ba81d5c71fd69c0f48dbde4b2fb422b6dfc")
+        (revision "0"))
+    (package
+      (name "go-github-com-whyrusleeping-tar-utils")
+      (version (git-version "0.0.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/whyrusleeping/tar-utils.git")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+            (base32
+              "14jjdw3yics0k467xsyk388684wdpi0bbx8nqj0y4pqxa0s0in6s"))))
+      (build-system go-build-system)
+      (arguments
+        '(#:import-path
+          "github.com/whyrusleeping/tar-utils"))
+      (native-inputs `())
+      (home-page
+        "https://github.com/whyrusleeping/tar-utils")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-cheekybits-is
+  (let ((commit
+          "68e9c0620927fb5427fda3708222d0edee89eae9")
+        (revision "0"))
+    (package
+      (name "go-github-com-cheekybits-is")
+      (version (git-version "0.0.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/cheekybits/is.git")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+            (base32
+              "1mkbyzhwq3rby832ikq00nxv3jnckxsm3949wkxd8ya9js2jmg4d"))))
+      (build-system go-build-system)
+      (arguments
+        '(#:import-path "github.com/cheekybits/is"))
+      (native-inputs `())
+      (home-page "https://github.com/cheekybits/is")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-sabhiram-go-gitignore
+  (let ((commit
+          "d3107576ba9425fc1c85f4b3569c4631b805a02e")
+        (revision "0"))
+    (package
+      (name "go-github-com-sabhiram-go-gitignore")
+      (version (git-version "0.0.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/sabhiram/go-gitignore.git")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+            (base32
+              "1rdwyxgcsiwgmlqnc3k6h300mzlvjc3j21np4yh1h476wc8dvl0l"))))
+      (build-system go-build-system)
+      (arguments
+        '(#:import-path
+          "github.com/sabhiram/go-gitignore"))
+      (native-inputs
+       `(("go-github-com-stretchr-testify",go-github-com-stretchr-testify)))
+      (home-page
+        "https://github.com/sabhiram/go-gitignore")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-urfave-cli
+  (let ((commit
+          "934abfb2f102315b5794e15ebc7949e4ca253920")
+        (revision "0"))
+    (package
+      (name "go-github-com-urfave-cli")
+      (version (git-version "0.0.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/urfave/cli.git")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+            (base32
+              "0c5r8pgj3k48dfcwj8lw3cxkwkl8vh0fhvz5snfdwd0bcxdqx1yq"))))
+      (build-system go-build-system)
+      (arguments
+        '(#:import-path "github.com/urfave/cli"))
+      (native-inputs `())
+      (home-page "https://github.com/urfave/cli")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-whyrusleeping-json-filter
+  (let ((commit
+          "ff25329a9528f01c5175414f16cc0a6a162a5b8b")
+        (revision "0"))
+    (package
+      (name "go-github-com-whyrusleeping-json-filter")
+      (version (git-version "0.0.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/whyrusleeping/json-filter.git")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+            (base32
+              "0cai0drvx4c8j686l908vpcsz3mw3vxi3ziz94b0f3c5ylpj07j7"))))
+      (build-system go-build-system)
+      (arguments
+        '(#:import-path
+          "github.com/whyrusleeping/json-filter"))
+      (native-inputs `())
+      (home-page
+        "https://github.com/whyrusleeping/json-filter")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-whyrusleeping-progmeter
+  (let ((commit
+          "f3e57218a75b913eff88d49a52c1debf9684ea04")
+        (revision "0"))
+    (package
+      (name "go-github-com-whyrusleeping-progmeter")
+      (version (git-version "0.0.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/whyrusleeping/progmeter.git")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+            (base32
+              "0xs8rz6yhpvj9512c5v3b8dwr2kivywnyyfxzdfbr6fy1xc8zskb"))))
+      (build-system go-build-system)
+      (arguments
+        '(#:import-path
+          "github.com/whyrusleeping/progmeter"))
+      (native-inputs `())
+      (home-page
+        "https://github.com/whyrusleeping/progmeter")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
+
+(define-public go-github-com-whyrusleeping-stump
+  (let ((commit
+          "206f8f13aae1697a6fc1f4a55799faf955971fc5")
+        (revision "0"))
+    (package
+      (name "go-github-com-whyrusleeping-stump")
+      (version (git-version "0.0.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/whyrusleeping/stump.git")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+            (base32
+              "1s40qdppjnk8gijk7x6kbviiqz62nz3h6gic2q9cwcmq8r5isw7n"))))
+      (build-system go-build-system)
+      (arguments
+        '(#:import-path "github.com/whyrusleeping/stump"))
+      (native-inputs `())
+      (home-page
+        "https://github.com/whyrusleeping/stump")
+      (synopsis "XXX")
+      (description "XXX")
+      (license license:expat))))
diff --git a/gnu/packages/ipfs.scm b/gnu/packages/ipfs.scm
new file mode 100644
index 0000000000..88afa8e6cb
--- /dev/null
+++ b/gnu/packages/ipfs.scm
@@ -0,0 +1,210 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages ipfs)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  ;; #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system go)
+  ;; #:use-module (guix build-system python)
+  ;; #:use-module (gnu packages)
+  #:use-module (gnu packages golang))
+
+(define-public go-github-com-ipfs-go-ipfs-cmdkit-files
+  (let ((commit
+          "386fcf8f18a185ec121676665fe2d9574496048d")
+        (revision "0"))
+    (package
+      (name "go-github-com-ipfs-go-ipfs-cmdkit-files")
+      (version (git-version "0.0.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/ipfs/go-ipfs-cmdkit.git")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+            (base32
+              "0qk6fshgdmhp8dip2ksm13j6nywi41m9mn0czkvmw6b697z85l2r"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:unpack-path "github.com/ipfs/go-ipfs-cmdkit"
+         #:import-path "github.com/ipfs/go-ipfs-cmdkit/files"))
+      (home-page
+        "https://github.com/ipfs/go-ipfs-cmdkit")
+      (synopsis "Shared types, functions and values for go-ipfs")
+      (description "@command{cmdkit} offers some types, functions and values
+that are shared between @command{go-ipfs/commands} and its rewrite @command{go-ipfs-cmds}.")
+      (license license:expat))))
+
+(define-public go-github-com-ipfs-go-ipfs-api
+  (let ((commit
+          "dafc2a13a4389ac1a6c2786e34ab70a4f26d3a3f")
+        (revision "0"))
+    (package
+      (name "go-github-com-ipfs-go-ipfs-api")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/ipfs/go-ipfs-api.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "06kibnwb037sqynk99j07wm8alvxwx3bari9gdax4jv93396kycj"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/ipfs/go-ipfs-api"
+         ;; TODO: Tests fail, might need network access.
+         #:tests? #f))
+      (native-inputs
+       `(("go-github-com-ipfs-go-ipfs-cmdkit-files" ,go-github-com-ipfs-go-ipfs-cmdkit-files)
+         ("go-github-com-libp2p-go-libp2p-metrics" ,go-github-com-libp2p-go-libp2p-metrics)
+         ("go-github-com-libp2p-go-flow-metrics" ,go-github-com-libp2p-go-flow-metrics)
+         ("go-github-com-libp2p-go-libp2p-peer" ,go-github-com-libp2p-go-libp2p-peer)
+         ("go-github-com-libp2p-go-libp2p-protocol" ,go-github-com-libp2p-go-libp2p-protocol)
+         ("go-github-com-libp2p-go-libp2p-crypto" ,go-github-com-libp2p-go-libp2p-crypto)
+         ("go-github-com-mitchellh-go-homedir" ,go-github-com-mitchellh-go-homedir)
+         ("go-github-com-multiformats-go-multiaddr" ,go-github-com-multiformats-go-multiaddr)
+         ("go-github-com-multiformats-go-multiaddr-net" ,go-github-com-multiformats-go-multiaddr-net)
+         ("go-github-com-btcsuite-btcd-btcec" ,go-github-com-btcsuite-btcd-btcec)
+         ("go-github-com-gogo-protobuf-proto" ,go-github-com-gogo-protobuf-proto)
+         ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
+         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
+         ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
+         ("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
+         ("go-golang-org-x-crypto-union" ,(go-golang-org-x-crypto-union))
+         ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
+         ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
+         ("go-github-com-whyrusleeping-tar-utils" ,go-github-com-whyrusleeping-tar-utils)
+         ("go-github-com-cheekybits-is" ,go-github-com-cheekybits-is)))
+      (home-page "https://github.com/ipfs/go-ipfs-api")
+      (synopsis "Unofficial Go interface to IPFS's HTTP API")
+      (description "An unofficial Go interface to IPFS's HTTP API")
+      (license license:expat))))
+
+(define-public gx
+  (let ((commit
+          "89338e509426d2895f20086685cf4c77d64cc5df")
+        (revision "0"))
+    (package
+      (name "gx")
+      (version (git-version "0.14.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/whyrusleeping/gx.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "08gh04jln8rxpq0j4fm4chjap162wp8cjwj9szbvj9c7123s42rd"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/whyrusleeping/gx"))
+      (native-inputs
+       `(
+         ("go-github-com-blang-semver" ,go-github-com-blang-semver)
+         ("go-github-com-gxed-hashland-keccakpg" ,go-github-com-gxed-hashland-keccakpg)
+         ("go-github-com-ipfs-go-ipfs-api" ,go-github-com-ipfs-go-ipfs-api)
+         ("go-github-com-ipfs-go-ipfs-cmdkit-files" ,go-github-com-ipfs-go-ipfs-cmdkit-files)
+         ("go-github-com-libp2p-go-flow-metrics" ,go-github-com-libp2p-go-flow-metrics)
+         ("go-github-com-libp2p-go-libp2p-crypto" ,go-github-com-libp2p-go-libp2p-crypto)
+         ("go-github-com-libp2p-go-libp2p-metrics" ,go-github-com-libp2p-go-libp2p-metrics)
+         ("go-github-com-libp2p-go-libp2p-peer" ,go-github-com-libp2p-go-libp2p-peer)
+         ("go-github-com-libp2p-go-libp2p-protocol" ,go-github-com-libp2p-go-libp2p-protocol)
+         ("go-github-com-minio-blake2b-simd" ,go-github-com-minio-blake2b-simd)
+         ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
+         ("go-github-com-mitchellh-go-homedir" ,go-github-com-mitchellh-go-homedir)
+         ("go-github-com-mr-tron-base58" ,go-github-com-mr-tron-base58)
+         ("go-github-com-multiformats-go-multiaddr" ,go-github-com-multiformats-go-multiaddr)
+         ("go-github-com-multiformats-go-multiaddr-net" ,go-github-com-multiformats-go-multiaddr-net)
+         ("go-github-com-multiformats-go-multihash" ,go-github-com-multiformats-go-multihash)
+         ("go-github-com-spaolacci-murmur3" ,go-github-com-spaolacci-murmur3)
+         ("go-github-com-whyrusleeping-tar-utils" ,go-github-com-whyrusleeping-tar-utils)
+         ("go-golang-org-x-crypto-union" ,(go-golang-org-x-crypto-union))
+         ("go-github-com-btcsuite-btcd-btcec" ,go-github-com-btcsuite-btcd-btcec)
+         ("go-github-com-gogo-protobuf-proto" ,go-github-com-gogo-protobuf-proto)
+         ("go-github-com-sabhiram-go-gitignore" ,go-github-com-sabhiram-go-gitignore)
+         ("go-github-com-urfave-cli" ,go-github-com-urfave-cli)
+         ("go-github-com-whyrusleeping-json-filter" ,go-github-com-whyrusleeping-json-filter)
+         ("go-github-com-whyrusleeping-progmeter" ,go-github-com-whyrusleeping-progmeter)
+         ("go-github-com-whyrusleeping-stump" ,go-github-com-whyrusleeping-stump)))
+      (home-page "https://github.com/whyrusleeping/gx")
+      (synopsis "@command{gx} is a packaging tool built around the
+distributed, content addressed filesystem IPFS.  It aims to be flexible,
+powerful and simple.")
+      (description "XXX")
+      (license #f))))
+
+(define-public go-ipfs
+  (let ((commit
+          "9bf4e4145ea897ced2f9aa2087296b3beda6e941")
+        (revision "0"))
+    (package
+      (name "go-ipfs")
+      (version (git-version "0.4.17" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/ipfs/go-ipfs.git")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+            (base32
+              "01zqll453gbjjfkm6jvpp49i1al8ic3pdg3ivqhyiilcsmhf8b8i"))))
+      (build-system go-build-system)
+      (arguments
+       ;; install_unsupported:
+       ;;  @echo "note: this command has yet to be tested to build in the system you are using"
+       ;;  @echo "installing gx"
+       ;;  go get -v -u github.com/whyrusleeping/gx
+       ;;  go get -v -u github.com/whyrusleeping/gx-go
+       ;;  @echo check gx and gx-go
+       ;;  gx -v && gx-go -v
+       ;;  @echo downloading dependencies
+       ;;  gx install --global
+       ;;  @echo "installing go-ipfs"
+       ;;  go install -v -tags nofuse ./cmd/ipfs
+       '(#:import-path "github.com/ipfs/go-ipfs/cmd/ipfs"
+         #:unpack-path "github.com/ipfs/go-ipfs"
+         #:phases
+         (modify-phases %standard-phases
+           (add-before 'reset-gzip-timestamps 'make-gzip-archive-writable
+             (lambda* (#:key outputs #:allow-other-keys)
+               (map (lambda (file)
+                      (make-file-writable file))
+                    (find-files
+                     (assoc-ref outputs "out")
+                     ".*\\.gz$"))
+               #t)))))
+      (native-inputs `())
+      (home-page "https://ipfs.io")
+      (synopsis "IPFS implementation in Go ")
+      (description "IPFS is a global, versioned, peer-to-peer filesystem.  It
+combines good ideas from Git, BitTorrent, Kademlia, SFS, and the Web.  It is
+like a single bittorrent swarm, exchanging git objects.  IPFS provides an
+interface as simple as the HTTP web, but with permanence built in.  You can
+also mount the world at /ipfs.")
+      (license license:expat))))
diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm
index 2e936eef7d..48b52d2002 100644
--- a/gnu/packages/syncthing.scm
+++ b/gnu/packages/syncthing.scm
@@ -298,100 +298,6 @@ structs in the Go programming language.")
       (home-page "https://github.com/gobwas/glob")
       (license expat))))
 
-(define* (go-github-com-gogo-protobuf-union
-           #:optional (packages (list go-github-com-gogo-protobuf
-                                      go-github-com-gogo-protobuf-protoc-gen-gogo)))
-  (package
-    (name "go-github-com-gogo-protobuf-union")
-    (version (package-version go-github-com-gogo-protobuf))
-    (source #f)
-    (build-system trivial-build-system)
-    (arguments
-     '(#:modules ((guix build union))
-       #:builder (begin
-                   (use-modules (ice-9 match)
-                                (guix build union))
-                   (match %build-inputs
-                     (((names . directories) ...)
-                      (union-build (assoc-ref %outputs "out")
-                                   directories)
-                      #t)))))
-    (inputs (map (lambda (package)
-                   (list (package-name package) package))
-                 packages))
-    (synopsis "Union of Go protobuf libraries")
-    (description "This is a union of Go protobuf libraries")
-    (home-page (package-home-page go-github-com-gogo-protobuf))
-    (license (package-license go-github-com-gogo-protobuf))))
-
-(define-public go-github-com-gogo-protobuf
-  (let ((commit "160de10b2537169b5ae3e7e221d28269ef40d311")
-        (revision "2"))
-    (package
-      (name "go-github-com-gogo-protobuf")
-      (version (git-version "0.5" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/gogo/protobuf")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "0hxq28sgxym04rv0q40gpwkh4ni359q21hq3g78wwxwx4qfd4zwm"))))
-      (build-system go-build-system)
-      (arguments
-       `(#:import-path "github.com/gogo/protobuf/proto"
-         #:unpack-path "github.com/gogo/protobuf"))
-      (propagated-inputs
-       `(("go-github-com-gogo-protobuf-protoc-gen-gogo"
-          ,go-github-com-gogo-protobuf-protoc-gen-gogo)))
-      (synopsis "Protocol Buffers for Go with Gadgets")
-      (description "Gogoprotobuf is a fork of golang/protobuf with extra code
-generation features.  This code generation is used to achieve:
-@itemize
-@item fast marshalling and unmarshalling
-@item more canonical Go structures
-@item goprotobuf compatibility
-@item less typing by optionally generating extra helper code
-@item peace of mind by optionally generating test and benchmark code
-@item other serialization formats
-@end itemize")
-      (home-page "https://github.com/gogo/protobuf")
-      (license bsd-3))))
-
-(define-public go-github-com-gogo-protobuf-protoc-gen-gogo
-  (let ((commit "efccd33a0c20aa078705571d5ddbfa14c8395a63")
-        (revision "0"))
-    (package
-      (name "go-github-com-gogo-protobuf-protoc-gen-gogo")
-      (version (git-version "0.2" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/gogo/protobuf")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "09kfa3aqmhh7p0rc6wd4fw5cjccidsk9vgcy13albv0g8vnbmmgw"))))
-      (build-system go-build-system)
-      (arguments
-       `(#:import-path "github.com/gogo/protobuf/protoc-gen-gogo"
-         #:unpack-path "github.com/gogo/protobuf"))
-      (synopsis "Protocol Buffers for Go with Gadgets")
-      (description "Gogoprotobuf is a fork of golang/protobuf with extra code
-generation features.  This code generation is used to achieve:
-@itemize
-@item fast marshalling and unmarshalling
-@item more canonical Go structures
-@item goprotobuf compatibility
-@item less typing by optionally generating extra helper code
-@item peace of mind by optionally generating test and benchmark code
-@item other serialization formats
-@end itemize")
-      (home-page "https://github.com/gogo/protobuf")
-      (license bsd-3))))
 
 (define-public go-github-com-golang-groupcache-lru
   (let ((commit "84a468cf14b4376def5d68c722b139b881c450a4")
@@ -822,44 +728,6 @@ generation.")
       (home-page "https://github.com/vitrun/qart")
       (license bsd-3))))
 
-;; Go searches for library modules by looking in the GOPATH environment
-;; variable.  This variable is a list of paths.  However, Go does not
-;; keep searching on GOPATH if it tries and fails to import a module.
-;; So, we use a union for packages sharing a namespace.
-(define* (go-golang-org-x-crypto-union #:optional
-                                    (packages (list go-golang-org-x-crypto-blowfish
-                                                    go-golang-org-x-crypto-bcrypt
-                                                    go-golang-org-x-crypto-tea
-                                                    go-golang-org-x-crypto-xtea
-                                                    go-golang-org-x-crypto-pbkdf2
-                                                    go-golang-org-x-crypto-twofish
-                                                    go-golang-org-x-crypto-cast5
-                                                    go-golang-org-x-crypto-salsa20)))
-  (package
-    (name "go-golang-org-x-crypto")
-    (version (package-version go-golang-org-x-crypto-bcrypt))
-    (source #f)
-    (build-system trivial-build-system)
-    (arguments
-     '(#:modules ((guix build union))
-       #:builder (begin
-                   (use-modules (ice-9 match)
-                                (guix build union))
-                   (match %build-inputs
-                     (((names . directories) ...)
-                      (union-build (assoc-ref %outputs "out")
-                                   directories)
-                      #t)))))
-    (inputs (map (lambda (package)
-                   (list (package-name package) package))
-                 packages))
-    (synopsis "Union of the Go x crypto libraries")
-    (description "A union of the Golang cryptographic libraries.  A
-union is required because `go build` assumes that all of the headers and
-libraries are in the same directory.")
-    (home-page (package-home-page go-golang-org-x-crypto-bcrypt))
-    (license (package-license go-golang-org-x-crypto-bcrypt))))
-
 (define* (go-golang-org-x-net-union #:optional
                                  (packages (list go-golang-org-x-net-ipv4
                                                  go-golang-org-x-net-bpf