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 (5551B)


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