{ description = "A very basic flake"; inputs = { nixpkgs.url = "flake:nixpkgs"; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, rust-overlay, }: let forAllSystems = function: nixpkgs.lib.genAttrs [ "x86_64-linux" "aarch64-linux" ] ( system: function ( import nixpkgs { inherit system; overlays = [ (import rust-overlay) (_: final: overlay final) ]; } ) ); overlay = pkgs: let rustVersion = pkgs.pkgsBuildHost.rust-bin.stable.latest.minimal; rustPlatform = pkgs.makeRustPlatform { cargo = rustVersion; rustc = rustVersion; }; bankserver = pkgs.callPackage ./package.nix { inherit rustPlatform; rev = self.shortRev or "dirty"; }; in { inherit bankserver; bankserverDocker = pkgs.dockerTools.buildLayeredImage { name = "bankserver"; # tag = "latest"; created = "now"; contents = [ bankserver ]; config = { Env = [ "HOST=::" ]; Entrypoint = [ "/bin/bankserver" ]; ExposedPorts = { "3845/tcp" = { }; }; }; }; }; in { packages = forAllSystems (pkgs: { default = pkgs.bankserver; dockerImage = pkgs.bankserverDocker; dockerImage-cross-aarch64-linux = pkgs.pkgsCross.aarch64-multiplatform.bankserverDocker; }); devShells = forAllSystems (pkgs: { default = pkgs.mkShell { packages = with pkgs; [ hurl redocly yq-go just ]; }; }); }; }