From 36f36d4e9f3cfefb20fb3e16e3a44e22ec16c2cb Mon Sep 17 00:00:00 2001 From: nek0 Date: Thu, 10 Jun 2021 00:14:39 +0200 Subject: [PATCH] introduce haskell.nix --- nix/.plan.nix/mateamt.nix | 116 +++++++++++ nix/default.nix | 15 ++ nix/pkgs.nix | 395 ++++++++++++++++++++++++++++++++++++++ nix/sources.json | 38 ++++ nix/sources.nix | 174 +++++++++++++++++ shell.nix | 37 ++++ 6 files changed, 775 insertions(+) create mode 100644 nix/.plan.nix/mateamt.nix create mode 100644 nix/default.nix create mode 100644 nix/pkgs.nix create mode 100644 nix/sources.json create mode 100644 nix/sources.nix create mode 100644 shell.nix diff --git a/nix/.plan.nix/mateamt.nix b/nix/.plan.nix/mateamt.nix new file mode 100644 index 0000000..58fd401 --- /dev/null +++ b/nix/.plan.nix/mateamt.nix @@ -0,0 +1,116 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { develop = false; }; + package = { + specVersion = "3.0"; + identifier = { name = "mateamt"; version = "0.0.0.0"; }; + license = "AGPL-3.0-or-later"; + copyright = ""; + maintainer = "nek0@nek0.eu"; + author = "nek0"; + homepage = "https://gitea.nek0.eu/nek0/mateamt/"; + url = ""; + synopsis = "A whole new matemat"; + description = ""; + buildType = "Simple"; + isLocal = true; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."time" or (errorHandler.buildDepError "time")) + (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."base16-bytestring" or (errorHandler.buildDepError "base16-bytestring")) + (hsPkgs."base64-bytestring" or (errorHandler.buildDepError "base64-bytestring")) + (hsPkgs."random-bytestring" or (errorHandler.buildDepError "random-bytestring")) + (hsPkgs."servant" or (errorHandler.buildDepError "servant")) + (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) + (hsPkgs."servant-rawm" or (errorHandler.buildDepError "servant-rawm")) + (hsPkgs."servant-rawm-server" or (errorHandler.buildDepError "servant-rawm-server")) + (hsPkgs."opaleye" or (errorHandler.buildDepError "opaleye")) + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."profunctors" or (errorHandler.buildDepError "profunctors")) + (hsPkgs."product-profunctors" or (errorHandler.buildDepError "product-profunctors")) + (hsPkgs."postgresql-simple" or (errorHandler.buildDepError "postgresql-simple")) + (hsPkgs."warp" or (errorHandler.buildDepError "warp")) + (hsPkgs."wai" or (errorHandler.buildDepError "wai")) + (hsPkgs."wai-logger" or (errorHandler.buildDepError "wai-logger")) + (hsPkgs."http-types" or (errorHandler.buildDepError "http-types")) + (hsPkgs."http-api-data" or (errorHandler.buildDepError "http-api-data")) + (hsPkgs."stm" or (errorHandler.buildDepError "stm")) + (hsPkgs."pureMD5" or (errorHandler.buildDepError "pureMD5")) + (hsPkgs."extra" or (errorHandler.buildDepError "extra")) + ]; + buildable = true; + }; + exes = { + "mateamt" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."mateamt" or (errorHandler.buildDepError "mateamt")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."time" or (errorHandler.buildDepError "time")) + (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."base16-bytestring" or (errorHandler.buildDepError "base16-bytestring")) + (hsPkgs."opaleye" or (errorHandler.buildDepError "opaleye")) + (hsPkgs."postgresql-simple" or (errorHandler.buildDepError "postgresql-simple")) + (hsPkgs."postgresql-simple-migration" or (errorHandler.buildDepError "postgresql-simple-migration")) + (hsPkgs."stm" or (errorHandler.buildDepError "stm")) + (hsPkgs."network" or (errorHandler.buildDepError "network")) + (hsPkgs."servant" or (errorHandler.buildDepError "servant")) + (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) + (hsPkgs."warp" or (errorHandler.buildDepError "warp")) + (hsPkgs."wai" or (errorHandler.buildDepError "wai")) + (hsPkgs."wai-logger" or (errorHandler.buildDepError "wai-logger")) + (hsPkgs."wai-middleware-throttle" or (errorHandler.buildDepError "wai-middleware-throttle")) + (hsPkgs."HsYAML" or (errorHandler.buildDepError "HsYAML")) + (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) + (hsPkgs."case-insensitive" or (errorHandler.buildDepError "case-insensitive")) + (hsPkgs."iproute" or (errorHandler.buildDepError "iproute")) + (hsPkgs."clock" or (errorHandler.buildDepError "clock")) + ]; + buildable = true; + }; + }; + tests = { + "mateamt-test" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."mateamt" or (errorHandler.buildDepError "mateamt")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."time" or (errorHandler.buildDepError "time")) + (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."hspec" or (errorHandler.buildDepError "hspec")) + (hsPkgs."hspec-wai" or (errorHandler.buildDepError "hspec-wai")) + (hsPkgs."hspec-wai-json" or (errorHandler.buildDepError "hspec-wai-json")) + (hsPkgs."warp" or (errorHandler.buildDepError "warp")) + (hsPkgs."wai" or (errorHandler.buildDepError "wai")) + (hsPkgs."pg-transact" or (errorHandler.buildDepError "pg-transact")) + (hsPkgs."tmp-postgres" or (errorHandler.buildDepError "tmp-postgres")) + (hsPkgs."resource-pool" or (errorHandler.buildDepError "resource-pool")) + (hsPkgs."postgresql-simple" or (errorHandler.buildDepError "postgresql-simple")) + ]; + build-tools = [ + (hsPkgs.buildPackages.hspec-discover.components.exes.hspec-discover or (pkgs.buildPackages.hspec-discover or (errorHandler.buildToolDepError "hspec-discover:hspec-discover"))) + ]; + buildable = true; + }; + }; + }; + } // rec { src = (pkgs.lib).mkDefault .././../.; } \ No newline at end of file diff --git a/nix/default.nix b/nix/default.nix new file mode 100644 index 0000000..11b5d96 --- /dev/null +++ b/nix/default.nix @@ -0,0 +1,15 @@ +{ haskellNixSrc ? builtins.fetchTarball https://github.com/input-output-hk/haskell.nix/archive/master.tar.gz +, haskellNix ? import haskellNixSrc {} +, nixpkgs ? haskellNix.sources.nixpkgs }: + +let + pkgs = import nixpkgs haskellNix.nixpkgsArgs; + + pkgSet = pkgs.haskell-nix.mkCabalProjectPkgSet { + plan-pkgs = import ./pkgs.nix; + pkg-def-extras = []; + modules = []; + }; + +in + pkgSet.config.hsPkgs diff --git a/nix/pkgs.nix b/nix/pkgs.nix new file mode 100644 index 0000000..1091d02 --- /dev/null +++ b/nix/pkgs.nix @@ -0,0 +1,395 @@ +{ + pkgs = hackage: + { + packages = { + "warp".revision = (((hackage."warp")."3.3.13").revisions).default; + "postgresql-simple-migration".revision = (((hackage."postgresql-simple-migration")."0.1.15.0").revisions).default; + "cookie".revision = (((hackage."cookie")."0.4.5").revisions).default; + "void".revision = (((hackage."void")."0.7.3").revisions).default; + "byteorder".revision = (((hackage."byteorder")."1.0.4").revisions).default; + "singleton-bool".revision = (((hackage."singleton-bool")."0.1.5").revisions).default; + "tf-random".revision = (((hackage."tf-random")."0.5").revisions).default; + "Only".revision = (((hackage."Only")."0.1").revisions).default; + "cereal".revision = (((hackage."cereal")."0.5.8.1").revisions).default; + "exceptions".revision = (((hackage."exceptions")."0.10.4").revisions).default; + "binary".revision = (((hackage."binary")."0.8.8.0").revisions).default; + "attoparsec-iso8601".revision = (((hackage."attoparsec-iso8601")."1.0.2.0").revisions).default; + "product-profunctors".revision = (((hackage."product-profunctors")."0.11.0.1").revisions).default; + "ghc-prim".revision = (((hackage."ghc-prim")."0.6.1").revisions).default; + "utf8-string".revision = (((hackage."utf8-string")."1.0.2").revisions).default; + "hspec-wai".revision = (((hackage."hspec-wai")."0.11.0").revisions).default; + "old-time".revision = (((hackage."old-time")."1.1.0.3").revisions).default; + "bifunctors".revision = (((hackage."bifunctors")."5.5.10").revisions).default; + "hspec-wai-json".revision = (((hackage."hspec-wai-json")."0.11.0").revisions).default; + "extra".revision = (((hackage."extra")."1.7.9").revisions).default; + "split".revision = (((hackage."split")."0.2.3.4").revisions).default; + "data-fix".revision = (((hackage."data-fix")."0.3.0").revisions).default; + "stm".revision = (((hackage."stm")."2.5.0.0").revisions).default; + "dec".revision = (((hackage."dec")."0.0.3").revisions).default; + "unix-time".revision = (((hackage."unix-time")."0.4.7").revisions).default; + "http2".revision = (((hackage."http2")."2.0.5").revisions).default; + "base-compat-batteries".revision = (((hackage."base-compat-batteries")."0.11.2").revisions).default; + "appar".revision = (((hackage."appar")."0.1.8").revisions).default; + "hourglass".revision = (((hackage."hourglass")."0.2.12").revisions).default; + "case-insensitive".revision = (((hackage."case-insensitive")."1.2.1.0").revisions).default; + "network-byte-order".revision = (((hackage."network-byte-order")."0.1.6").revisions).default; + "sop-core".revision = (((hackage."sop-core")."0.5.0.1").revisions).default; + "unix".revision = (((hackage."unix")."2.7.2.2").revisions).default; + "mtl".revision = (((hackage."mtl")."2.2.2").revisions).default; + "network-uri".revision = (((hackage."network-uri")."2.6.3.0").revisions).default; + "network-info".revision = (((hackage."network-info")."0.2.0.10").revisions).default; + "asn1-parse".revision = (((hackage."asn1-parse")."0.9.5").revisions).default; + "servant-rawm-server".revision = (((hackage."servant-rawm-server")."1.0.0.1").revisions).default; + "zlib".revision = (((hackage."zlib")."0.6.2.2").revisions).default; + "rts".revision = (((hackage."rts")."1.0").revisions).default; + "mmorph".revision = (((hackage."mmorph")."1.1.3").revisions).default; + "easy-file".revision = (((hackage."easy-file")."0.2.2").revisions).default; + "servant-rawm".revision = (((hackage."servant-rawm")."1.0.0.0").revisions).default; + "th-expand-syns".revision = (((hackage."th-expand-syns")."0.4.6.0").revisions).default; + "cryptonite".revision = (((hackage."cryptonite")."0.28").revisions).default; + "postgresql-simple".revision = (((hackage."postgresql-simple")."0.6.4").revisions).default; + "clock".revision = (((hackage."clock")."0.8.2").revisions).default; + "safe-exceptions".revision = (((hackage."safe-exceptions")."0.1.7.1").revisions).default; + "cryptohash-md5".revision = (((hackage."cryptohash-md5")."0.11.100.1").revisions).default; + "th-orphans".revision = (((hackage."th-orphans")."0.13.11").revisions).default; + "pem".revision = (((hackage."pem")."0.2.4").revisions).default; + "http-api-data".revision = (((hackage."http-api-data")."0.4.2").revisions).default; + "syb".revision = (((hackage."syb")."0.7.2.1").revisions).default; + "token-bucket".revision = (((hackage."token-bucket")."0.1.0.1").revisions).default; + "distributive".revision = (((hackage."distributive")."0.6.2.1").revisions).default; + "asn1-encoding".revision = (((hackage."asn1-encoding")."0.9.6").revisions).default; + "bytestring-builder".revision = (((hackage."bytestring-builder")."0.10.8.2.0").revisions).default; + "QuickCheck".revision = (((hackage."QuickCheck")."2.14.2").revisions).default; + "scientific".revision = (((hackage."scientific")."0.3.6.2").revisions).default; + "time-manager".revision = (((hackage."time-manager")."0.0.0").revisions).default; + "hspec-discover".revision = (((hackage."hspec-discover")."2.7.8").revisions).default; + "aeson-qq".revision = (((hackage."aeson-qq")."0.8.3").revisions).default; + "deepseq".revision = (((hackage."deepseq")."1.4.4.0").revisions).default; + "haskell-src-meta".revision = (((hackage."haskell-src-meta")."0.8.5").revisions).default; + "random".revision = (((hackage."random")."1.1").revisions).default; + "temporary".revision = (((hackage."temporary")."1.3").revisions).default; + "opaleye".revision = (((hackage."opaleye")."0.7.1.0").revisions).default; + "uuid-types".revision = (((hackage."uuid-types")."1.0.3").revisions).default; + "string-conversions".revision = (((hackage."string-conversions")."0.4.0.1").revisions).default; + "optparse-applicative".revision = (((hackage."optparse-applicative")."0.16.1.0").revisions).default; + "network".revision = (((hackage."network")."3.1.2.1").revisions).default; + "word8".revision = (((hackage."word8")."0.1.3").revisions).default; + "crypto-api".revision = (((hackage."crypto-api")."0.13.3").revisions).default; + "splitmix".revision = (((hackage."splitmix")."0.1.0.3").revisions).default; + "async".revision = (((hackage."async")."2.2.2").revisions).default; + "dlist".revision = (((hackage."dlist")."1.0").revisions).default; + "postgres-options".revision = (((hackage."postgres-options")."0.2.0.0").revisions).default; + "semigroups".revision = (((hackage."semigroups")."0.19.1").revisions).default; + "HUnit".revision = (((hackage."HUnit")."1.6.2.0").revisions).default; + "pureMD5".revision = (((hackage."pureMD5")."2.1.3").revisions).default; + "parsec".revision = (((hackage."parsec")."3.1.14.0").revisions).default; + "th-reify-many".revision = (((hackage."th-reify-many")."0.1.9").revisions).default; + "http-media".revision = (((hackage."http-media")."0.8.0.0").revisions).default; + "directory".revision = (((hackage."directory")."1.3.6.0").revisions).default; + "transformers-compat".revision = (((hackage."transformers-compat")."0.6.6").revisions).default; + "template-haskell".revision = (((hackage."template-haskell")."2.16.0.0").revisions).default; + "hspec-expectations".revision = (((hackage."hspec-expectations")."0.8.2").revisions).default; + "psqueues".revision = (((hackage."psqueues")."0.2.7.2").revisions).default; + "vector".revision = (((hackage."vector")."0.12.2.0").revisions).default; + "call-stack".revision = (((hackage."call-stack")."0.3.0").revisions).default; + "primitive".revision = (((hackage."primitive")."0.7.1.0").revisions).default; + "cryptohash".revision = (((hackage."cryptohash")."0.11.9").revisions).default; + "profunctors".revision = (((hackage."profunctors")."5.6.1").revisions).default; + "time-locale-compat".revision = (((hackage."time-locale-compat")."0.1.1.5").revisions).default; + "safe".revision = (((hackage."safe")."0.3.19").revisions).default; + "blaze-builder".revision = (((hackage."blaze-builder")."0.4.2.1").revisions).default; + "base-compat".revision = (((hackage."base-compat")."0.11.2").revisions).default; + "math-functions".revision = (((hackage."math-functions")."0.3.4.1").revisions).default; + "uri-bytestring".revision = (((hackage."uri-bytestring")."0.3.3.0").revisions).default; + "time-compat".revision = (((hackage."time-compat")."1.9.5").revisions).default; + "cache".revision = (((hackage."cache")."0.1.3.0").revisions).default; + "ansi-terminal".revision = (((hackage."ansi-terminal")."0.11").revisions).default; + "tagged".revision = (((hackage."tagged")."0.8.6.1").revisions).default; + "x509".revision = (((hackage."x509")."1.7.5").revisions).default; + "haskell-src-exts".revision = (((hackage."haskell-src-exts")."1.23.1").revisions).default; + "unliftio-core".revision = (((hackage."unliftio-core")."0.2.0.1").revisions).default; + "containers".revision = (((hackage."containers")."0.6.2.1").revisions).default; + "integer-logarithms".revision = (((hackage."integer-logarithms")."1.0.3.1").revisions).default; + "these".revision = (((hackage."these")."1.1.1.1").revisions).default; + "tmp-postgres".revision = (((hackage."tmp-postgres")."1.34.1.0").revisions).default; + "streaming-commons".revision = (((hackage."streaming-commons")."0.2.2.1").revisions).default; + "bytestring".revision = (((hackage."bytestring")."0.10.12.0").revisions).default; + "ansi-wl-pprint".revision = (((hackage."ansi-wl-pprint")."0.6.9").revisions).default; + "mwc-random".revision = (((hackage."mwc-random")."0.14.0.0").revisions).default; + "wai".revision = (((hackage."wai")."3.2.3").revisions).default; + "basement".revision = (((hackage."basement")."0.0.11").revisions).default; + "setenv".revision = (((hackage."setenv")."0.1.1.3").revisions).default; + "cryptohash-sha1".revision = (((hackage."cryptohash-sha1")."0.11.100.1").revisions).default; + "old-locale".revision = (((hackage."old-locale")."1.0.0.7").revisions).default; + "StateVar".revision = (((hackage."StateVar")."1.2.1").revisions).default; + "vault".revision = (((hackage."vault")."0.3.1.4").revisions).default; + "mime-types".revision = (((hackage."mime-types")."0.1.0.9").revisions).default; + "pcg-random".revision = (((hackage."pcg-random")."0.1.3.7").revisions).default; + "contravariant".revision = (((hackage."contravariant")."1.5.3").revisions).default; + "generic-monoid".revision = (((hackage."generic-monoid")."0.1.0.1").revisions).default; + "HsYAML".revision = (((hackage."HsYAML")."0.2.1.0").revisions).default; + "indexed-traversable".revision = (((hackage."indexed-traversable")."0.1.1").revisions).default; + "blaze-markup".revision = (((hackage."blaze-markup")."0.8.2.7").revisions).default; + "postgresql-libpq".revision = (((hackage."postgresql-libpq")."0.9.4.3").revisions).default; + "uuid".revision = (((hackage."uuid")."1.3.13").revisions).default; + "text".revision = (((hackage."text")."1.2.4.1").revisions).default; + "assoc".revision = (((hackage."assoc")."1.0.2").revisions).default; + "unordered-containers".revision = (((hackage."unordered-containers")."0.2.13.0").revisions).default; + "base64-bytestring".revision = (((hackage."base64-bytestring")."1.0.0.3").revisions).default; + "base".revision = (((hackage."base")."4.14.1.0").revisions).default; + "comonad".revision = (((hackage."comonad")."5.0.8").revisions).default; + "hspec".revision = (((hackage."hspec")."2.7.8").revisions).default; + "time".revision = (((hackage."time")."1.9.3").revisions).default; + "th-compat".revision = (((hackage."th-compat")."0.1").revisions).default; + "data-default-class".revision = (((hackage."data-default-class")."0.1.2.0").revisions).default; + "base16-bytestring".revision = (((hackage."base16-bytestring")."1.0.1.0").revisions).default; + "iproute".revision = (((hackage."iproute")."1.7.10").revisions).default; + "transformers".revision = (((hackage."transformers")."0.5.6.2").revisions).default; + "hashable".revision = (((hackage."hashable")."1.3.0.0").revisions).default; + "quickcheck-io".revision = (((hackage."quickcheck-io")."0.2.0").revisions).default; + "wai-extra".revision = (((hackage."wai-extra")."3.1.6").revisions).default; + "attoparsec".revision = (((hackage."attoparsec")."0.13.2.4").revisions).default; + "blaze-html".revision = (((hackage."blaze-html")."0.9.1.2").revisions).default; + "colour".revision = (((hackage."colour")."2.3.5").revisions).default; + "transformers-base".revision = (((hackage."transformers-base")."0.4.5.2").revisions).default; + "file-embed".revision = (((hackage."file-embed")."0.0.13.0").revisions).default; + "byteable".revision = (((hackage."byteable")."0.1.1").revisions).default; + "strict".revision = (((hackage."strict")."0.4.0.1").revisions).default; + "entropy".revision = (((hackage."entropy")."0.4.1.6").revisions).default; + "wai-middleware-throttle".revision = (((hackage."wai-middleware-throttle")."0.3.0.1").revisions).default; + "filepath".revision = (((hackage."filepath")."1.4.2.1").revisions).default; + "auto-update".revision = (((hackage."auto-update")."0.1.6").revisions).default; + "resource-pool".revision = (((hackage."resource-pool")."0.2.3.2").revisions).default; + "asn1-types".revision = (((hackage."asn1-types")."0.3.4").revisions).default; + "port-utils".revision = (((hackage."port-utils")."0.2.1.0").revisions).default; + "hspec-core".revision = (((hackage."hspec-core")."2.7.8").revisions).default; + "unix-compat".revision = (((hackage."unix-compat")."0.5.3").revisions).default; + "monad-control".revision = (((hackage."monad-control")."1.0.2.3").revisions).default; + "process".revision = (((hackage."process")."1.6.9.0").revisions).default; + "pg-transact".revision = (((hackage."pg-transact")."0.3.1.1").revisions).default; + "wai-logger".revision = (((hackage."wai-logger")."2.3.6").revisions).default; + "th-lift".revision = (((hackage."th-lift")."0.8.2").revisions).default; + "resourcet".revision = (((hackage."resourcet")."1.2.4.2").revisions).default; + "pretty".revision = (((hackage."pretty")."1.1.3.6").revisions).default; + "aeson".revision = (((hackage."aeson")."1.5.5.1").revisions).default; + "wai-app-static".revision = (((hackage."wai-app-static")."3.1.7.2").revisions).default; + "http-types".revision = (((hackage."http-types")."0.12.3").revisions).default; + "ghc-boot-th".revision = (((hackage."ghc-boot-th")."8.10.3").revisions).default; + "th-lift-instances".revision = (((hackage."th-lift-instances")."0.1.18").revisions).default; + "servant-server".revision = (((hackage."servant-server")."0.18.2").revisions).default; + "base-orphans".revision = (((hackage."base-orphans")."0.8.4").revisions).default; + "http-date".revision = (((hackage."http-date")."0.0.10").revisions).default; + "random-bytestring".revision = (((hackage."random-bytestring")."0.1.3.2").revisions).default; + "servant".revision = (((hackage."servant")."0.18.2").revisions).default; + "th-abstraction".revision = (((hackage."th-abstraction")."0.4.2.0").revisions).default; + "memory".revision = (((hackage."memory")."0.15.0").revisions).default; + "fast-logger".revision = (((hackage."fast-logger")."3.0.2").revisions).default; + "bsb-http-chunked".revision = (((hackage."bsb-http-chunked")."0.0.0.4").revisions).default; + "array".revision = (((hackage."array")."0.5.4.0").revisions).default; + "simple-sendfile".revision = (((hackage."simple-sendfile")."0.2.30").revisions).default; + "integer-gmp".revision = (((hackage."integer-gmp")."1.0.3.0").revisions).default; + }; + compiler = { + version = "8.10.3"; + nix-name = "ghc8103"; + packages = { + "warp" = "3.3.13"; + "postgresql-simple-migration" = "0.1.15.0"; + "cookie" = "0.4.5"; + "void" = "0.7.3"; + "byteorder" = "1.0.4"; + "singleton-bool" = "0.1.5"; + "tf-random" = "0.5"; + "Only" = "0.1"; + "cereal" = "0.5.8.1"; + "exceptions" = "0.10.4"; + "binary" = "0.8.8.0"; + "attoparsec-iso8601" = "1.0.2.0"; + "product-profunctors" = "0.11.0.1"; + "ghc-prim" = "0.6.1"; + "utf8-string" = "1.0.2"; + "hspec-wai" = "0.11.0"; + "old-time" = "1.1.0.3"; + "bifunctors" = "5.5.10"; + "hspec-wai-json" = "0.11.0"; + "extra" = "1.7.9"; + "split" = "0.2.3.4"; + "data-fix" = "0.3.0"; + "stm" = "2.5.0.0"; + "dec" = "0.0.3"; + "unix-time" = "0.4.7"; + "http2" = "2.0.5"; + "base-compat-batteries" = "0.11.2"; + "appar" = "0.1.8"; + "hourglass" = "0.2.12"; + "case-insensitive" = "1.2.1.0"; + "network-byte-order" = "0.1.6"; + "sop-core" = "0.5.0.1"; + "unix" = "2.7.2.2"; + "mtl" = "2.2.2"; + "network-uri" = "2.6.3.0"; + "network-info" = "0.2.0.10"; + "asn1-parse" = "0.9.5"; + "servant-rawm-server" = "1.0.0.1"; + "zlib" = "0.6.2.2"; + "rts" = "1.0"; + "mmorph" = "1.1.3"; + "easy-file" = "0.2.2"; + "servant-rawm" = "1.0.0.0"; + "th-expand-syns" = "0.4.6.0"; + "cryptonite" = "0.28"; + "postgresql-simple" = "0.6.4"; + "clock" = "0.8.2"; + "safe-exceptions" = "0.1.7.1"; + "cryptohash-md5" = "0.11.100.1"; + "th-orphans" = "0.13.11"; + "pem" = "0.2.4"; + "http-api-data" = "0.4.2"; + "syb" = "0.7.2.1"; + "token-bucket" = "0.1.0.1"; + "distributive" = "0.6.2.1"; + "asn1-encoding" = "0.9.6"; + "bytestring-builder" = "0.10.8.2.0"; + "QuickCheck" = "2.14.2"; + "scientific" = "0.3.6.2"; + "time-manager" = "0.0.0"; + "hspec-discover" = "2.7.8"; + "aeson-qq" = "0.8.3"; + "deepseq" = "1.4.4.0"; + "haskell-src-meta" = "0.8.5"; + "random" = "1.1"; + "temporary" = "1.3"; + "opaleye" = "0.7.1.0"; + "uuid-types" = "1.0.3"; + "string-conversions" = "0.4.0.1"; + "optparse-applicative" = "0.16.1.0"; + "network" = "3.1.2.1"; + "word8" = "0.1.3"; + "crypto-api" = "0.13.3"; + "splitmix" = "0.1.0.3"; + "async" = "2.2.2"; + "dlist" = "1.0"; + "postgres-options" = "0.2.0.0"; + "semigroups" = "0.19.1"; + "HUnit" = "1.6.2.0"; + "pureMD5" = "2.1.3"; + "parsec" = "3.1.14.0"; + "th-reify-many" = "0.1.9"; + "http-media" = "0.8.0.0"; + "directory" = "1.3.6.0"; + "transformers-compat" = "0.6.6"; + "template-haskell" = "2.16.0.0"; + "hspec-expectations" = "0.8.2"; + "psqueues" = "0.2.7.2"; + "vector" = "0.12.2.0"; + "call-stack" = "0.3.0"; + "primitive" = "0.7.1.0"; + "cryptohash" = "0.11.9"; + "profunctors" = "5.6.1"; + "time-locale-compat" = "0.1.1.5"; + "safe" = "0.3.19"; + "blaze-builder" = "0.4.2.1"; + "base-compat" = "0.11.2"; + "math-functions" = "0.3.4.1"; + "uri-bytestring" = "0.3.3.0"; + "time-compat" = "1.9.5"; + "cache" = "0.1.3.0"; + "ansi-terminal" = "0.11"; + "tagged" = "0.8.6.1"; + "x509" = "1.7.5"; + "haskell-src-exts" = "1.23.1"; + "unliftio-core" = "0.2.0.1"; + "containers" = "0.6.2.1"; + "integer-logarithms" = "1.0.3.1"; + "these" = "1.1.1.1"; + "tmp-postgres" = "1.34.1.0"; + "streaming-commons" = "0.2.2.1"; + "bytestring" = "0.10.12.0"; + "ansi-wl-pprint" = "0.6.9"; + "mwc-random" = "0.14.0.0"; + "wai" = "3.2.3"; + "basement" = "0.0.11"; + "setenv" = "0.1.1.3"; + "cryptohash-sha1" = "0.11.100.1"; + "old-locale" = "1.0.0.7"; + "StateVar" = "1.2.1"; + "vault" = "0.3.1.4"; + "mime-types" = "0.1.0.9"; + "pcg-random" = "0.1.3.7"; + "contravariant" = "1.5.3"; + "generic-monoid" = "0.1.0.1"; + "HsYAML" = "0.2.1.0"; + "indexed-traversable" = "0.1.1"; + "blaze-markup" = "0.8.2.7"; + "postgresql-libpq" = "0.9.4.3"; + "uuid" = "1.3.13"; + "text" = "1.2.4.1"; + "assoc" = "1.0.2"; + "unordered-containers" = "0.2.13.0"; + "base64-bytestring" = "1.0.0.3"; + "base" = "4.14.1.0"; + "comonad" = "5.0.8"; + "hspec" = "2.7.8"; + "time" = "1.9.3"; + "th-compat" = "0.1"; + "data-default-class" = "0.1.2.0"; + "base16-bytestring" = "1.0.1.0"; + "iproute" = "1.7.10"; + "transformers" = "0.5.6.2"; + "hashable" = "1.3.0.0"; + "quickcheck-io" = "0.2.0"; + "wai-extra" = "3.1.6"; + "attoparsec" = "0.13.2.4"; + "blaze-html" = "0.9.1.2"; + "colour" = "2.3.5"; + "transformers-base" = "0.4.5.2"; + "file-embed" = "0.0.13.0"; + "byteable" = "0.1.1"; + "strict" = "0.4.0.1"; + "entropy" = "0.4.1.6"; + "wai-middleware-throttle" = "0.3.0.1"; + "filepath" = "1.4.2.1"; + "auto-update" = "0.1.6"; + "resource-pool" = "0.2.3.2"; + "asn1-types" = "0.3.4"; + "port-utils" = "0.2.1.0"; + "hspec-core" = "2.7.8"; + "unix-compat" = "0.5.3"; + "monad-control" = "1.0.2.3"; + "process" = "1.6.9.0"; + "pg-transact" = "0.3.1.1"; + "wai-logger" = "2.3.6"; + "th-lift" = "0.8.2"; + "resourcet" = "1.2.4.2"; + "pretty" = "1.1.3.6"; + "aeson" = "1.5.5.1"; + "wai-app-static" = "3.1.7.2"; + "http-types" = "0.12.3"; + "ghc-boot-th" = "8.10.3"; + "th-lift-instances" = "0.1.18"; + "servant-server" = "0.18.2"; + "base-orphans" = "0.8.4"; + "http-date" = "0.0.10"; + "random-bytestring" = "0.1.3.2"; + "servant" = "0.18.2"; + "th-abstraction" = "0.4.2.0"; + "memory" = "0.15.0"; + "fast-logger" = "3.0.2"; + "bsb-http-chunked" = "0.0.0.4"; + "array" = "0.5.4.0"; + "simple-sendfile" = "0.2.30"; + "integer-gmp" = "1.0.3.0"; + }; + }; + }; + extras = hackage: + { packages = { mateamt = ./.plan.nix/mateamt.nix; }; }; + modules = [ + ({ lib, ... }: + { + packages = { + "mateamt" = { flags = { "develop" = lib.mkOverride 900 false; }; }; + }; + }) + ]; + } \ No newline at end of file diff --git a/nix/sources.json b/nix/sources.json new file mode 100644 index 0000000..d575d6e --- /dev/null +++ b/nix/sources.json @@ -0,0 +1,38 @@ +{ + "haskellNix": { + "branch": "master", + "description": "Alternative Haskell Infrastructure for Nixpkgs", + "homepage": "https://input-output-hk.github.io/haskell.nix", + "owner": "input-output-hk", + "repo": "haskell.nix", + "rev": "70e3bc77ce844b59e235e5ae48364862f1b229b2", + "sha256": "0pmmr85xpx3ciwra8gxg6qh5vrg925wbwzgc820f3rn989xc1c72", + "type": "tarball", + "url": "https://github.com/input-output-hk/haskell.nix/archive/70e3bc77ce844b59e235e5ae48364862f1b229b2.tar.gz", + "url_template": "https://github.com///archive/.tar.gz" + }, + "niv": { + "branch": "master", + "description": "Easy dependency management for Nix projects", + "homepage": "https://github.com/nmattia/niv", + "owner": "nmattia", + "repo": "niv", + "rev": "1819632b5823e0527da28ad82fecd6be5136c1e9", + "sha256": "08jz17756qchq0zrqmapcm33nr4ms9f630mycc06i6zkfwl5yh5i", + "type": "tarball", + "url": "https://github.com/nmattia/niv/archive/1819632b5823e0527da28ad82fecd6be5136c1e9.tar.gz", + "url_template": "https://github.com///archive/.tar.gz" + }, + "nixpkgs": { + "branch": "release-21.05", + "description": "Nix Packages collection", + "homepage": "", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "43e16aa54fd8d73553f210b1be3d63ec1ee43f2c", + "sha256": "026bcvkmnph9wsjjpb6bwllcf445310infwg61givhz0y5hjdxfx", + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/43e16aa54fd8d73553f210b1be3d63ec1ee43f2c.tar.gz", + "url_template": "https://github.com///archive/.tar.gz" + } +} diff --git a/nix/sources.nix b/nix/sources.nix new file mode 100644 index 0000000..1938409 --- /dev/null +++ b/nix/sources.nix @@ -0,0 +1,174 @@ +# This file has been generated by Niv. + +let + + # + # The fetchers. fetch_ fetches specs of type . + # + + fetch_file = pkgs: name: spec: + let + name' = sanitizeName name + "-src"; + in + if spec.builtin or true then + builtins_fetchurl { inherit (spec) url sha256; name = name'; } + else + pkgs.fetchurl { inherit (spec) url sha256; name = name'; }; + + fetch_tarball = pkgs: name: spec: + let + name' = sanitizeName name + "-src"; + in + if spec.builtin or true then + builtins_fetchTarball { name = name'; inherit (spec) url sha256; } + else + pkgs.fetchzip { name = name'; inherit (spec) url sha256; }; + + fetch_git = name: spec: + let + ref = + if spec ? ref then spec.ref else + if spec ? branch then "refs/heads/${spec.branch}" else + if spec ? tag then "refs/tags/${spec.tag}" else + abort "In git source '${name}': Please specify `ref`, `tag` or `branch`!"; + in + builtins.fetchGit { url = spec.repo; inherit (spec) rev; inherit ref; }; + + fetch_local = spec: spec.path; + + fetch_builtin-tarball = name: throw + ''[${name}] The niv type "builtin-tarball" is deprecated. You should instead use `builtin = true`. + $ niv modify ${name} -a type=tarball -a builtin=true''; + + fetch_builtin-url = name: throw + ''[${name}] The niv type "builtin-url" will soon be deprecated. You should instead use `builtin = true`. + $ niv modify ${name} -a type=file -a builtin=true''; + + # + # Various helpers + # + + # https://github.com/NixOS/nixpkgs/pull/83241/files#diff-c6f540a4f3bfa4b0e8b6bafd4cd54e8bR695 + sanitizeName = name: + ( + concatMapStrings (s: if builtins.isList s then "-" else s) + ( + builtins.split "[^[:alnum:]+._?=-]+" + ((x: builtins.elemAt (builtins.match "\\.*(.*)" x) 0) name) + ) + ); + + # The set of packages used when specs are fetched using non-builtins. + mkPkgs = sources: system: + let + sourcesNixpkgs = + import (builtins_fetchTarball { inherit (sources.nixpkgs) url sha256; }) { inherit system; }; + hasNixpkgsPath = builtins.any (x: x.prefix == "nixpkgs") builtins.nixPath; + hasThisAsNixpkgsPath = == ./.; + in + if builtins.hasAttr "nixpkgs" sources + then sourcesNixpkgs + else if hasNixpkgsPath && ! hasThisAsNixpkgsPath then + import {} + else + abort + '' + Please specify either (through -I or NIX_PATH=nixpkgs=...) or + add a package called "nixpkgs" to your sources.json. + ''; + + # The actual fetching function. + fetch = pkgs: name: spec: + + if ! builtins.hasAttr "type" spec then + abort "ERROR: niv spec ${name} does not have a 'type' attribute" + else if spec.type == "file" then fetch_file pkgs name spec + else if spec.type == "tarball" then fetch_tarball pkgs name spec + else if spec.type == "git" then fetch_git name spec + else if spec.type == "local" then fetch_local spec + else if spec.type == "builtin-tarball" then fetch_builtin-tarball name + else if spec.type == "builtin-url" then fetch_builtin-url name + else + abort "ERROR: niv spec ${name} has unknown type ${builtins.toJSON spec.type}"; + + # If the environment variable NIV_OVERRIDE_${name} is set, then use + # the path directly as opposed to the fetched source. + replace = name: drv: + let + saneName = stringAsChars (c: if isNull (builtins.match "[a-zA-Z0-9]" c) then "_" else c) name; + ersatz = builtins.getEnv "NIV_OVERRIDE_${saneName}"; + in + if ersatz == "" then drv else + # this turns the string into an actual Nix path (for both absolute and + # relative paths) + if builtins.substring 0 1 ersatz == "/" then /. + ersatz else /. + builtins.getEnv "PWD" + "/${ersatz}"; + + # Ports of functions for older nix versions + + # a Nix version of mapAttrs if the built-in doesn't exist + mapAttrs = builtins.mapAttrs or ( + f: set: with builtins; + listToAttrs (map (attr: { name = attr; value = f attr set.${attr}; }) (attrNames set)) + ); + + # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/lists.nix#L295 + range = first: last: if first > last then [] else builtins.genList (n: first + n) (last - first + 1); + + # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L257 + stringToCharacters = s: map (p: builtins.substring p 1 s) (range 0 (builtins.stringLength s - 1)); + + # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L269 + stringAsChars = f: s: concatStrings (map f (stringToCharacters s)); + concatMapStrings = f: list: concatStrings (map f list); + concatStrings = builtins.concatStringsSep ""; + + # https://github.com/NixOS/nixpkgs/blob/8a9f58a375c401b96da862d969f66429def1d118/lib/attrsets.nix#L331 + optionalAttrs = cond: as: if cond then as else {}; + + # fetchTarball version that is compatible between all the versions of Nix + builtins_fetchTarball = { url, name ? null, sha256 }@attrs: + let + inherit (builtins) lessThan nixVersion fetchTarball; + in + if lessThan nixVersion "1.12" then + fetchTarball ({ inherit url; } // (optionalAttrs (!isNull name) { inherit name; })) + else + fetchTarball attrs; + + # fetchurl version that is compatible between all the versions of Nix + builtins_fetchurl = { url, name ? null, sha256 }@attrs: + let + inherit (builtins) lessThan nixVersion fetchurl; + in + if lessThan nixVersion "1.12" then + fetchurl ({ inherit url; } // (optionalAttrs (!isNull name) { inherit name; })) + else + fetchurl attrs; + + # Create the final "sources" from the config + mkSources = config: + mapAttrs ( + name: spec: + if builtins.hasAttr "outPath" spec + then abort + "The values in sources.json should not have an 'outPath' attribute" + else + spec // { outPath = replace name (fetch config.pkgs name spec); } + ) config.sources; + + # The "config" used by the fetchers + mkConfig = + { sourcesFile ? if builtins.pathExists ./sources.json then ./sources.json else null + , sources ? if isNull sourcesFile then {} else builtins.fromJSON (builtins.readFile sourcesFile) + , system ? builtins.currentSystem + , pkgs ? mkPkgs sources system + }: rec { + # The sources, i.e. the attribute set of spec name to spec + inherit sources; + + # The "pkgs" (evaluated nixpkgs) to use for e.g. non-builtin fetchers + inherit pkgs; + }; + +in +mkSources (mkConfig {}) // { __functor = _: settings: mkSources (mkConfig settings); } diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..5155480 --- /dev/null +++ b/shell.nix @@ -0,0 +1,37 @@ +let + project = import ./default.nix; +in + project.shellFor { + # ALL of these arguments are optional. + + # List of packages from the project you want to work on in + # the shell (default is all the projects local packages). + #packages = ps: with ps; [ + #]; + + # Builds a Hoogle documentation index of all dependencies, + # and provides a "hoogle" command to search the index. + withHoogle = true; + + # Some common tools can be added with the `tools` argument + tools = { + cabal = "latest"; # Selects the latest version in the hackage.nix snapshot + hlint = "latest"; # Selects the latest version in the hackage.nix snapshot + haskell-language-server = "latest"; + hspec-discover = "latest"; + }; + # See overlays/tools.nix for more details + + # Some you may need to get some other way. + buildInputs = [ (import {}).git ]; + + # Sellect cross compilers to include. + crossPlatforms = ps: with ps; [ + #ghcjs # Adds support for `js-unknown-ghcjs-cabal build` in the shell + # mingwW64 # Adds support for `x86_64-W64-mingw32-cabal build` in the shell + ]; + + # Prevents cabal from choosing alternate plans, so that + # *all* dependencies are provided by Nix. + exactDeps = false; + }