flake.nix (4105B)
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 = "github"; 33 owner = "ppad-tech"; 34 repo = "hmac-drbg"; 35 # XX temporarily using github mirror 36 # url = "git://git.ppad.tech/hmac-drbg.git"; 37 # ref = "master"; 38 inputs.ppad-base16.follows = "ppad-base16"; 39 inputs.ppad-sha256.follows = "ppad-sha256"; 40 inputs.ppad-sha512.follows = "ppad-sha512"; 41 inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; 42 }; 43 ppad-fixed = { 44 type = "git"; 45 url = "git://git.ppad.tech/fixed.git"; 46 ref = "master"; 47 inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; 48 }; 49 flake-utils.follows = "ppad-nixpkgs/flake-utils"; 50 nixpkgs.follows = "ppad-nixpkgs/nixpkgs"; 51 }; 52 53 outputs = { self, nixpkgs, flake-utils, ppad-nixpkgs 54 , ppad-base16 55 , ppad-sha256, ppad-sha512 56 , ppad-hmac-drbg 57 , ppad-fixed 58 }: 59 flake-utils.lib.eachDefaultSystem (system: 60 let 61 lib = "ppad-secp256k1"; 62 63 pkgs = import nixpkgs { inherit system; }; 64 hlib = pkgs.haskell.lib; 65 llvm = pkgs.llvmPackages_19.llvm; 66 clang = pkgs.llvmPackages_19.clang; 67 68 base16 = ppad-base16.packages.${system}.default; 69 base16-llvm = 70 hlib.addBuildTools 71 (hlib.enableCabalFlag base16 "llvm") 72 [ llvm clang ]; 73 74 fixed = ppad-fixed.packages.${system}.default; 75 fixed-llvm = 76 hlib.addBuildTools 77 (hlib.enableCabalFlag fixed "llvm") 78 [ llvm clang ]; 79 80 sha256 = ppad-sha256.packages.${system}.default; 81 sha256-llvm = 82 hlib.addBuildTools 83 (hlib.enableCabalFlag sha256 "llvm") 84 [ llvm clang ]; 85 86 hmac-drbg = ppad-hmac-drbg.packages.${system}.default; 87 hmac-drbg-llvm = 88 hlib.addBuildTools 89 (hlib.enableCabalFlag hmac-drbg "llvm") 90 [ llvm clang ]; 91 92 hpkgs = pkgs.haskell.packages.ghc910.extend (new: old: { 93 ppad-base16 = base16-llvm; 94 ppad-sha256 = sha256-llvm; 95 ppad-hmac-drbg = hmac-drbg-llvm; 96 ppad-fixed = fixed-llvm; 97 ${lib} = new.callCabal2nix lib ./. { 98 ppad-base16 = new.ppad-base16; 99 ppad-sha256 = new.ppad-sha256; 100 ppad-hmac-drbg = new.ppad-hmac-drbg; 101 ppad-fixed = new.ppad-fixed; 102 }; 103 }); 104 105 cabal = hpkgs.cabal-install; 106 cc = pkgs.stdenv.cc; 107 ghc = hpkgs.ghc; 108 in 109 { 110 packages.default = hpkgs.${lib}; 111 112 packages.haddock = hpkgs.${lib}.doc; 113 114 devShells.default = hpkgs.shellFor { 115 packages = p: [ 116 (hlib.doBenchmark p.${lib}) 117 ]; 118 119 buildInputs = [ 120 cabal 121 cc 122 llvm 123 ]; 124 125 doBenchmark = true; 126 127 shellHook = '' 128 PS1="[${lib}] \w$ " 129 echo "entering ${system} shell, using" 130 echo "cabal: $(${cabal}/bin/cabal --version)" 131 echo "cc: $(${cc}/bin/cc --version)" 132 echo "ghc: $(${ghc}/bin/ghc --version)" 133 echo "llc: $(${llvm}/bin/llc --version | head -2 | tail -1)" 134 ''; 135 }; 136 } 137 ); 138 } 139