paivana

HTTP paywall reverse proxy
Log | Files | Refs | Submodules | README | LICENSE

flake.nix (5222B)


      1 # This is a nix flake. To use it, you need nix (with flake support) installed.
      2 # If you do not have nix and do not intend to use it, you can ignore this file.
      3 # Why should you use it? Using this flake will allow you to enter a developer shell
      4 # which has all necessary packages for this repository already installed.
      5 # The shell will allow you to code against the specific revisions of the dependencies
      6 # pinned in this file.
      7 # This is useful when git HEAD of your dependencies already contains breaking changes
      8 # you should not (yet) code against.
      9 # OTOH, if you should code against a newer, not yet released revision, you can specify
     10 # this revision in this file.
     11 # You can use this file in three ways:
     12 # 1. Build: $ nix build
     13 # this will build the package (it runs make for you in an environment with the dependencies installed)
     14 # 2. Develop: $ nix develop
     15 # This will drop you inside a shell in which you can develop and compile (and test) your code.
     16 # It even starts and sets up the test database for you.
     17 # 3. Use this repository in a new project
     18 # Should you create a new project that depends on this project you are in luck. You can create a flake.nix
     19 # in your repository and include this packages as a dependency just like the dependencies of this package are
     20 # included here.
     21 
     22 {
     23   inputs = {
     24     nixpkgs.url = "nixpkgs/release-26.05";
     25     systems.url = "github:nix-systems/default";
     26     gnunet.url = "git+https://git.gnunet.org/gnunet?rev=e8e7504b7ab43f7dffa25f273ff228069d8d6dd4";
     27     exchange.url = "git+https://git.gnunet.org/exchange?rev=b542c0c40c30e1ddd9b0528e913cceed8eef9c56";
     28     merchant.url = "git+https://git.gnunet.org/merchant?rev=8ca128478cf6dd8524572bf4fb344abde24ea34e";
     29     donau.url = "git+https://git.gnunet.org/donau?rev=014bf263a4f4631cfbab6486a3af069524e98ec6";
     30     self.submodules = true;
     31   };
     32 
     33   outputs = { self, nixpkgs, gnunet, exchange, donau, merchant, systems, ... } @ inputs:
     34     let
     35       supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ];
     36       forEachSystem = nixpkgs.lib.genAttrs supportedSystems;
     37       nixpkgsFor = forEachSystem (system: import nixpkgs { inherit system; });
     38     in
     39     {
     40       # This defines (installable) package derivations
     41       # For use in flakes that use this flake as input in order
     42       # to specify/use this package from git as a dependency
     43       packages = forEachSystem (system:
     44         let
     45           pkgs = nixpkgsFor.${system};
     46           gnunetpkgs = gnunet.packages.${system};
     47           exchangepkgs = exchange.packages.${system};
     48           donaupkgs = donau.packages.${system};
     49           merchantpkgs = merchant.packages.${system};
     50         in {
     51           paivana = pkgs.stdenv.mkDerivation {
     52             name = "paivana";
     53             src = ./.;
     54             nativeBuildInputs = [
     55               pkgs.gnumake
     56               pkgs.meson
     57               pkgs.ninja
     58               pkgs.pkg-config
     59               # src/frontend/generate-paywall.py renders the paywall
     60               # template at build time and needs jinja2.
     61               (pkgs.python3.withPackages (ps: [ ps.jinja2 ]))
     62              ];
     63             buildInputs = [
     64               pkgs.libtool
     65               pkgs.jansson
     66               pkgs.git
     67               pkgs.libmicrohttpd
     68               pkgs.libgcrypt
     69               pkgs.curlWithGnuTls
     70               gnunetpkgs.gnunet
     71               exchangepkgs.exchange
     72               donaupkgs.donau
     73               merchantpkgs.merchant
     74              ];
     75             preConfigure = ''
     76               patchShebangs --build bootstrap configure scripts src/frontend src/tests
     77               ./bootstrap
     78             '';
     79           };
     80         }
     81       );
     82       defaultPackage = forEachSystem (system: self.packages.${system}.paivana);
     83       # This defines a development shell in which you can compile
     84       # (and use) exchange
     85        devShells = forEachSystem
     86         (system:
     87           let
     88             pkgs = nixpkgsFor.${system};
     89             gnunetpkgs = gnunet.packages.${system};
     90             exchangepkgs = exchange.packages.${system};
     91             donaupkgs = donau.packages.${system};
     92             merchantpkgs = merchant.packages.${system};
     93           in
     94           {
     95             default = pkgs.mkShell {
     96               # Keep this in step with the buildInputs above: a shell
     97               # that cannot get past ./configure is worse than no shell.
     98               packages = [
     99                 pkgs.gcc
    100                 pkgs.meson
    101                 pkgs.ninja
    102                 pkgs.gnumake
    103                 pkgs.pkg-config
    104                 pkgs.libtool
    105                 pkgs.jansson
    106                 pkgs.libmicrohttpd
    107                 pkgs.libgcrypt
    108                 pkgs.git
    109                 pkgs.curlWithGnuTls
    110                 (pkgs.python3.withPackages (ps: [ ps.jinja2 ]))
    111                 gnunetpkgs.gnunet
    112                 pkgs.codespell
    113                 pkgs.clang-tools
    114                 pkgs.uncrustify
    115                 exchangepkgs.exchange
    116                 donaupkgs.donau
    117                 merchantpkgs.merchant
    118               ];
    119 
    120               shellHook = ''
    121                 echo "paivana environment loaded."
    122                 export CC=gcc
    123                 export CFLAGS="-O"
    124                '';
    125             };
    126           });
    127     };
    128 }