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