flake.nix (5350B)
1 { 2 description = "A Haskell implementation of BOLT4 (onion routing)."; 3 4 inputs = { 5 ppad-aead = { 6 type = "git"; 7 url = "git://git.ppad.tech/aead.git"; 8 ref = "master"; 9 inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; 10 inputs.ppad-chacha.follows = "ppad-chacha"; 11 }; 12 ppad-bolt1 = { 13 type = "git"; 14 url = "git://git.ppad.tech/bolt1.git"; 15 ref = "master"; 16 inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; 17 }; 18 ppad-base16 = { 19 type = "git"; 20 url = "git://git.ppad.tech/base16.git"; 21 ref = "master"; 22 inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; 23 }; 24 ppad-chacha = { 25 type = "git"; 26 url = "git://git.ppad.tech/chacha.git"; 27 ref = "master"; 28 inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; 29 }; 30 ppad-fixed = { 31 type = "git"; 32 url = "git://git.ppad.tech/fixed.git"; 33 ref = "master"; 34 inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; 35 }; 36 ppad-hmac-drbg = { 37 type = "git"; 38 url = "git://git.ppad.tech/hmac-drbg.git"; 39 ref = "master"; 40 inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; 41 inputs.ppad-sha256.follows = "ppad-sha256"; 42 }; 43 ppad-secp256k1 = { 44 type = "git"; 45 url = "git://git.ppad.tech/secp256k1.git"; 46 ref = "master"; 47 inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; 48 inputs.ppad-sha256.follows = "ppad-sha256"; 49 inputs.ppad-fixed.follows = "ppad-fixed"; 50 inputs.ppad-hmac-drbg.follows = "ppad-hmac-drbg"; 51 }; 52 ppad-sha256 = { 53 type = "git"; 54 url = "git://git.ppad.tech/sha256.git"; 55 ref = "master"; 56 inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; 57 }; 58 ppad-nixpkgs = { 59 type = "git"; 60 url = "git://git.ppad.tech/nixpkgs.git"; 61 ref = "master"; 62 }; 63 flake-utils.follows = "ppad-nixpkgs/flake-utils"; 64 nixpkgs.follows = "ppad-nixpkgs/nixpkgs"; 65 }; 66 67 outputs = { self, nixpkgs, flake-utils, ppad-nixpkgs 68 , ppad-aead, ppad-bolt1, ppad-base16, ppad-chacha 69 , ppad-fixed, ppad-hmac-drbg, ppad-secp256k1 70 , ppad-sha256 }: 71 flake-utils.lib.eachDefaultSystem (system: 72 let 73 lib = "ppad-bolt4"; 74 75 pkgs = import nixpkgs { inherit system; }; 76 hlib = pkgs.haskell.lib; 77 llvm = pkgs.llvmPackages_19.llvm; 78 clang = pkgs.llvmPackages_19.clang; 79 80 aead = ppad-aead.packages.${system}.default; 81 aead-llvm = 82 hlib.addBuildTools 83 (hlib.enableCabalFlag aead "llvm") 84 [ llvm clang ]; 85 86 base16 = ppad-base16.packages.${system}.default; 87 base16-llvm = 88 hlib.addBuildTools 89 (hlib.enableCabalFlag base16 "llvm") 90 [ llvm clang ]; 91 92 chacha = ppad-chacha.packages.${system}.default; 93 chacha-llvm = 94 hlib.addBuildTools 95 (hlib.enableCabalFlag chacha "llvm") 96 [ llvm clang ]; 97 98 fixed = ppad-fixed.packages.${system}.default; 99 fixed-llvm = 100 hlib.addBuildTools 101 (hlib.enableCabalFlag fixed "llvm") 102 [ llvm clang ]; 103 104 hmac-drbg = ppad-hmac-drbg.packages.${system}.default; 105 hmac-drbg-llvm = 106 hlib.addBuildTools 107 (hlib.enableCabalFlag hmac-drbg "llvm") 108 [ llvm clang ]; 109 110 secp256k1 = ppad-secp256k1.packages.${system}.default; 111 secp256k1-llvm = 112 hlib.addBuildTools 113 (hlib.enableCabalFlag secp256k1 "llvm") 114 [ llvm clang ]; 115 116 sha256 = ppad-sha256.packages.${system}.default; 117 sha256-llvm = 118 hlib.addBuildTools 119 (hlib.enableCabalFlag sha256 "llvm") 120 [ llvm clang ]; 121 122 bolt1 = ppad-bolt1.packages.${system}.default; 123 bolt1-llvm = 124 hlib.addBuildTools 125 (hlib.enableCabalFlag bolt1 "llvm") 126 [ llvm clang ]; 127 128 hpkgs = pkgs.haskell.packages.ghc910.extend (new: old: { 129 ppad-bolt1 = bolt1-llvm; 130 ppad-aead = aead-llvm; 131 ppad-base16 = base16-llvm; 132 ppad-chacha = chacha-llvm; 133 ppad-fixed = fixed-llvm; 134 ppad-hmac-drbg = hmac-drbg-llvm; 135 ppad-secp256k1 = secp256k1-llvm; 136 ppad-sha256 = sha256-llvm; 137 ${lib} = new.callCabal2nix lib ./. { 138 ppad-aead = new.ppad-aead; 139 ppad-base16 = new.ppad-base16; 140 ppad-chacha = new.ppad-chacha; 141 ppad-fixed = new.ppad-fixed; 142 ppad-secp256k1 = new.ppad-secp256k1; 143 ppad-sha256 = new.ppad-sha256; 144 }; 145 }); 146 147 cc = pkgs.stdenv.cc; 148 ghc = hpkgs.ghc; 149 cabal = hpkgs.cabal-install; 150 in 151 { 152 packages.default = hpkgs.${lib}; 153 154 packages.haddock = hpkgs.${lib}.doc; 155 156 devShells.default = hpkgs.shellFor { 157 packages = p: [ 158 (hlib.doBenchmark p.${lib}) 159 ]; 160 161 buildInputs = [ 162 cabal 163 cc 164 llvm 165 ]; 166 167 shellHook = '' 168 PS1="[${lib}] \w$ " 169 echo "entering ${system} shell, using" 170 echo "cc: $(${cc}/bin/cc --version)" 171 echo "ghc: $(${ghc}/bin/ghc --version)" 172 echo "cabal: $(${cabal}/bin/cabal --version)" 173 ''; 174 }; 175 } 176 ); 177 }