flake.nix (4361B)
1 { 2 inputs = { 3 nixpkgs.url = "nixpkgs/release-26.05"; 4 systems.url = "github:nix-systems/default"; 5 gnunet.url = "git+https://git.gnunet.org/gnunet?ref=refs/tags/v0.29.1"; 6 self.submodules = true; 7 }; 8 9 outputs = { self, nixpkgs, gnunet, systems, ... } @ inputs: 10 let 11 supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; 12 forEachSystem = nixpkgs.lib.genAttrs supportedSystems; 13 nixpkgsFor = forEachSystem (system: import nixpkgs { inherit system; }); 14 in 15 { 16 # This defines (installable) package derivations 17 # For use in flakes that use this flake as input in order 18 # to specify/use this package from git as a dependency 19 packages = forEachSystem (system: 20 let 21 pkgs = nixpkgsFor.${system}; 22 gnunetpkgs = gnunet.packages.${system}; 23 in { 24 exchange = pkgs.stdenv.mkDerivation { 25 name = "exchange"; 26 src = ./.; 27 nativeBuildInputs = [ 28 pkgs.gnumake 29 pkgs.meson 30 pkgs.ninja 31 pkgs.autoconf 32 pkgs.pkg-config 33 pkgs.python3 34 pkgs.texinfo 35 pkgs.typst # optional 36 pkgs.pdftk # optional 37 pkgs.doxygen 38 pkgs.libfaketime 39 pkgs.git 40 ]; 41 buildInputs = [ 42 pkgs.libtool 43 pkgs.jansson 44 pkgs.gettext 45 pkgs.postgresql 46 (pkgs.python3.withPackages (python-pkgs: [ 47 python-pkgs.jinja2 48 ])) 49 pkgs.libmicrohttpd 50 pkgs.libsodium 51 pkgs.libgcrypt 52 pkgs.libgpg-error 53 pkgs.libgpg-error-gen-posix-lock-obj 54 pkgs.libunistring 55 pkgs.curlWithGnuTls 56 pkgs.jq 57 gnunetpkgs.gnunet 58 ]; 59 preConfigure = '' 60 patchShebangs --build contrib/check-prebuilt 61 ./bootstrap 62 ''; 63 }; 64 } 65 ); 66 defaultPackage = forEachSystem (system: self.packages.${system}.exchange); 67 # This defines a development shell in which you can compile 68 # (and use) exchange 69 devShells = forEachSystem 70 (system: 71 let 72 pkgs = nixpkgsFor.${system}; 73 gnunetpkgs = gnunet.packages.${system}; 74 in 75 { 76 default = pkgs.mkShell { 77 packages = [ 78 pkgs.gcc 79 pkgs.meson 80 pkgs.ninja 81 pkgs.gnumake 82 pkgs.automake 83 pkgs.autoconf 84 pkgs.texinfo 85 pkgs.pkg-config 86 pkgs.libtool 87 pkgs.jansson 88 pkgs.git 89 pkgs.gettext 90 pkgs.postgresql 91 (pkgs.python3.withPackages (python-pkgs: [ 92 python-pkgs.jinja2 93 ])) 94 pkgs.libmicrohttpd 95 pkgs.libsodium 96 pkgs.libgcrypt 97 pkgs.libgpg-error 98 pkgs.libgpg-error-gen-posix-lock-obj 99 pkgs.libunistring 100 pkgs.curlWithGnuTls 101 pkgs.jq 102 gnunetpkgs.gnunet 103 pkgs.codespell 104 pkgs.clang-tools 105 pkgs.uncrustify 106 pkgs.typst # optional 107 pkgs.pdftk # optional 108 pkgs.doxygen 109 pkgs.libfaketime 110 ] ++ pkgs.lib.optionals pkgs.stdenv.isLinux [ 111 pkgs.valgrind 112 ]; 113 114 shellHook = '' 115 echo "taler-exchange environment loaded." 116 export CC=gcc 117 export CFLAGS="-O" 118 mkdir -p default 119 export PGHOST=localhost 120 export PGPORT=5432 121 export PGUSER=$USER 122 export PGDATABASE=talercheck 123 export PGDATA="$PWD/default/.pg" 124 echo $PWD 125 [ ! -d $PGDATA ] && PGHOST="$PGDATA" pg_ctl initdb -o "-U $PGUSER" 126 127 pg_ctl -o "-p $PGPORT -k $PGDATA" start && createdb talercheck && { 128 trap 'pg_ctl stop && rm -r $PGDATA' EXIT 129 } 130 ''; 131 }; 132 }); 133 }; 134 }