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