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