bolt3

Lightning transaction and script formats, per BOLT #3 (docs.ppad.tech/bolt3).
git clone git://git.ppad.tech/bolt3.git
Log | Files | Refs | README | LICENSE

flake.nix (3678B)


      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     };
     16     ppad-sha256 = {
     17       type = "git";
     18       url  = "git://git.ppad.tech/sha256.git";
     19       ref  = "master";
     20       inputs.ppad-nixpkgs.follows = "ppad-nixpkgs";
     21     };
     22     ppad-secp256k1 = {
     23       type = "git";
     24       url  = "git://git.ppad.tech/secp256k1.git";
     25       ref  = "master";
     26       inputs.ppad-nixpkgs.follows = "ppad-nixpkgs";
     27       inputs.ppad-sha256.follows = "ppad-sha256";
     28     };
     29     ppad-ripemd160 = {
     30       type = "git";
     31       url  = "git://git.ppad.tech/ripemd160.git";
     32       ref  = "master";
     33       inputs.ppad-nixpkgs.follows = "ppad-nixpkgs";
     34     };
     35     ppad-tx = {
     36       type = "git";
     37       url  = "git://git.ppad.tech/tx.git";
     38       ref  = "master";
     39       inputs.ppad-nixpkgs.follows = "ppad-nixpkgs";
     40       inputs.ppad-sha256.follows = "ppad-sha256";
     41     };
     42     flake-utils.follows = "ppad-nixpkgs/flake-utils";
     43     nixpkgs.follows = "ppad-nixpkgs/nixpkgs";
     44   };
     45 
     46   outputs = { self, nixpkgs, flake-utils, ppad-nixpkgs
     47             , ppad-bolt1, ppad-sha256, ppad-secp256k1
     48             , ppad-ripemd160, ppad-tx }:
     49     flake-utils.lib.eachDefaultSystem (system:
     50       let
     51         lib = "ppad-bolt3";
     52 
     53         pkgs  = import nixpkgs { inherit system; };
     54         hlib  = pkgs.haskell.lib;
     55         llvm  = pkgs.llvmPackages_19.llvm;
     56         clang = pkgs.llvmPackages_19.clang;
     57 
     58         sha256 = ppad-sha256.packages.${system}.default;
     59         sha256-llvm =
     60           hlib.addBuildTools
     61             (hlib.enableCabalFlag sha256 "llvm")
     62             [ llvm clang ];
     63 
     64         secp256k1 = ppad-secp256k1.packages.${system}.default;
     65         secp256k1-llvm =
     66           hlib.addBuildTools
     67             (hlib.enableCabalFlag secp256k1 "llvm")
     68             [ llvm clang ];
     69 
     70         ripemd160 = ppad-ripemd160.packages.${system}.default;
     71         ripemd160-llvm =
     72           hlib.addBuildTools
     73             (hlib.enableCabalFlag ripemd160 "llvm")
     74             [ llvm clang ];
     75 
     76         bolt1 = ppad-bolt1.packages.${system}.default;
     77         bolt1-llvm =
     78           hlib.addBuildTools
     79             (hlib.enableCabalFlag bolt1 "llvm")
     80             [ llvm clang ];
     81 
     82         tx = ppad-tx.packages.${system}.default;
     83         tx-llvm =
     84           hlib.addBuildTools
     85             (hlib.enableCabalFlag tx "llvm")
     86             [ llvm clang ];
     87 
     88         hpkgs = pkgs.haskell.packages.ghc910.extend (new: old: {
     89           ppad-bolt1 = bolt1-llvm;
     90           ppad-sha256 = sha256-llvm;
     91           ppad-secp256k1 = secp256k1-llvm;
     92           ppad-ripemd160 = ripemd160-llvm;
     93           ppad-tx = tx-llvm;
     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 }
    128