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