flake.nix (5324B)
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-25.11"; 25 systems.url = "github:nix-systems/default"; 26 gnunet.url = "git+https://git.gnunet.org/gnunet?rev=7c6b613e37e301b0e81fb94af5878d00c98e5b75"; 27 exchange.url = "git+https://git.gnunet.org/exchange?rev=92da4e81006404494f6443781c8f55249e723847"; 28 merchant.url = "git+https://git.gnunet.org/merchant?rev=b174138726171601b666fff346762502be5150a1"; 29 donau.url = "git+https://git.gnunet.org/donau?rev=4f609168fe263891f134eff01f86288066acdd81"; 30 anastasis.url = "git+https://git.gnunet.org/anastasis?rev=c55bf5de869065cafbd4b05edcd16980f7f1abae"; 31 self.submodules = true; 32 }; 33 34 outputs = { self, nixpkgs, gnunet, exchange, donau, merchant, anastasis, systems, ... } @ inputs: 35 let 36 supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; 37 forEachSystem = nixpkgs.lib.genAttrs supportedSystems; 38 nixpkgsFor = forEachSystem (system: import nixpkgs { inherit system; }); 39 in 40 { 41 # This defines (installable) package derivations 42 # For use in flakes that use this flake as input in order 43 # to specify/use this package from git as a dependency 44 packages = forEachSystem (system: 45 let 46 pkgs = nixpkgsFor.${system}; 47 gnunetpkgs = gnunet.packages.${system}; 48 exchangepkgs = exchange.packages.${system}; 49 donaupkgs = donau.packages.${system}; 50 merchantpkgs = merchant.packages.${system}; 51 anastasispkgs = anastasis.packages.${system}; 52 in { 53 anastasisgtk = pkgs.stdenv.mkDerivation { 54 name = "anastasis-gtk"; 55 src = ./.; 56 nativeBuildInputs = [ 57 pkgs.gnumake 58 pkgs.meson 59 pkgs.ninja 60 pkgs.pkg-config 61 ]; 62 buildInputs = [ 63 pkgs.libtool 64 pkgs.jansson 65 pkgs.git 66 pkgs.gettext 67 pkgs.libmicrohttpd 68 pkgs.curlWithGnuTls 69 pkgs.qrencode 70 pkgs.libharu 71 pkgs.glade 72 pkgs.glib 73 pkgs.gtk3 74 gnunetpkgs.gnunet 75 exchangepkgs.exchange 76 donaupkgs.donau 77 merchantpkgs.merchant 78 anastasispkgs.anastasis 79 ]; 80 preConfigure = '' 81 patchShebangs --build contrib/check-prebuilt 82 ./bootstrap 83 ''; 84 }; 85 } 86 ); 87 defaultPackage = forEachSystem (system: self.packages.${system}.anastasis); 88 # This defines a development shell in which you can compile 89 # (and use) exchange 90 devShells = forEachSystem 91 (system: 92 let 93 pkgs = nixpkgsFor.${system}; 94 gnunetpkgs = gnunet.packages.${system}; 95 exchangepkgs = exchange.packages.${system}; 96 donaupkgs = donau.packages.${system}; 97 merchantpkgs = merchant.packages.${system}; 98 anastasispkgs = anastasis.packages.${system}; 99 in 100 { 101 default = pkgs.mkShell { 102 packages = [ 103 pkgs.gcc 104 pkgs.meson 105 pkgs.ninja 106 pkgs.gnumake 107 pkgs.pkg-config 108 pkgs.libtool 109 pkgs.git 110 pkgs.gettext 111 pkgs.curlWithGnuTls 112 gnunetpkgs.gnunet 113 pkgs.codespell 114 pkgs.clang-tools 115 pkgs.uncrustify 116 pkgs.qrencode 117 pkgs.libharu 118 pkgs.glade 119 pkgs.glib 120 pkgs.gtk3 121 exchangepkgs.exchange 122 donaupkgs.donau 123 merchantpkgs.merchant 124 anastasispkgs.anastasis 125 ]; 126 127 shellHook = '' 128 echo "anastasis-gtk environment loaded." 129 export CC=gcc 130 export CFLAGS="-O" 131 ''; 132 }; 133 }); 134 }; 135 }