gnu: r-opencyto: Update to 2.8.4.
[jackhill/guix/guix.git] / gnu / packages / haskell-apps.scm
CommitLineData
804744b3 1;;; GNU Guix --- Functional package management for GNU
62e42dfa 2;;; Copyright © 2015 Siniša Biđin <sinisa@bidin.eu>
804744b3 3;;; Copyright © 2015, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
3c986a7d 4;;; Copyright © 2016, 2017, 2018 Nikita <nikita@n0.is>
62e42dfa
RV
5;;; Copyright © 2017 Danny Milosavljevic <dannym@scratchpost.org>
6;;; Copyright © 2017, 2018 Alex Vong <alexvong1995@gmail.com>
e5a354af 7;;; Copyright © 2017–2019, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
804744b3
LC
8;;; Copyright © 2018 Timothy Sample <samplet@ngyro.com>
9;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
10;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
bfccae4e 11;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
64fc2293 12;;; Copyright © 2019, 2020 Kyle Meyer <kyle@kyleam.com>
6ec2450f 13;;; Copyright © 2015 John Soo <jsoo1@asu.edu>
a2130bcf 14;;; Copyright © 2019, 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
838c8204 15;;; Copyright © 2019, 2020 Alex Griffin <a@ajgrf.com>
eea58169 16;;; Copyright © 2020 Alexandru-Sergiu Marton <brown121407@member.fsf.org>
79617a01 17;;; Copyright © 2020 Brian Leung <bkleung89@gmail.com>
b4bbf3d1 18;;; Copyright © 2021 EuAndreh <eu@euandre.org>
a1386815 19;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
83da1cb6 20;;; Copyright © 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
804744b3
LC
21;;;
22;;; This file is part of GNU Guix.
23;;;
24;;; GNU Guix is free software; you can redistribute it and/or modify it
25;;; under the terms of the GNU General Public License as published by
26;;; the Free Software Foundation; either version 3 of the License, or (at
27;;; your option) any later version.
28;;;
29;;; GNU Guix is distributed in the hope that it will be useful, but
30;;; WITHOUT ANY WARRANTY; without even the implied warranty of
31;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
32;;; GNU General Public License for more details.
33;;;
34;;; You should have received a copy of the GNU General Public License
35;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
36
37(define-module (gnu packages haskell-apps)
38 #:use-module (guix download)
62e42dfa 39 #:use-module (guix git-download)
804744b3
LC
40 #:use-module (guix packages)
41 #:use-module ((guix licenses) #:prefix license:)
42 #:use-module (guix build-system haskell)
a3891908 43 #:use-module (gnu packages)
804744b3 44 #:use-module (gnu packages curl)
bfccae4e 45 #:use-module (gnu packages gl)
804744b3
LC
46 #:use-module (gnu packages haskell)
47 #:use-module (gnu packages haskell-check)
48 #:use-module (gnu packages haskell-crypto)
49 #:use-module (gnu packages haskell-web)
dddbc90c 50 #:use-module (gnu packages haskell-xyz)
804744b3
LC
51 #:use-module (gnu packages ncurses)
52 #:use-module (gnu packages perl)
53 #:use-module (gnu packages pkg-config)
54 #:use-module (gnu packages rsync)
a1386815
LLB
55 #:use-module (gnu packages version-control)
56 #:use-module (gnu packages xorg))
804744b3 57
79617a01
BL
58(define-public apply-refact
59 (package
60 (name "apply-refact")
b97f549b 61 (version "0.9.3.0")
79617a01
BL
62 (source
63 (origin
64 (method url-fetch)
65 (uri (string-append
66 "https://hackage.haskell.org/package/apply-refact/apply-refact-"
67 version ".tar.gz"))
68 (sha256
69 (base32
b97f549b 70 "1sn5g71sx8xa4ggyk49m661iip6zrzl65vb87l16l31kf79bbm7w"))))
79617a01
BL
71 (build-system haskell-build-system)
72 (inputs
8394619b
LC
73 (list ghc-refact
74 ghc-exactprint
75 ghc-syb
76 ghc-extra
77 ghc-uniplate
78 ghc-filemanip
79 ghc-unix-compat
80 ghc-optparse-applicative))
79617a01 81 (native-inputs
8394619b
LC
82 (list ghc-tasty ghc-tasty-golden ghc-tasty-expected-failure
83 ghc-silently))
79617a01
BL
84 (home-page "https://hackage.haskell.org/package/apply-refact")
85 (synopsis "Perform refactorings specified by the refact library")
86 (description
87 "This package lets you perform refactorings specified by the refact
88library. It is primarily used with HLint's @code{--refactor} flag.")
89 (license license:bsd-3)))
90
b97f549b
LDB
91;; cabal-install depends on Cabal, which is part of GHC. You can only
92;; update this packages after updating GHC.
62e42dfa
RV
93(define-public cabal-install
94 (package
95 (name "cabal-install")
b97f549b 96 (version "3.2.0.0")
62e42dfa
RV
97 (source
98 (origin
99 (method url-fetch)
100 (uri (string-append
101 "https://hackage.haskell.org/package/cabal-install/cabal-install-"
102 version
103 ".tar.gz"))
a3891908
LDB
104 (patches (search-patches "cabal-install-base16-bytestring1.0.patch"
105 "cabal-install-ghc8.10.patch"))
62e42dfa 106 (sha256
b97f549b 107 (base32 "1c0cc256bha97aj7l0lf76l5swlnmwcqppiz8l4cl5xgba4mwmd0"))))
62e42dfa 108 (build-system haskell-build-system)
b97f549b
LDB
109 (arguments
110 `(#:phases
841f1954
TS
111 (modify-phases %standard-phases
112 (add-before 'configure 'update-constraints
113 (lambda _
114 (substitute* "cabal-install.cabal"
b97f549b
LDB
115 (("(base|base16-bytestring|random)\\s+[^,]+" all dep)
116 dep)))))))
62e42dfa 117 (inputs
8394619b
LC
118 (list ghc-async
119 ghc-base16-bytestring
120 ghc-cryptohash-sha256
121 ghc-echo
122 ghc-edit-distance
123 ghc-hackage-security
124 ghc-hashable
125 ghc-http
126 ghc-network-uri
127 ghc-network
128 ghc-random
129 ghc-resolv
130 ghc-tar
131 ghc-zip-archive
132 ghc-zlib))
62e42dfa
RV
133 (home-page "https://www.haskell.org/cabal/")
134 (synopsis "Command-line interface for Cabal and Hackage")
135 (description
136 "The cabal command-line program simplifies the process of managing
137Haskell software by automating the fetching, configuration, compilation and
138installation of Haskell libraries and programs.")
139 (license license:bsd-3)))
140
62e42dfa
RV
141(define-public cpphs
142 (package
143 (name "cpphs")
b97f549b 144 (version "1.20.9.1")
62e42dfa
RV
145 (source
146 (origin
147 (method url-fetch)
148 (uri (string-append
149 "https://hackage.haskell.org/package/" name "/"
150 name "-" version ".tar.gz"))
151 (sha256
152 (base32
b97f549b 153 "17wi7fma2qaqdm1hwgaam3fd140v9bpa8ky0wg708h1pqc5v2nbz"))))
62e42dfa
RV
154 (build-system haskell-build-system)
155 (inputs
8394619b 156 (list ghc-polyparse ghc-old-locale ghc-old-time))
62e42dfa
RV
157 (home-page "http://projects.haskell.org/cpphs/")
158 (synopsis "Liberalised re-implementation of cpp, the C pre-processor")
159 (description "Cpphs is a re-implementation of the C pre-processor that is
160both more compatible with Haskell, and itself written in Haskell so that it
161can be distributed with compilers. This version of the C pre-processor is
162pretty-much feature-complete and compatible with traditional (K&R)
163pre-processors. Additional features include: a plain-text mode; an option to
164unlit literate code files; and an option to turn off macro-expansion.")
165 (license (list license:lgpl2.1+ license:gpl3+))))
166
d93fc75e 167;; Darcs has no https support:
804744b3
LC
168;; http://darcs.net/manual/Configuring_darcs.html#SECTION00440070000000000000
169;; and results of search engines will show that if the protocol is http, https
170;; is never mentioned.
171(define-public darcs
172 (package
173 (name "darcs")
b97f549b 174 (version "2.16.4")
804744b3
LC
175 (source
176 (origin
177 (method url-fetch)
178 (uri (string-append "https://hackage.haskell.org/package/darcs/"
179 "darcs-" version ".tar.gz"))
180 (sha256
181 (base32
b97f549b 182 "07dygwh6p4fsrlgxmq6r7yvxmf4n2y04izzd30jzqgs0pi9645p4"))
804744b3
LC
183 (modules '((guix build utils)))
184 ;; Remove time-dependent code for reproducibility.
185 (snippet
186 '(begin
187 (substitute* "darcs/darcs.hs"
188 (("__DATE__") "\"1970-01-01\"")
189 (("__TIME__") "\"00:00:00\""))
190 #t))))
191 (build-system haskell-build-system)
192 (arguments
b97f549b 193 `(#:tests? #f ; TODO: Needs QuickCheck ==2.13.*, and more…
0710797d 194 #:configure-flags '("-fpkgconfig" "-fcurl" "-flibiconv" "-fthreaded"
804744b3
LC
195 "-fnetwork-uri" "-fhttp" "--flag=executable"
196 "--flag=library")
197 #:phases
198 (modify-phases %standard-phases
199 (add-after 'patch-source-shebangs 'patch-sh
200 (lambda _
201 (substitute* "tests/issue538.sh"
202 (("/bin/sh") (which "sh")))
0710797d
TS
203 #t))
204 (add-before 'configure 'update-constraints
205 (lambda _
206 (substitute* "darcs.cabal"
b97f549b
LDB
207 (("(constraints)\\s+[^,]+" all dep)
208 dep)
209 (("(cryptonite)\\s+[^,]+" all dep)
210 dep)))))))
804744b3 211 (inputs
8394619b
LC
212 (list ghc-cmdargs
213 ghc-split
214 ghc-test-framework-quickcheck2
215 ghc-test-framework-hunit
216 ghc-test-framework
217 ghc-quickcheck
218 ghc-constraints
219 ghc-findbin
220 ghc-hunit
221 ghc-cryptonite
222 ghc-http-conduit
223 ghc-http-types
224 ghc-async
225 ghc-attoparsec
226 ghc-base16-bytestring
227 ghc-bytestring-builder
228 ghc-cryptohash
229 ghc-data-ordlist
230 ghc-fgl
231 ghc-system-filepath
232 ghc-graphviz
233 ghc-hashable
234 ghc-html
235 ghc-mmap
236 ghc-old-time
237 ghc-random
238 ghc-regex-applicative
239 ghc-regex-compat-tdfa
240 ghc-sandi
241 ghc-shelly
242 ghc-tar
243 ghc-transformers-compat
244 ghc-unix-compat
245 ghc-utf8-string
246 ghc-vector
247 ghc-zip-archive
248 ghc-zlib
249 ghc-http
250 curl
251 ghc
252 ncurses
253 perl
8394619b
LC
254 ghc-network
255 ghc-network-uri))
804744b3 256 (native-inputs
8394619b 257 (list pkg-config))
804744b3
LC
258 (home-page "http://darcs.net")
259 (synopsis "Distributed Revision Control System")
260 (description
261 "Darcs is a revision control system. It is:
262
263@enumerate
264@item Distributed: Every user has access to the full command set, removing boundaries
265between server and client or committer and non-committers.
266@item Interactive: Darcs is easy to learn and efficient to use because it asks you
267questions in response to simple commands, giving you choices in your work flow.
268You can choose to record one change in a file, while ignoring another. As you update
269from upstream, you can review each patch name, even the full diff for interesting
270patches.
271@item Smart: Originally developed by physicist David Roundy, darcs is based on a
272unique algebra of patches called @url{http://darcs.net/Theory,Patchtheory}.
273@end enumerate")
274 (license license:gpl2)))
275
eea58169
ASM
276(define-public ghcid
277 (package
278 (name "ghcid")
10601409 279 (version "0.8.7")
eea58169
ASM
280 (source
281 (origin
282 (method url-fetch)
283 (uri (string-append "https://hackage.haskell.org/package/ghcid/"
284 "ghcid-" version ".tar.gz"))
285 (sha256
10601409 286 (base32 "0yqc1pkfajnr56gnh43sbj50r7c3r41b2jfz07ivgl6phi4frjbq"))))
eea58169
ASM
287 (build-system haskell-build-system)
288 (inputs
8394619b
LC
289 (list ghc-extra ghc-ansi-terminal ghc-cmdargs ghc-fsnotify
290 ghc-terminal-size))
eea58169 291 (native-inputs
8394619b 292 (list ghc-tasty ghc-tasty-hunit))
10601409 293 (home-page "https://github.com/ndmitchell/ghcid#readme")
eea58169
ASM
294 (synopsis "GHCi based bare bones IDE")
295 (description
296 "Either \"GHCi as a daemon\" or \"GHC + a bit of an IDE\". A very simple Haskell
297development tool which shows you the errors in your project and updates them whenever
298you save. Run @code{ghcid --topmost --command=ghci}, where @code{--topmost} makes the
299window on top of all others (Windows only) and @code{--command} is the command to start
300GHCi on your project (defaults to @code{ghci} if you have a @file{.ghci} file, or else
301to @code{cabal repl}).")
302 (license license:bsd-3)))
303
804744b3
LC
304(define-public git-annex
305 (package
306 (name "git-annex")
9bd8e145 307 (version "10.20220927")
804744b3
LC
308 (source
309 (origin
310 (method url-fetch)
311 (uri (string-append "https://hackage.haskell.org/package/"
312 "git-annex/git-annex-" version ".tar.gz"))
313 (sha256
9bd8e145 314 (base32 "1bqcaddw47g6i3z9g0iym5x7zy1q8fsirzqnjsa63n2bwm6zzplc"))))
804744b3
LC
315 (build-system haskell-build-system)
316 (arguments
317 `(#:configure-flags
7401f71a 318 '("--flags=-Android -Webapp")
804744b3
LC
319 #:phases
320 (modify-phases %standard-phases
3d45d8f1 321 (add-before 'configure 'patch-shell-for-tests
804744b3 322 (lambda _
3d45d8f1
KM
323 ;; Shell.hs defines "/bin/sh" that is used in Git hooks. We
324 ;; shouldn't patch hooks with Guix's current bash because the
325 ;; hooks can exist after that bash is garbage collected, but
326 ;; let's temporarily patch it so that we can run the tests.
327 (copy-file "Utility/Shell.hs" "/tmp/Shell.hs")
804744b3 328 (substitute* "Utility/Shell.hs"
4fb1fb90 329 (("/bin/sh") (which "sh")))))
804744b3
LC
330 (add-before 'configure 'factor-setup
331 (lambda _
332 ;; Factor out necessary build logic from the provided
333 ;; `Setup.hs' script. The script as-is does not work because
334 ;; it cannot find its dependencies, and there is no obvious way
64fc2293 335 ;; to tell it where to look.
804744b3
LC
336 (call-with-output-file "PreConf.hs"
337 (lambda (out)
338 (format out "import qualified Build.Configure as Configure~%")
339 (format out "main = Configure.run Configure.tests~%")))
340 (call-with-output-file "Setup.hs"
341 (lambda (out)
342 (format out "import Distribution.Simple~%")
4fb1fb90 343 (format out "main = defaultMain~%")))))
804744b3
LC
344 (add-before 'configure 'pre-configure
345 (lambda _
4fb1fb90 346 (invoke "runhaskell" "PreConf.hs")))
64fc2293
KM
347 (add-after 'build 'build-manpages
348 (lambda _
349 ;; The Setup.hs rewrite above removed custom code for building
350 ;; the man pages. In addition to that code, git-annex's source
351 ;; tree has a file that's not included in the tarball but is used
352 ;; by the Makefile to build man pages. Copy the core bits here.
353 (call-with-output-file "Build/MakeMans.hs"
354 (lambda (out)
355 (format out "module Main where~%")
356 (format out "import Build.Mans~%")
357 (format out "main = buildMansOrWarn~%")))
358 (invoke "runhaskell" "Build/MakeMans.hs")))
804744b3 359 (replace 'check
5d93e9e3 360 (lambda* (#:key tests? #:allow-other-keys)
804744b3
LC
361 ;; We need to set the path so that Git recognizes
362 ;; `git annex' as a custom command.
363 (setenv "PATH" (string-append (getenv "PATH") ":"
364 (getcwd) "/dist/build/git-annex"))
5d93e9e3
EF
365 (when tests?
366 (with-directory-excursion "dist/build/git-annex"
367 (symlink "git-annex" "git-annex-shell"))
368 (invoke "git-annex" "test"))))
3d45d8f1
KM
369 (add-after 'check 'unpatch-shell-and-rebuild
370 (lambda args
371 ;; Undo `patch-shell-for-tests'.
372 (copy-file "/tmp/Shell.hs" "Utility/Shell.hs")
373 (apply (assoc-ref %standard-phases 'build) args)))
64fc2293
KM
374 (add-after 'install 'install-manpages
375 (lambda* (#:key outputs #:allow-other-keys)
376 (let ((man (string-append (assoc-ref outputs "out")
377 "/man/man1/")))
378 (mkdir-p man)
379 (for-each (lambda (file) (install-file file man))
4fb1fb90 380 (find-files "man")))))
804744b3
LC
381 (add-after 'install 'install-symlinks
382 (lambda* (#:key outputs #:allow-other-keys)
383 (let* ((out (assoc-ref outputs "out"))
384 (bin (string-append out "/bin")))
385 (symlink (string-append bin "/git-annex")
386 (string-append bin "/git-annex-shell"))
387 (symlink (string-append bin "/git-annex")
4fb1fb90 388 (string-append bin "/git-remote-tor-annex")))))
e13fefbc
TS
389 (add-after 'install 'touch-static-output
390 (lambda* (#:key outputs #:allow-other-keys)
391 ;; The Haskell build system adds a "static" output by
392 ;; default, and there is no way to override this until
393 ;; <https://issues.guix.gnu.org/41569> is fixed. Without
394 ;; this phase, the daemon complains because we do not
395 ;; create the "static" output.
396 (with-output-to-file (assoc-ref outputs "static")
397 (lambda ()
398 (display "static output not used\n"))))))))
804744b3 399 (inputs
8394619b
LC
400 (list curl
401 ghc-aeson
a2130bcf 402 ghc-ansi-terminal
8394619b 403 ghc-async
a2130bcf 404 ghc-attoparsec
8394619b
LC
405 ghc-aws
406 ghc-bloomfilter
407 ghc-byteable
408 ghc-case-insensitive
9bd8e145 409 ghc-clientsession
8394619b 410 ghc-concurrent-output
a2130bcf
EF
411 ghc-conduit
412 ghc-connection
8394619b
LC
413 ghc-crypto-api
414 ghc-cryptonite
415 ghc-data-default
416 ghc-dav
417 ghc-disk-free-space
418 ghc-dlist
419 ghc-edit-distance
8394619b
LC
420 ghc-exceptions
421 ghc-feed
422 ghc-filepath-bytestring
423 ghc-free
424 ghc-hinotify
8394619b 425 ghc-http-client
a2130bcf 426 ghc-http-client-tls
6c317e02 427 ghc-http-client-restricted
8394619b
LC
428 ghc-http-conduit
429 ghc-http-types
430 ghc-ifelse
431 ghc-magic
432 ghc-memory
a2130bcf 433 ghc-microlens
8394619b
LC
434 ghc-monad-control
435 ghc-monad-logger
436 ghc-mountpoints
437 ghc-network
a2130bcf 438 ghc-network-bsd
8394619b
LC
439 ghc-network-info
440 ghc-network-multicast
a2130bcf 441 ghc-network-uri
8394619b
LC
442 ghc-old-locale
443 ghc-optparse-applicative
444 ghc-persistent
445 ghc-persistent-sqlite
446 ghc-persistent-template
447 ghc-quickcheck
448 ghc-random
449 ghc-regex-tdfa
450 ghc-resourcet
451 ghc-safesemaphore
452 ghc-sandi
453 ghc-securemem
454 ghc-socks
455 ghc-split
456 ghc-stm-chans
457 ghc-tagsoup
458 ghc-torrent
a2130bcf 459 ghc-transformers
8394619b 460 ghc-unix-compat
a2130bcf 461 ghc-unliftio-core
8394619b
LC
462 ghc-unordered-containers
463 ghc-utf8-string
464 ghc-uuid
a2130bcf 465 ghc-vector
9bd8e145
EF
466 ghc-wai
467 ghc-wai-extra
468 ghc-warp
469 ghc-warp-tls
470 ghc-yesod
471 ghc-yesod-core
472 ghc-yesod-form
473 ghc-yesod-static
8394619b
LC
474 git
475 rsync))
804744b3 476 (native-inputs
8394619b
LC
477 (list ghc-tasty ghc-tasty-hunit ghc-tasty-quickcheck ghc-tasty-rerun
478 perl))
804744b3
LC
479 (home-page "https://git-annex.branchable.com/")
480 (synopsis "Manage files with Git, without checking in their contents")
481 (description "This package allows managing files with Git, without
482checking the file contents into Git. It can store files in many places,
483such as local hard drives and cloud storage services. It can also be
484used to keep a folder in sync between computers.")
7e772cb6
KM
485 ;; The main author has released all his changes under AGPLv3+ as of March
486 ;; 2019 (7.20190219-187-g40ecf58d4). These are also licensed under the
487 ;; original GPLv3+ license, but going forward new changes will be under
488 ;; only AGPLv3+. The other licenses below cover code written by others.
489 ;; See git-annex's COPYRIGHT file for details on each file.
490 (license (list license:agpl3+
491 license:gpl3+
492 license:bsd-2
493 license:expat
494 license:gpl2))))
bfccae4e 495
62e42dfa
RV
496(define-public hlint
497 (package
498 (name "hlint")
b97f549b 499 (version "3.2.7")
62e42dfa
RV
500 (source
501 (origin
502 (method url-fetch)
503 (uri (string-append
504 "https://hackage.haskell.org/package/" name
505 "/" name "-" version ".tar.gz"))
506 (sha256
507 (base32
b97f549b 508 "0z6gxndrh7blzapkdn6fq1pkbkjlmbgjbq9ydnvy2wm00fb3v73g"))))
62e42dfa
RV
509 (build-system haskell-build-system)
510 (inputs
8394619b
LC
511 (list ghc-unordered-containers
512 ghc-yaml
513 ghc-vector
514 ghc-data-default
515 ghc-file-embed
516 ghc-utf8-string
517 cpphs
518 ghc-filepattern
519 ghc-lib-parser-ex
520 hscolour
521 ghc-cmdargs
522 ghc-uniplate
523 ghc-ansi-terminal
524 ghc-extra
525 ghc-refact
526 ghc-aeson))
19115138 527 (home-page "https://github.com/ndmitchell/hlint")
62e42dfa
RV
528 (synopsis "Suggest improvements for Haskell source code")
529 (description "HLint reads Haskell programs and suggests changes that
530hopefully make them easier to read. HLint also makes it easy to disable
531unwanted suggestions, and to add your own custom suggestions.")
532 (license license:bsd-3)))
533
6ec2450f
JS
534(define-public hoogle
535 (package
536 (name "hoogle")
b97f549b 537 (version "5.0.18.2")
6ec2450f
JS
538 (source
539 (origin
540 (method url-fetch)
541 (uri
542 (string-append
543 "https://hackage.haskell.org/package/hoogle/hoogle-"
544 version ".tar.gz"))
545 (sha256
546 (base32
b97f549b 547 "1xacx2f33x1a4qlv25f8rlmb4wi0cjfzrj22nlnkrd0knghik3m7"))))
6ec2450f
JS
548 (build-system haskell-build-system)
549 (inputs
8394619b
LC
550 (list ghc-quickcheck
551 ghc-aeson
552 ghc-blaze-html
553 ghc-blaze-markup
554 ghc-cmdargs
555 ghc-conduit
556 ghc-conduit-extra
557 ghc-connection
558 ghc-extra
559 ghc-foundation
560 ghc-old-locale
561 ghc-haskell-src-exts
562 ghc-http-conduit
563 ghc-http-types
564 ghc-js-flot
565 ghc-js-jquery
566 ghc-mmap
567 ghc-process-extras
568 ghc-resourcet
569 ghc-storable-tuple
570 ghc-tar
571 ghc-uniplate
572 ghc-utf8-string
573 ghc-vector
574 ghc-wai
575 ghc-wai-logger
576 ghc-warp
577 ghc-warp-tls
578 ghc-zlib))
6ec2450f
JS
579 (home-page "https://hoogle.haskell.org/")
580 (synopsis "Haskell API Search")
581 (description "Hoogle is a Haskell API search engine, which allows
582you to search many standard Haskell libraries by either function name,
583or by approximate type signature.")
584 (license license:bsd-3)))
585
62e42dfa
RV
586(define-public hscolour
587 (package
588 (name "hscolour")
589 (version "1.24.4")
590 (source
591 (origin
592 (method url-fetch)
593 (uri (string-append
594 "https://hackage.haskell.org/package/hscolour/hscolour-"
595 version
596 ".tar.gz"))
597 (sha256
598 (base32
599 "079jwph4bwllfp03yfr26s5zc6m6kw3nhb1cggrifh99haq34cr4"))))
600 (build-system haskell-build-system)
601 (home-page "https://hackage.haskell.org/package/hscolour")
602 (synopsis "Script to colourise Haskell code")
603 (description "HSColour is a small Haskell script to colourise Haskell
604code. It currently has six output formats: ANSI terminal codes (optionally
605XTerm-256colour codes), HTML 3.2 with font tags, HTML 4.01 with CSS, HTML 4.01
606with CSS and mouseover annotations, XHTML 1.0 with inline CSS styling, LaTeX,
607and mIRC chat codes.")
608 (license license:bsd-3)))
609
51add2a9
AG
610(define-public kmonad
611 (package
612 (name "kmonad")
71e35cb3 613 (version "0.4.1")
51add2a9
AG
614 (source
615 (origin
616 (method git-fetch)
617 (uri (git-reference
b0e7b699 618 (url "https://github.com/david-janssen/kmonad")
15c06ad0 619 (commit version)))
51add2a9
AG
620 (file-name (git-file-name name version))
621 (sha256
71e35cb3 622 (base32 "1rp880zxvrznx0y1k464wjrds441dpsz94syhrkaw5dnmxf74yjd"))))
51add2a9
AG
623 (build-system haskell-build-system)
624 (arguments
625 `(#:phases
626 (modify-phases %standard-phases
627 (delete 'haddock) ; Haddock fails to generate docs
628 (add-after 'install 'install-udev-rules
629 (lambda* (#:key outputs #:allow-other-keys)
630 (let* ((out (assoc-ref outputs "out"))
631 (rules (string-append out "/lib/udev/rules.d")))
632 (mkdir-p rules)
633 (call-with-output-file (string-append rules "/70-kmonad.rules")
634 (lambda (port)
635 (display
636 (string-append
637 "KERNEL==\"uinput\", MODE=\"0660\", "
638 "GROUP=\"input\", OPTIONS+=\"static_node=uinput\"\n")
639 port)))
640 #t)))
641 (add-after 'install-udev-rules 'install-documentation
642 (lambda* (#:key outputs #:allow-other-keys)
643 (let* ((out (assoc-ref outputs "out"))
644 (doc (string-append out "/share/doc/kmonad-" ,version)))
645 (install-file "README.md" doc)
646 (copy-recursively "doc" doc)
838c8204 647 (copy-recursively "keymap" (string-append doc "/keymap"))
51add2a9
AG
648 #t))))))
649 (inputs
8394619b
LC
650 (list ghc-cereal
651 ghc-exceptions
652 ghc-hashable
653 ghc-lens
654 ghc-megaparsec
655 ghc-optparse-applicative
656 ghc-resourcet
657 ghc-rio
658 ghc-unagi-chan
659 ghc-unliftio
660 ghc-unordered-containers))
51add2a9
AG
661 (home-page "https://github.com/david-janssen/kmonad")
662 (synopsis "Advanced keyboard manager")
663 (description "KMonad is a keyboard remapping utility that supports
664advanced functionality, such as custom keymap layers and modifiers, macros,
665and conditional mappings that send a different keycode when tapped or held.
666By operating at a lower level than most similar tools, it supports X11,
667Wayland, and Linux console environments alike.")
668 (license license:expat)))
669
b4bbf3d1
NG
670(define-public nixfmt
671 (package
79d50056 672 (name "nixfmt")
b4bbf3d1
NG
673 (version "0.4.0")
674 (source
675 (origin
676 (method url-fetch)
677 (uri (string-append
678 "https://hackage.haskell.org/package/nixfmt/nixfmt-"
679 version
680 ".tar.gz"))
681 (sha256
682 (base32 "1ispgl8rc2scr6v8bb6sks7px856jf61x74zj2iyddrn5qamkb3n"))))
683 (build-system haskell-build-system)
684 (inputs
8394619b
LC
685 (list ghc-megaparsec ghc-parser-combinators ghc-cmdargs
686 ghc-safe-exceptions))
b4bbf3d1
NG
687 (arguments
688 `(#:cabal-revision
b97f549b
LDB
689 ("1" "1hsj0jh6siph3afd9c2wii09sffl48rzqv653n4clpd8qy0rn48d")
690 #:phases
691 (modify-phases %standard-phases
692 (add-before 'configure 'update-constraints
693 (lambda _
694 (substitute* "nixfmt.cabal"
695 (("(base|megaparsec)\\s+[^,]+" all dep)
696 dep)))))))
b4bbf3d1
NG
697 (home-page "https://github.com/serokell/nixfmt")
698 (synopsis "Opinionated formatter for Nix")
699 (description
700 "Nixfmt is a formatter for Nix that ensures consistent and clear
701formatting by forgetting all existing formatting during parsing.")
702 (license license:mpl2.0)))
703
a1386815
LLB
704(define-public greenclip
705 (package
706 (name "greenclip")
707 (version "3.4")
708 (source
709 (origin
710 (method git-fetch)
711 (uri (git-reference
712 (url "https://github.com/erebe/greenclip")
713 (commit version)))
714 (file-name (git-file-name name version))
715 (sha256
716 (base32 "1baw360dcnyavacf7a8v6wq4m5g6bcmyybkckv4cz7r4xl5p3qws"))))
717 (build-system haskell-build-system)
718 (native-inputs
8394619b 719 (list pkg-config))
a1386815 720 (inputs
8394619b
LC
721 (list libx11
722 libxext
723 libxscrnsaver
724 ghc-x11
725 ghc-exceptions
726 ghc-hashable
727 ghc-microlens
728 ghc-microlens-mtl
729 ghc-protolude
730 ghc-vector
731 ghc-wordexp))
a1386815
LLB
732 (home-page "https://github.com/erebe/greenclip")
733 (synopsis "Simple Clipboard manager")
734 (description "@code{greenclip} is a clipboard manager written in
735Haskell.")
736 (license license:bsd-3)))
737
bfccae4e
LC
738(define-public raincat
739 (package
740 (name "raincat")
741 (version "1.2.1")
742 (source
743 (origin
744 (method url-fetch)
1e5c274e 745 (uri (string-append "mirror://hackage/package/Raincat/"
bfccae4e
LC
746 "Raincat-" version ".tar.gz"))
747 (sha256
748 (base32
749 "10y9zi22m6hf13c9h8zd9vg7mljpwbw0r3djb6r80bna701fdf6c"))))
750 (build-system haskell-build-system)
751 (arguments
752 `(#:phases
753 (modify-phases %standard-phases
754 (add-after 'install 'wrap-executable
755 (lambda* (#:key inputs outputs #:allow-other-keys)
756 (let ((out (assoc-ref outputs "out")))
757 (wrap-program (string-append out "/bin/raincat")
758 `("LD_LIBRARY_PATH" ":" =
759 (,(string-append (assoc-ref inputs "freeglut")
760 "/lib"))))
761 #t))))))
762 (inputs
8394619b
LC
763 (list ghc-extensible-exceptions
764 ghc-random
765 ghc-glut
766 freeglut
767 ghc-opengl
768 ghc-sdl2
769 ghc-sdl2-image
770 ghc-sdl2-mixer))
a15b4529 771 (home-page "https://www.gamecreation.org/games/raincat")
bfccae4e
LC
772 (synopsis "Puzzle game with a cat in lead role")
773 (description "Project Raincat is a game developed by Carnegie Mellon
774students through GCS during the Fall 2008 semester. Raincat features game
775play inspired from classics Lemmings and The Incredible Machine. The project
776proved to be an excellent learning experience for the programmers. Everything
777is programmed in Haskell.")
778 (license license:bsd-3)))
62e42dfa 779
6e241750
EF
780(define-public scroll
781 (package
782 (name "scroll")
783 (version "1.20180421")
784 (source
785 (origin
786 (method url-fetch)
787 (uri (string-append
788 "https://hackage.haskell.org/package/scroll/scroll-"
789 version ".tar.gz"))
790 (sha256
791 (base32
792 "0apzrvf99rskj4dbmn57jjxrsf19j436s8a09m950df5aws3a0wj"))))
793 (build-system haskell-build-system)
7bcc8004
EF
794 (arguments
795 '(#:phases
796 (modify-phases %standard-phases
797 (add-after 'install 'touch-static-output
798 (lambda* (#:key outputs #:allow-other-keys)
799 ;; The Haskell build system adds a "static" output by
800 ;; default, and there is no way to override this until
801 ;; <https://issues.guix.gnu.org/41569> is fixed. Without
802 ;; this phase, the daemon complains because we do not
803 ;; create the "static" output.
804 (with-output-to-file (assoc-ref outputs "static")
805 (lambda ()
806 (display "static output not used\n")))
807 #t)))))
6e241750 808 (inputs
8394619b
LC
809 (list ghc-case-insensitive
810 ghc-data-default
811 ghc-ifelse
812 ghc-monad-loops
813 ghc-ncurses
814 ghc-optparse-applicative
815 ghc-random
816 ghc-vector))
6e241750
EF
817 (home-page "https://joeyh.name/code/scroll/")
818 (synopsis "scroll(6), a roguelike game")
819 (description
820 "You're a bookworm that's stuck on a scroll. You have to dodge between
821words and use spells to make your way down the page as the scroll is read. Go
822too slow and you'll get wound up in the scroll and crushed.")
823 (license license:gpl2)))
824
62e42dfa
RV
825(define-public shellcheck
826 (package
827 (name "shellcheck")
5a6af484 828 (version "0.8.0")
62e42dfa
RV
829 (source
830 (origin
831 (method url-fetch)
832 (uri (string-append
833 "https://hackage.haskell.org/package/ShellCheck/ShellCheck-"
834 version ".tar.gz"))
835 (sha256
5a6af484 836 (base32 "05jlapp4m997w36h2wszdxz9gvczdczaylypsbn14jqpb650w232"))
62e42dfa
RV
837 (file-name (string-append name "-" version ".tar.gz"))))
838 (build-system haskell-build-system)
83da1cb6 839 (arguments
b97f549b
LDB
840 '(#:haddock? #f ; TODO: Fails to build.
841 #:phases
83da1cb6
MS
842 (modify-phases %standard-phases
843 (add-after 'build 'build-man-page
844 (lambda _
845 (invoke "./manpage")))
846 (add-after 'install 'install-man-page
847 (lambda* (#:key outputs #:allow-other-keys)
848 (install-file "shellcheck.1"
849 (string-append (assoc-ref outputs "out")
850 "/share/man/man1/")))))))
851 (native-inputs
8394619b 852 (list pandoc))
62e42dfa 853 (inputs
8394619b 854 (list ghc-aeson ghc-diff ghc-quickcheck ghc-regex-tdfa))
1ee45e62 855 (home-page "https://www.shellcheck.net/")
62e42dfa
RV
856 (synopsis "Static analysis for shell scripts")
857 (description "@code{shellcheck} provides static analysis for
858@command{bash} and @command{sh} shell scripts.
859It gives warnings and suggestions in order to:
860
861@enumerate
862@item Point out and clarify typical beginner's syntax issues that cause
863a shell to give cryptic error messages.
864@item Point out and clarify typical intermediate level semantic problems
865that cause a shell to behave strangely and counter-intuitively.
866@item Point out subtle caveats, corner cases and pitfalls that may cause an
867advanced user's otherwise working script to fail under future circumstances.
868@end enumerate")
159de036
TGR
869 ;; CVE-2021-28794 is for a completely different, unofficial add-on.
870 (properties `((lint-hidden-cve . ("CVE-2021-28794"))))
62e42dfa 871 (license license:gpl3+)))
83f9448e 872
dcfd1d2c
MB
873(define-public shelltestrunner
874 (package
875 (name "shelltestrunner")
876 (version "1.9")
877 (source (origin
878 (method url-fetch)
879 (uri (string-append "mirror://hackage/package/shelltestrunner-"
880 version "/shelltestrunner-" version ".tar.gz"))
881 (sha256
882 (base32
883 "1a5kzqbwg6990249ypw0cx6cqj6663as1kbj8nzblcky8j6kbi6b"))))
884 (build-system haskell-build-system)
885 (arguments
886 '(#:phases
887 (modify-phases %standard-phases
888 (delete 'check)
889 (add-after 'install 'check
890 (lambda* (#:key outputs tests? parallel-tests? #:allow-other-keys)
891 ;; This test is inspired by the Makefile in the upstream
892 ;; repository, which is missing in the Hackage release tarball
893 ;; along with some of the tests. The Makefile would not work
894 ;; anyway as it ties into the 'stack' build tool.
895 (let* ((out (assoc-ref outputs "out"))
896 (shelltest (string-append out "/bin/shelltest"))
897 (numjobs (if parallel-tests?
898 (number->string (parallel-job-count))
899 "1")))
900 (if tests?
901 (invoke shelltest (string-append "-j" numjobs)
902 "tests/examples")
903 (format #t "test suite not run~%"))
904 #t))))))
905 (inputs
8394619b
LC
906 (list ghc-diff
907 ghc-cmdargs
908 ghc-filemanip
909 ghc-hunit
910 ghc-pretty-show
911 ghc-regex-tdfa
912 ghc-safe
913 ghc-utf8-string
914 ghc-test-framework
915 ghc-test-framework-hunit))
dcfd1d2c
MB
916 (home-page "https://github.com/simonmichael/shelltestrunner")
917 (synopsis "Test CLI programs")
918 (description
919 "shelltestrunner (executable: @command{shelltest}) is a command-line tool
920for testing command-line programs, or general shell commands. It reads simple
921test specifications defining a command to run, some input, and the expected
922output, stderr, and exit status.")
923 (license license:gpl3+)))
924
83f9448e
JS
925(define-public stylish-haskell
926 (package
927 (name "stylish-haskell")
b97f549b 928 (version "0.13.0.0")
83f9448e
JS
929 (source
930 (origin
931 (method url-fetch)
932 (uri
933 (string-append
b97f549b 934 "https://hackage.haskell.org/package/stylish-haskell/"
83f9448e
JS
935 "stylish-haskell-" version ".tar.gz"))
936 (sha256
937 (base32
b97f549b 938 "0x9w3zh1lzp6l5xj3mynnlr0fzb5mbv0wwpfxp8fr6bk0jcrzjwf"))))
83f9448e
JS
939 (build-system haskell-build-system)
940 (inputs
8394619b
LC
941 (list ghc-aeson
942 ghc-file-embed
943 ghc-haskell-src-exts
944 ghc-semigroups
945 ghc-syb
946 ghc-hsyaml
947 ghc-hsyaml-aeson
948 ghc-lib-parser
949 ghc-strict
950 ghc-optparse-applicative
951 ghc-hunit
952 ghc-test-framework
953 ghc-test-framework-hunit))
83f9448e
JS
954 (home-page "https://github.com/jaspervdj/stylish-haskell")
955 (synopsis "Haskell code prettifier")
156b08bd
JS
956 (description "Stylish-haskell is a Haskell code prettifier. The goal is
957not to format all of the code in a file, to avoid \"getting in the way\".
958However, this tool can e.g. clean up import statements and help doing various
959tasks that get tedious very quickly. It can
960@itemize
961@item
962Align and sort @code{import} statements
963@item
964Group and wrap @code{{-# LANGUAGE #-}} pragmas, remove (some) redundant
965pragmas
966@item
967Remove trailing whitespaces
968@item
969Align branches in @code{case} and fields in records
970@item
971Convert line endings (customisable)
972@item
973Replace tabs by four spaces (turned off by default)
974@item
975Replace some ASCII sequences by their Unicode equivalent (turned off by
976default)
977@end itemize")
83f9448e 978 (license license:bsd-3)))