flake.nix (3758B)
1 { 2 description = "Pure Haskell Schnorr, ECDSA on secp256k1"; 3 4 inputs = { 5 ppad-nixpkgs = { 6 type = "git"; 7 url = "git://git.ppad.tech/nixpkgs.git"; 8 ref = "master"; 9 }; 10 ppad-base16 = { 11 type = "git"; 12 url = "git://git.ppad.tech/base16.git"; 13 ref = "master"; 14 inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; 15 }; 16 ppad-sha256 = { 17 type = "git"; 18 url = "git://git.ppad.tech/sha256.git"; 19 ref = "master"; 20 inputs.ppad-base16.follows = "ppad-base16"; 21 inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; 22 }; 23 # transitive dependency via ppad-hmac-drbg 24 ppad-sha512 = { 25 type = "git"; 26 url = "git://git.ppad.tech/sha512.git"; 27 ref = "master"; 28 inputs.ppad-base16.follows = "ppad-base16"; 29 inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; 30 }; 31 ppad-hmac-drbg = { 32 type = "git"; 33 url = "git://git.ppad.tech/hmac-drbg.git"; 34 ref = "master"; 35 inputs.ppad-base16.follows = "ppad-base16"; 36 inputs.ppad-sha256.follows = "ppad-sha256"; 37 inputs.ppad-sha512.follows = "ppad-sha512"; 38 inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; 39 }; 40 ppad-fixed = { 41 type = "git"; 42 url = "git://git.ppad.tech/fixed.git"; 43 ref = "master"; 44 inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; 45 }; 46 flake-utils.follows = "ppad-nixpkgs/flake-utils"; 47 nixpkgs.follows = "ppad-nixpkgs/nixpkgs"; 48 }; 49 50 outputs = { self, nixpkgs, flake-utils, ppad-nixpkgs 51 , ppad-base16 52 , ppad-sha256, ppad-sha512 53 , ppad-hmac-drbg 54 , ppad-fixed 55 }: 56 flake-utils.lib.eachDefaultSystem (system: 57 let 58 lib = "ppad-secp256k1"; 59 60 pkgs = import nixpkgs { inherit system; }; 61 hlib = pkgs.haskell.lib; 62 llvm = pkgs.llvmPackages_15.llvm; 63 64 base16 = ppad-base16.packages.${system}.default; 65 66 fixed = ppad-fixed.packages.${system}.default; 67 fixed-llvm = 68 hlib.addBuildTools 69 (hlib.enableCabalFlag fixed "llvm") 70 [ llvm ]; 71 72 sha256 = ppad-sha256.packages.${system}.default; 73 sha256-llvm = 74 hlib.addBuildTools 75 (hlib.enableCabalFlag sha256 "llvm") 76 [ llvm ]; 77 78 hmac-drbg = ppad-hmac-drbg.packages.${system}.default; 79 hmac-drbg-llvm = 80 hlib.addBuildTools 81 (hlib.enableCabalFlag hmac-drbg "llvm") 82 [ llvm ]; 83 84 hpkgs = pkgs.haskell.packages.ghc981.extend (new: old: { 85 ppad-base16 = base16; 86 ppad-sha256 = sha256-llvm; 87 ppad-hmac-drbg = hmac-drbg-llvm; 88 ppad-fixed = fixed-llvm; 89 ${lib} = new.callCabal2nix lib ./. { 90 ppad-base16 = new.ppad-base16; 91 ppad-sha256 = new.ppad-sha256; 92 ppad-hmac-drbg = new.ppad-hmac-drbg; 93 ppad-fixed = new.ppad-fixed; 94 }; 95 }); 96 97 cabal = hpkgs.cabal-install; 98 cc = pkgs.stdenv.cc; 99 ghc = hpkgs.ghc; 100 in 101 { 102 packages.default = hpkgs.${lib}; 103 104 devShells.default = hpkgs.shellFor { 105 packages = p: [ 106 (hlib.doBenchmark p.${lib}) 107 ]; 108 109 buildInputs = [ 110 cabal 111 cc 112 llvm 113 ]; 114 115 doBenchmark = true; 116 117 shellHook = '' 118 PS1="[${lib}] \w$ " 119 echo "entering ${system} shell, using" 120 echo "cabal: $(${cabal}/bin/cabal --version)" 121 echo "cc: $(${cc}/bin/cc --version)" 122 echo "ghc: $(${ghc}/bin/ghc --version)" 123 echo "llc: $(${llvm}/bin/llc --version | head -2 | tail -1)" 124 ''; 125 }; 126 } 127 ); 128 } 129