bolt4

Onion routing protocol, per BOLT #4 (docs.ppad.tech/bolt4).
git clone git://git.ppad.tech/bolt4.git
Log | Files | Refs | README | LICENSE

flake.nix (5350B)


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