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


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