diff mbox series

[bug#71938] gnu: Add matterhorn.

Message ID 20240704103616.32655-1-romain.garbage@inria.fr
State New
Headers show
Series [bug#71938] gnu: Add matterhorn. | expand

Commit Message

Romain GARBAGE July 4, 2024, 10:36 a.m. UTC
* gnu/packages/haskell-apps.scm (matterhorn): New variable.
* gnu/packages/haskell-crypto.scm (ghc-crypton, ghc-crypton-x509,
ghc-crypton-x509-store, ghc-crypton-x509-system,
ghc-crypton-x509-validation, ghc-tls-1.9): New variables.
* gnu/packages/haskell-web.scm (ghc-crypton-connection,
ghc-mattermost-api, ghc-mattermost-api-qc, ghc-modern-uri): New variables.
* gnu/packages/haskell-xyz.scm (ghc-aspell-pipe, ghc-bimap,
ghc-checkers, ghc-monad-parallel, ghc-text-zipper-13, ghc-stm-delay,
ghc-unique, ghc-unix-compat-7, ghc-vty-6, ghc-vty-crossplatform,
ghc-vty-unix, ghc-hclip, ghc-brick, ghc-brick-skylighting): New variables.

Change-Id: Ida259244865e01cfcc4507eefc01022d216a540c
---
 gnu/packages/haskell-apps.scm   |  92 +++++++++
 gnu/packages/haskell-crypto.scm | 169 +++++++++++++++
 gnu/packages/haskell-web.scm    | 122 ++++++++++-
 gnu/packages/haskell-xyz.scm    | 356 ++++++++++++++++++++++++++++++--
 4 files changed, 726 insertions(+), 13 deletions(-)

Comments

Ricardo Wurmus July 6, 2024, 11:07 p.m. UTC | #1
Hi Romain,

> * gnu/packages/haskell-apps.scm (matterhorn): New variable.
> * gnu/packages/haskell-crypto.scm (ghc-crypton, ghc-crypton-x509,
> ghc-crypton-x509-store, ghc-crypton-x509-system,
> ghc-crypton-x509-validation, ghc-tls-1.9): New variables.
> * gnu/packages/haskell-web.scm (ghc-crypton-connection,
> ghc-mattermost-api, ghc-mattermost-api-qc, ghc-modern-uri): New variables.
> * gnu/packages/haskell-xyz.scm (ghc-aspell-pipe, ghc-bimap,
> ghc-checkers, ghc-monad-parallel, ghc-text-zipper-13, ghc-stm-delay,
> ghc-unique, ghc-unix-compat-7, ghc-vty-6, ghc-vty-crossplatform,
> ghc-vty-unix, ghc-hclip, ghc-brick, ghc-brick-skylighting): New variables.

thank you for the patch!  This looks all pretty good.

There are a few minor quibbles:

* Please make one commit for every added package.
* matterhorn: Please sort inputs alphabetically.
* ghc-crypton: please use Texinfo syntax such as @itemize for the list
  of features.
* ghc-crypton-x509: it would be good to know if there is something we
  can do to make tests pass.  If the tests are pointless it would be
  good to record that.  Please also make sure that the description is
  ... descriptive.
* ghc-tls-1.9, ghc-unix-compat-7, ghc-vty-6, ghc-text-zipper-13: Is it
  desirable to have these packages instead of upgrading the existing
  packages?  Is there pending work on the Haskell team branch(es) that
  would make the use of these versioned variants obsolete?
* Please check whether potentially unwanted changes should really be
  included, such as the cosmetic changes to ghc-githash.

I also just found that there's an old patch set for matterhorn; I cc'd
the issue email address.
Romain GARBAGE July 9, 2024, 9:02 a.m. UTC | #2
Hi Ricardo,

On Sun Jul 7, 2024 at 1:07 AM CEST, Ricardo Wurmus wrote:
> Hi Romain,
>
> > * gnu/packages/haskell-apps.scm (matterhorn): New variable.
> > * gnu/packages/haskell-crypto.scm (ghc-crypton, ghc-crypton-x509,
> > ghc-crypton-x509-store, ghc-crypton-x509-system,
> > ghc-crypton-x509-validation, ghc-tls-1.9): New variables.
> > * gnu/packages/haskell-web.scm (ghc-crypton-connection,
> > ghc-mattermost-api, ghc-mattermost-api-qc, ghc-modern-uri): New variables.
> > * gnu/packages/haskell-xyz.scm (ghc-aspell-pipe, ghc-bimap,
> > ghc-checkers, ghc-monad-parallel, ghc-text-zipper-13, ghc-stm-delay,
> > ghc-unique, ghc-unix-compat-7, ghc-vty-6, ghc-vty-crossplatform,
> > ghc-vty-unix, ghc-hclip, ghc-brick, ghc-brick-skylighting): New variables.
>
> thank you for the patch!  This looks all pretty good.

Thank you for your review. I will send a v2 fixing the comments I don't answer
below.

> There are a few minor quibbles:
>
[...]
> * ghc-tls-1.9, ghc-unix-compat-7, ghc-vty-6, ghc-text-zipper-13: Is it
>   desirable to have these packages instead of upgrading the existing
>   packages?  Is there pending work on the Haskell team branch(es) that
>   would make the use of these versioned variants obsolete?

I don't have myself an answer for the first question: I didn't try to upgrade
any of these packages locally as I didn't want to "break things in Guix".
I guess I could give it a try before sending the v2 if you think it is
better. WDYT?

As for the 2nd question, I checked the haskell-team branch and didn't
see any update of these packages (I might not have checked the right
thing though).
diff mbox series

Patch

diff --git a/gnu/packages/haskell-apps.scm b/gnu/packages/haskell-apps.scm
index 3fce4f803c..8a41ea247c 100644
--- a/gnu/packages/haskell-apps.scm
+++ b/gnu/packages/haskell-apps.scm
@@ -37,6 +37,7 @@ 
 
 (define-module (gnu packages haskell-apps)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix packages)
   #:use-module ((guix licenses) #:prefix license:)
@@ -682,6 +683,97 @@  (define-public kmonad
 Wayland, and Linux console environments alike.")
       (license license:expat))))
 
+(define-public matterhorn
+  (package
+    (name "matterhorn")
+    (version "90000.0.0")
+    (source
+     (origin
+       ;; use git repo instead of hackage URL because the hackage tarball
+       ;; doesn't contain the sample config file
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/matterhorn-chat/matterhorn")
+             (commit version)))
+       (sha256
+        (base32 "08ng5axranilvfl9j3v0mjgpg76kzacrqj4c8x6pblpc3yxx02i5"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "matterhorn")))
+    (inputs (list ghc-mattermost-api
+                  ghc-base-compat
+                  ghc-unordered-containers
+                  ghc-split
+                  ghc-data-clist
+                  ghc-semigroups
+                  ghc-crypton-connection
+                  ghc-config-ini
+                  ghc-microlens-platform
+                  ghc-brick
+                  ghc-brick-skylighting
+                  ghc-vty-6
+                  ghc-vty-crossplatform
+                  ghc-word-wrap
+                  ghc-text-zipper
+                  ghc-xdg-basedir
+                  ghc-vector
+                  ghc-strict
+                  ghc-hashable
+                  ghc-commonmark
+                  ghc-commonmark-extensions
+                  ghc-utf8-string
+                  ghc-temporary
+                  ghc-gitrev
+                  ghc-hclip
+                  ghc-aspell-pipe
+                  ghc-stm-delay
+                  ghc-unix-compat-7
+                  ghc-skylighting-core
+                  ghc-timezone-olson
+                  ghc-timezone-series
+                  ghc-aeson
+                  ghc-async
+                  ghc-uuid
+                  ghc-random
+                  ghc-network-uri
+                  ghc-bimap))
+    (native-inputs (list ghc-unique
+                         ghc-checkers
+                         ghc-tasty
+                         ghc-tasty-hunit
+                         ghc-tasty-quickcheck
+                         ghc-mattermost-api-qc))
+    (arguments
+     (list
+      #:phases #~(modify-phases %standard-phases
+                   (add-after 'unpack 'fix-requirements
+                     (lambda _
+                       (for-each (lambda (dep)
+                                   (substitute* "matterhorn.cabal"
+                                     (((string-append "(,\\s" dep
+                                                      "\\s*>=\\s[0-9].[0-9]).*")
+                                       all pat)
+                                      pat)))
+                                 (list "random"
+                                       "data-clist"
+                                       "semigroups"
+                                       "word-wrap"
+                                       "unix-compat"
+                                       "skylighting-core"
+                                       "checkers"
+                                       "vty"
+                                       "vty-crossplatform"
+                                       "brick"))))
+                   (add-after 'install 'install-config-file
+                     (lambda _
+                       (install-file "./docs/sample-config.ini"
+                                     (string-append #$output "/share/doc/" #$name "-" #$version "/etc/")))))))
+    (home-page "http://hackage.haskell.org/package/matterhorn")
+    (synopsis "Terminal client for the Mattermost chat system")
+    (description
+     "This is a terminal client for the Mattermost chat system.  Please see the README
+for a list of features and information on getting started.")
+    (license license:bsd-3)))
+
 (define-public nixfmt
   (package
     (name "nixfmt")
diff --git a/gnu/packages/haskell-crypto.scm b/gnu/packages/haskell-crypto.scm
index 83ba8bc10b..9d99cc67c3 100644
--- a/gnu/packages/haskell-crypto.scm
+++ b/gnu/packages/haskell-crypto.scm
@@ -612,6 +612,138 @@  (define-public ghc-crypto-random
 abstraction for CPRNGs.")
     (license license:bsd-3)))
 
+
+(define-public ghc-crypton
+  (package
+    (name "ghc-crypton")
+    (version "0.34")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "crypton" version))
+       (sha256
+        (base32 "1mhypjhzn95in853bp7ary0a2xc6lsji6j8hrrgn2mfa4ilq8i24"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "crypton")))
+    (inputs (list ghc-memory ghc-basement))
+    (native-inputs (list ghc-tasty ghc-tasty-quickcheck ghc-tasty-hunit
+                         ghc-tasty-kat))
+    (home-page "https://github.com/kazu-yamamoto/crypton")
+    (synopsis "Cryptography Primitives sink")
+    (description
+     "This package provides a repository of cryptographic primitives. . * Symmetric
+ciphers: AES, DES, 3DES, CAST5, Blowfish, Twofish, Camellia, RC4, Salsa, XSalsa,
+@code{ChaCha}. . * Hash: SHA1, SHA2, SHA3, SHAKE, MD2, MD4, MD5, Keccak, Skein,
+Ripemd, Tiger, Whirlpool, Blake2 . * MAC: HMAC, KMAC, Poly1305 . * Asymmetric
+crypto: DSA, RSA, DH, ECDH, ECDSA, ECC, Curve25519, Curve448, Ed25519, Ed448 . *
+Key Derivation Function: PBKDF2, Scrypt, HKDF, Argon2, BCrypt,
+B@code{CryptPBKDF} . * Cryptographic Random generation: System Entropy,
+Deterministic Random Generator . * Data related: Anti-Forensic Information
+Splitter (AFIS) .  If anything cryptographic related is missing from here,
+submit a pull request to have it added.  This package strives to be a
+cryptographic kitchen sink that provides cryptography for everyone. .  Evaluate
+the security related to your requirements before using. .  Read
+\"Crypto.Tutorial\" for a quick start guide.")
+    (license license:bsd-3)))
+
+(define-public ghc-crypton-x509
+  (package
+    (name "ghc-crypton-x509")
+    (version "1.7.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "crypton-x509" version))
+       (sha256
+        (base32 "1zyaz0krf08g36g30zr5wn8f2x51l4dj2zcjnhpiw9h05p54mdzb"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "crypton-x509")))
+    (inputs (list ghc-memory
+                  ghc-hourglass
+                  ghc-pem
+                  ghc-asn1-types
+                  ghc-asn1-encoding
+                  ghc-asn1-parse
+                  ghc-crypton))
+    (native-inputs (list ghc-tasty ghc-tasty-quickcheck ghc-x509))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "10a2x47znhbayyfr6fqgq27623akpycyjbfxz4hnavavf1x6ary5")
+       #:tests? #f))                    ;tests fail
+    (home-page "https://github.com/kazu-yamamoto/crypton-certificate")
+    (synopsis "X509 reader and writer")
+    (description "X509 reader and writer.  please see README")
+    (license license:bsd-3)))
+
+(define-public ghc-crypton-x509-store
+  (package
+    (name "ghc-crypton-x509-store")
+    (version "1.6.9")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "crypton-x509-store" version))
+       (sha256
+        (base32 "0vr5b9cyf9x016wn1g0bryslf5nz8jq2sy8r3llwqfg02apihqiy"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "crypton-x509-store")))
+    (inputs (list ghc-pem ghc-asn1-types ghc-asn1-encoding ghc-crypton
+                  ghc-crypton-x509))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit))
+    (home-page "https://github.com/kazu-yamamoto/crypton-certificate")
+    (synopsis "X.509 collection accessing and storing methods")
+    (description
+     "X.509 collection accessing and storing methods for certificate, crl, exception
+list")
+    (license license:bsd-3)))
+
+(define-public ghc-crypton-x509-system
+  (package
+    (name "ghc-crypton-x509-system")
+    (version "1.6.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "crypton-x509-system" version))
+       (sha256
+        (base32 "1jilnr9715njlx1hqvg5lrsrwk12r04maypmh18di0sybwg2cdm4"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "crypton-x509-system")))
+    (inputs (list ghc-pem ghc-crypton-x509 ghc-crypton-x509-store))
+    (home-page "https://github.com/kazu-yamamoto/crypton-certificate")
+    (synopsis "Handle per-operating-system X.509 accessors and storage")
+    (description
+     "System X.509 handling for accessing operating system dependents store and other
+storage methods")
+    (license license:bsd-3)))
+
+(define-public ghc-crypton-x509-validation
+  (package
+    (name "ghc-crypton-x509-validation")
+    (version "1.6.12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "crypton-x509-validation" version))
+       (sha256
+        (base32 "1xjhwvmkcy47a6xiqxb3xy944ca7g660203jdrz5xzd46zibfq0f"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "crypton-x509-validation")))
+    (inputs (list ghc-memory
+                  ghc-hourglass
+                  ghc-data-default-class
+                  ghc-pem
+                  ghc-asn1-types
+                  ghc-asn1-encoding
+                  ghc-crypton-x509
+                  ghc-crypton-x509-store
+                  ghc-crypton))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit))
+    (home-page "https://github.com/kazu-yamamoto/crypton-certificate")
+    (synopsis "X.509 Certificate and CRL validation")
+    (description "X.509 Certificate and CRL validation.  please see README")
+    (license license:bsd-3)))
+
 (define-public ghc-cprng-aes
   (package
     (name "ghc-cprng-aes")
@@ -721,6 +853,43 @@  (define-public ghc-tls
 extensions.")
     (license license:bsd-3)))
 
+(define-public ghc-tls-1.9
+  (package
+    (name "ghc-tls")
+    (version "1.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "tls" version))
+       (sha256
+        (base32 "0gj3af9sqd0bw7dpcqfyvbslpxsk2ij00a77kl710fwhw35vj1an"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "tls")))
+    (inputs (list ghc-cereal
+                  ghc-data-default-class
+                  ghc-memory
+                  ghc-crypton
+                  ghc-asn1-types
+                  ghc-asn1-encoding
+                  ghc-crypton-x509
+                  ghc-crypton-x509-store
+                  ghc-crypton-x509-validation
+                  ghc-async
+                  ghc-unix-time
+                  ghc-network))
+    (native-inputs (list ghc-tasty ghc-tasty-quickcheck ghc-quickcheck))
+    (home-page "http://github.com/vincenthz/hs-tls")
+    (synopsis "TLS/SSL protocol native implementation (Server and Client)")
+    (description
+     "Native Haskell TLS and SSL protocol implementation for server and client.
+This provides a high-level implementation of a sensitive security protocol,
+eliminating a common set of security issues through the use of the advanced
+type system, high level constructions and common Haskell features.  Currently
+implement the SSL3.0, TLS1.0, TLS1.1 and TLS1.2 protocol, and support RSA and
+Ephemeral (Elliptic curve and regular) Diffie Hellman key exchanges, and many
+extensions.")
+    (license license:bsd-3)))
+
 (define-public ghc-hsopenssl
   (package
     (name "ghc-hsopenssl")
diff --git a/gnu/packages/haskell-web.scm b/gnu/packages/haskell-web.scm
index 0aaa609e42..afa9520f53 100644
--- a/gnu/packages/haskell-web.scm
+++ b/gnu/packages/haskell-web.scm
@@ -89,6 +89,35 @@  (define-public ghc-cookie
     (description "HTTP cookie parsing and rendering library for Haskell.")
     (license license:expat)))
 
+(define-public ghc-crypton-connection
+  (package
+    (name "ghc-crypton-connection")
+    (version "0.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "crypton-connection" version))
+       (sha256
+        (base32 "07lrkv6lwphsyp4797yp8ywnndzd270bk58r8gwyby0hr4xy52r0"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "crypton-connection")))
+    (inputs (list ghc-basement
+                  ghc-data-default-class
+                  ghc-network
+                  ghc-tls-1.9
+                  ghc-socks
+                  ghc-crypton-x509
+                  ghc-crypton-x509-store
+                  ghc-crypton-x509-system
+                  ghc-crypton-x509-validation))
+    (home-page "https://github.com/kazu-yamamoto/crypton-connection")
+    (synopsis "Simple and easy network connections API")
+    (description
+     "Simple network library for all your connection need. Features: Really simple to
+use, SSL/TLS, SOCKS. This library provides a very simple api to create sockets to a
+destination with the choice of SSL/TLS, and SOCKS.")
+    (license license:bsd-3)))
+
 (define-public ghc-curl
   (package
     (name "ghc-curl")
@@ -814,6 +843,69 @@  (define-public ghc-css-text
 Haskell.")
     (license license:bsd-3)))
 
+(define-public ghc-mattermost-api
+  (package
+    (name "ghc-mattermost-api")
+    (version "90000.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "mattermost-api" version))
+       (sha256
+        (base32 "1ka3r4bnfwlbjnkws8vkg8i9gj8wzsyss137p7hxrx4sr75s6iyv"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "mattermost-api")))
+    (inputs (list ghc-websockets
+                  ghc-aeson
+                  ghc-crypton-connection
+                  ghc-memory
+                  ghc-resource-pool
+                  ghc-http
+                  ghc-http-media
+                  ghc-network-uri
+                  ghc-modern-uri
+                  ghc-unordered-containers
+                  ghc-hashable
+                  ghc-gitrev
+                  ghc-microlens
+                  ghc-microlens-th
+                  ghc-pretty-show
+                  ghc-split
+                  ghc-connection))
+    (native-inputs (list ghc-tasty ghc-tasty-hunit ghc-hunit))
+    (arguments
+     (list
+      #:tests? #f)) ;tests fail: unable to setup network socket
+    (home-page "http://hackage.haskell.org/package/mattermost-api")
+    (synopsis "Client API for Mattermost chat system")
+    (description
+     "Client API for Mattermost chat system.  Mattermost is a flexible, open source
+messaging platform that meets even the most demanding privacy and security
+standards.  This library provides network API interaction with the Mattermost
+server.")
+    (license license:bsd-3)))
+
+(define-public ghc-mattermost-api-qc
+  (package
+    (name "ghc-mattermost-api-qc")
+    (version "90000.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "mattermost-api-qc" version))
+       (sha256
+        (base32 "0lrb8l8nbrdp4y2ala8hchr8ikv5hqw710ffiiw1sz6z2dqiqbxm"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "mattermost-api-qc")))
+    (inputs (list ghc-mattermost-api ghc-quickcheck))
+    (home-page "https://github.com/matterhorn-chat/mattermost-api-qc")
+    (synopsis "QuickCheck instances for the Mattermost client API library")
+    (description
+     "This package provides a library providing @code{QuickCheck} for the
+mattermost-api library to allow testing.  This is provided as a separate library
+to allow use of the API library without testing dependencies.")
+    (license license:isc)))
+
 (define-public ghc-mime-types
   (package
     (name "ghc-mime-types")
@@ -832,6 +924,35 @@  (define-public ghc-mime-types
      "This library provides basic MIME type handling types and functions.")
     (license license:expat)))
 
+(define-public ghc-modern-uri
+  (package
+    (name "ghc-modern-uri")
+    (version "0.3.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "modern-uri" version))
+       (sha256
+        (base32 "1sag8l91qd7xs56rlx8r6dz9zxxmqsnfw0v47az7l8nirv7zjih2"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "modern-uri")))
+    (inputs (list ghc-quickcheck
+                  ghc-hashable
+                  ghc-megaparsec
+                  ghc-profunctors
+                  ghc-reflection
+                  ghc-tagged))
+    (native-inputs (list ghc-hspec
+                         ghc-hspec-megaparsec
+                         ghc-hspec-discover))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "0c0mr8aqs963nmy7i8yfih24snaijgwkxim2q2khw12capshac0q")))
+    (home-page "https://github.com/mrkkrp/modern-uri")
+    (synopsis "Modern library for working with URIs")
+    (description "Modern library for working with URIs.")
+    (license license:bsd-3)))
+
 (define-public ghc-html
   (package
     (name "ghc-html")
@@ -2161,4 +2282,3 @@  (define-public ghc-network-run
     (description
      "This package provides a simple network runner library in Haskell.")
     (license license:bsd-3)))
-
diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index fa423ae2ca..f5539b85c0 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -450,6 +450,26 @@  (define-public ghc-appar
 style.")
     (license license:bsd-3)))
 
+(define-public ghc-aspell-pipe
+  (package
+    (name "ghc-aspell-pipe")
+    (version "0.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "aspell-pipe" version))
+       (sha256
+        (base32 "09dw4v4j5pmqi8pdh3p7kk7f8pph5w33s7vd21fgvhv3arnrj6p8"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "aspell-pipe")))
+    (inputs (list ghc-async))
+    (home-page "http://hackage.haskell.org/package/aspell-pipe")
+    (synopsis "Pipe-based interface to the Aspell program")
+    (description
+     "This package provides a pipe-based interface to the Aspell program (no dynamic
+linking required).")
+    (license license:bsd-3)))
+
 (define-public ghc-assoc
   (package
     (name "ghc-assoc")
@@ -952,6 +972,27 @@  (define-public ghc-bifunctors
     (description "This package provides bifunctors for Haskell.")
     (license license:bsd-3)))
 
+(define-public ghc-bimap
+  (package
+    (name "ghc-bimap")
+    (version "0.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "bimap" version))
+       (sha256
+        (base32 "158cdwk9jwklcfgbn62dqq255i40w13ifggsdps87sxc5q7lpd5h"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "bimap")))
+    (native-inputs (list ghc-quickcheck))
+    (home-page "https://github.com/joelwilliamson/bimap")
+    (synopsis "Bidirectional mapping between two key types")
+    (description
+     "This package provides a data structure representing a bidirectional mapping
+between two key types.  Each value in the bimap is associated with exactly one
+value of the opposite type.")
+    (license license:bsd-3)))
+
 (define-public ghc-bindings-dsl
   (package
     (name "ghc-bindings-dsl")
@@ -1482,8 +1523,8 @@  (define-public ghc-cassava
 
 @verbatim
 >>> Data.Csv.encode [(\"John\",27),(\"Jane\",28)]
-\"John,27
-Jane,28
+\"John,27
+Jane,28
 \"
 @end verbatim
 ")
@@ -1789,6 +1830,31 @@  (define-public ghc-cheapskate
 cross-site scripting (@dfn{XSS}) attacks.")
     (license license:bsd-3)))
 
+(define-public ghc-checkers
+  (package
+    (name "ghc-checkers")
+    (version "0.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "checkers" version))
+       (sha256
+        (base32 "1r4rsa4k0fy8xig3m530ryflry9viv9v47g4gh7h0ld27rbd6z60"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "checkers")))
+    (inputs (list ghc-random ghc-quickcheck ghc-semigroupoids))
+    (arguments
+     `(#:cabal-revision ("1"
+                         "0wkvf57zd7i87z18vj285whjpcl9pscpwxz2cp7v7w6kk0769p0i")))
+    (home-page "https://github.com/haskell-checkers/checkers")
+    (synopsis "Check properties on standard classes and data structures")
+    (description
+     "Checkers wraps up the expected properties associated with various standard type
+classes as @code{QuickCheck} properties.  Also some morphism properties.  It
+also provides arbitrary instances and generator combinators for common data
+types. . © 2008-2013 by Conal Elliott; BSD3 license.")
+    (license license:bsd-3)))
+
 (define-public ghc-chell
   (package
     (name "ghc-chell")
@@ -7497,6 +7563,28 @@  (define-public ghc-monad-par-extras
 and other added capabilities layered on top of the @code{Par} monad.")
     (license license:bsd-3)))
 
+(define-public ghc-monad-parallel
+  (package
+    (name "ghc-monad-parallel")
+    (version "0.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "monad-parallel" version))
+       (sha256
+        (base32 "1j905cwc440g7rvbhsdkqf50ag7p2bi6cy2rqsk918rn80fqqra4"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "monad-parallel")))
+    (inputs (list ghc-parallel ghc-transformers-compat))
+    (home-page "https://hub.darcs.net/blamario/SCC.wiki/")
+    (synopsis "Parallel execution of monadic computations")
+    (description
+     "This package defines classes of monads that can perform multiple executions in
+parallel and combine their results.  For any monad that's an instance of the
+class, the package re-implements a subset of the Control.Monad interface, but
+with parallel execution.")
+    (license license:bsd-3)))
+
 (define-public ghc-monadrandom
   (package
     (name "ghc-monadrandom")
@@ -8454,6 +8542,25 @@  (define-public ghc-text-zipper
 Implementations using both of these examples are provided.")
     (license license:bsd-3)))
 
+(define-public ghc-text-zipper-13
+  (package
+    (name "ghc-text-zipper-13")
+    (version "0.13")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "text-zipper" version))
+       (sha256
+        (base32 "1acq583wmgb53viqslbkgl454300fawg5lryxddfiy1mqk3iqlh6"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "text-zipper")))
+    (inputs (list ghc-vector))
+    (native-inputs (list ghc-hspec ghc-quickcheck hspec-discover))
+    (home-page "https://github.com/jtdaugherty/text-zipper/")
+    (synopsis "Text editor zipper library")
+    (description "This library provides a zipper and API for editing text.")
+    (license license:bsd-3)))
+
 (define-public ghc-doclayout
   (package
     (name "ghc-doclayout")
@@ -11669,6 +11776,31 @@  (define-public ghc-stm-conduit
 source and a sink.")
     (license license:bsd-3)))
 
+(define-public ghc-stm-delay
+  (package
+    (name "ghc-stm-delay")
+    (version "0.1.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "stm-delay" version))
+       (sha256
+        (base32 "0cla21v89gcvmr1iwzibq13v1yq02xg4h6k9l6kcprj7mhd5hcmi"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "stm-delay")))
+    (home-page "https://github.com/joeyadams/haskell-stm-delay")
+    (synopsis "Updatable one-shot timer polled with STM")
+    (description
+     "This library lets you create a one-shot timer, poll it using STM, and update it
+to ring at a different time than initially specified. .  It uses GHC event
+manager timeouts when available (GHC 7.2+, @@-threaded@@, non-Windows OS),
+yielding performance similar to @@@code{threadDelay}@@ and
+@@@code{registerDelay}@@.  Otherwise, it falls back to forked threads and
+@@@code{threadDelay}@@. . [0.1.1] Add @code{tryWaitDelayIO}, improve performance
+for certain cases of @@@code{newDelay}@@ and @@@code{updateDelay}@@, and improve
+example.")
+    (license license:bsd-3)))
+
 (define-public ghc-stmonadtrans
   (package
     (name "ghc-stmonadtrans")
@@ -13277,6 +13409,30 @@  (define-public ghc-uniplate
 work, but is substantially simpler and faster.")
     (license license:bsd-3)))
 
+(define-public ghc-unique
+  (package
+    (name "ghc-unique")
+    (version "0.4.7.9")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "Unique" version))
+       (sha256
+        (base32 "14f1qnmhdmbam8qis725dhwq1mk9h86fsnzhkwhsx73ny9z29s1l"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "Unique")))
+    (inputs (list ghc-extra ghc-hashable ghc-unordered-containers))
+    (native-inputs (list ghc-hspec ghc-quickcheck))
+    (arguments
+     `(#:tests? #f ;test  Data.List.UniqueUnsorted.removeDuplicates fails
+       #:cabal-revision ("1"
+                         "10s0npnfkh7naj49afmyrvnilikp6426fbhi49f97pxrgcmy4dvw")))
+    (home-page "http://hackage.haskell.org/package/Unique")
+    (synopsis "It provides the functionality like unix \"uniq\" utility")
+    (description
+     "Library provides the functions to find unique and duplicate elements in the list")
+    (license license:bsd-3)))
+
 (define-public ghc-unix-compat
   (package
     (name "ghc-unix-compat")
@@ -13300,6 +13456,28 @@  (define-public ghc-unix-compat
 isn't available, portable implementations are used.")
     (license license:bsd-3)))
 
+(define-public ghc-unix-compat-7
+  (package
+    (name "ghc-unix-compat")
+    (version "0.7.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "unix-compat" version))
+       (sha256
+        (base32 "0gz30f4g3gyjz60jbcg072ms67pwdn4by6wvdkg63hjshgl0cj60"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "unix-compat")))
+    (native-inputs (list ghc-monad-parallel ghc-hspec ghc-hunit ghc-extra
+                         ghc-temporary))
+    (home-page "https://github.com/haskell-pkg-janitors/unix-compat")
+    (synopsis "Portable POSIX-compatibility layer")
+    (description
+     "This package provides portable implementations of parts of the unix package.
+This package re-exports the unix package when available.  When it isn't
+available, portable implementations are used.")
+    (license license:bsd-3)))
+
 (define-public ghc-unix-time
   (package
     (name "ghc-unix-time")
@@ -13975,16 +14153,88 @@  (define-public ghc-vty
 to use and to provide good support for common terminal types.")
     (license license:bsd-3)))
 
+(define-public ghc-vty-6
+  (package
+    (name "ghc-vty")
+    (version "6.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "vty" version))
+       (sha256
+        (base32 "0ywqfdngfv5pnsk5pa99yizpbhdq856sy3z70q2hmpmlc2r4h7vg"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "vty")))
+    (inputs (list ghc-blaze-builder ghc-microlens ghc-microlens-mtl
+                  ghc-utf8-string ghc-vector))
+    (home-page "https://github.com/jtdaugherty/vty")
+    (synopsis "A simple terminal UI library")
+    (description
+     "vty is terminal GUI library in the niche of ncurses.  It is intended to be easy
+to use and to provide good support for common terminal types. .  See the
+@@vty-examples@@ package as well as the program
+@@examples/interactive_terminal_test.hs@@ included in the @@vty@@ repository for
+examples on how to use the library. .  Import the @@Graphics.Vty@@ convenience
+module to get access to the core parts of the library. . © 2006-2007 Stefan
+O'Rear; BSD3 license. . © Corey O'Connor; BSD3 license. . © Jonathan
+Daugherty; BSD3 license.")
+    (license license:bsd-3)))
+
+(define-public ghc-vty-crossplatform
+  (package
+    (name "ghc-vty-crossplatform")
+    (version "0.4.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "vty-crossplatform" version))
+       (sha256
+        (base32 "06iwxgqrqzz05hmic7z5hxd48x0i49sk935vm0xfi0xq28sl7r9m"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "vty-crossplatform")))
+    (inputs (list ghc-vty-6 ghc-vty-unix ghc-random ghc-string-qq))
+    (home-page "http://hackage.haskell.org/package/vty-crossplatform")
+    (synopsis "Cross-platform support for Vty")
+    (description
+     "This package provides a generic interface for multiple Vty platforms in one
+package so you don't have to conditionally depend on them in your cabal file.")
+    (license license:bsd-3)))
+
+(define-public ghc-vty-unix
+  (package
+    (name "ghc-vty-unix")
+    (version "0.2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "vty-unix" version))
+       (sha256
+        (base32 "1hfxc7qw884vlq8qshhyndl3zs10jc2xr6i69vhasjywkvh6gay2"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "vty-unix")))
+    (inputs (list ghc-blaze-builder
+                  ghc-vty-6
+                  ghc-vector
+                  ghc-utf8-string
+                  ghc-microlens
+                  ghc-microlens-mtl
+                  ghc-microlens-th
+                  ghc-ansi-terminal))
+    (home-page "http://hackage.haskell.org/package/vty-unix")
+    (synopsis "Unix backend for Vty")
+    (description "This package provides Unix terminal support for Vty.")
+    (license license:bsd-3)))
+
 (define-public ghc-wave
   (package
     (name "ghc-wave")
     (version "0.2.0")
     (source (origin
-      (method url-fetch)
-      (uri (hackage-uri "wave" version))
-      (sha256
-        (base32
-          "149kgwngq3qxc7gxpkqb16j669j0wpv2f3gnvfwp58yg6m4259ki"))))
+              (method url-fetch)
+              (uri (hackage-uri "wave" version))
+              (sha256
+               (base32
+                "149kgwngq3qxc7gxpkqb16j669j0wpv2f3gnvfwp58yg6m4259ki"))))
     (build-system haskell-build-system)
     (properties '((upstream-name . "wave")))
     (arguments
@@ -14922,6 +15172,30 @@  (define-public ghc-commonmark-pandoc
 Pandoc types.")
     (license license:bsd-3)))
 
+(define-public ghc-hclip
+  (package
+    (name "ghc-hclip")
+    (version "3.0.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "Hclip" version))
+       (sha256
+        (base32 "04ppwm7vfzndrys8x1n8vfb41vzwx59r9xp4dkbiqmrms390pj6q"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "Hclip")))
+    (inputs (list ghc-strict))
+    (home-page "https://github.com/jetho/Hclip")
+    (synopsis
+     "Small cross-platform library for reading and modifying the system clipboard")
+    (description
+     "This package provides a small cross-platform library for reading and modifying
+the system clipboard. .  Hclip works on Windows, Mac OS X and Linux (but see the
+requirements below!). .  Requirements: . * Windows: No additional requirements.
+. * Mac OS X: Requires the pbcopy and pbpaste commands, which ship with Mac OS
+X. . * Linux: Requires xclip or xsel installed.")
+    (license license:bsd-3)))
+
 (define-public ghc-hslua-module-path
   (package
     (name "ghc-hslua-module-path")
@@ -15632,6 +15906,65 @@  (define-public ghc-breakpoint
 [README](https://github.com/aaronallen8455/breakpoint#breakpoint) for details.")
     (license license:expat)))
 
+(define-public ghc-brick
+  (package
+    (name "ghc-brick")
+    (version "2.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "brick" version))
+       (sha256
+        (base32 "160np0bz1mcfkp077yc936i026s3zv1czn8lj3k3qr6scldavw35"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "brick")))
+    (inputs (list ghc-vty-6
+                  ghc-vty-crossplatform
+                  ghc-bimap
+                  ghc-data-clist
+                  ghc-microlens
+                  ghc-microlens-th
+                  ghc-microlens-mtl
+                  ghc-config-ini
+                  ghc-vector
+                  ghc-text-zipper-13
+                  ghc-unix-compat-7
+                  ghc-word-wrap
+                  ghc-random))
+    (native-inputs (list ghc-quickcheck))
+    (home-page "https://github.com/jtdaugherty/brick/")
+    (synopsis "Declarative terminal user interface library")
+    (description
+     "Write terminal user interfaces (TUIs) painlessly with brick'! You write an event
+handler and a drawing function and the library does the rest. . . > module Main
+where > > import Brick > > ui :: Widget () > ui = str \"Hello, world!\" > > main
+:: IO () > main = @code{simpleMain} ui . .  To get started, see: . *
+<https://github.com/jtdaugherty/brick/blob/master/README.md The README> . * The
+<https://github.com/jtdaugherty/brick/blob/master/docs/guide.rst Brick user
+guide> . * The demonstration programs in the programs directory . .  This
+package deprecates <http://hackage.haskell.org/package/vty-ui vty-ui>.")
+    (license license:bsd-3)))
+
+(define-public ghc-brick-skylighting
+  (package
+    (name "ghc-brick-skylighting")
+    (version "1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (hackage-uri "brick-skylighting" version))
+       (sha256
+        (base32 "1nw2x9zn0jlvykm89v80fh4187bxgn8l4cljgnf4mp4ci7aqjmkr"))))
+    (build-system haskell-build-system)
+    (properties '((upstream-name . "brick-skylighting")))
+    (inputs (list ghc-brick ghc-vty-6 ghc-skylighting-core))
+    (home-page "https://github.com/jtdaugherty/brick-skylighting/")
+    (synopsis "Show syntax-highlighted text in your Brick UI")
+    (description
+     "This package provides a module to use Skylighting to perform syntax highlighting
+and display the results in Brick-based interfaces.")
+    (license license:bsd-3)))
+
 (define-public ghc-githash
   (package
     (name "ghc-githash")
@@ -15650,10 +15983,10 @@  (define-public ghc-githash
      (list
       #:phases
       #~(modify-phases %standard-phases
-         (add-after 'unpack 'patch-git-path
-           (lambda _
-             (substitute* "src/GitHash.hs"
-               (("\"git\"") (string-append "\"" #$git "/bin/git\""))))))))
+          (add-after 'unpack 'patch-git-path
+            (lambda _
+              (substitute* "src/GitHash.hs"
+                (("\"git\"") (string-append "\"" #$git "/bin/git\""))))))))
     (home-page "https://github.com/snoyberg/githash#readme")
     (synopsis "Compile git revision info into Haskell projects")
     (description "Please see the README and documentation at
@@ -16982,4 +17315,3 @@  (define-public ghc-data-array-byte
 ;;; of a merge conflict, place them above by existing packages with similar
 ;;; functionality or similar names.
 ;;;
-