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