{ 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 inherit (nixpkgs) lib; src = lib.fileset.toSource { root = ./.; fileset = with lib.fileset; intersection (gitTracked ./.) (unions [ (fileFilter ( file: file.type == "directory" || file.hasExt "rs" || file.hasExt "toml" || file.name == "Cargo.lock" || file.hasExt "sql" || file.name == "openapi-def.yaml" || file.hasExt "html" ) ./.) ]); }; 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 rev = self.shortRev or "dirty"; cargoDeps = platform: platform.importCargoLock { lockFile = ./Cargo.lock; outputHashes = { "dbmigrator-0.4.4-alpha" = "sha256-Nwxw74IyZeZ9dODb+aneQmuQe0grO+g45B3zv1XaihE="; }; }; mkRustPlatform = pkgs: rustVersion: pkgs.makeRustPlatform { cargo = rustVersion; rustc = rustVersion; }; buildRustVersion = pkgs.pkgsBuildBuild.rust-bin.stable.latest.minimal; buildRustPlatform = mkRustPlatform pkgs.pkgsBuildBuild buildRustVersion; schemas = pkgs.pkgsBuildBuild.stdenv.mkDerivation { pname = "bankingserver_schemas"; version = "unstable-${rev}"; inherit src; cargoDeps = cargoDeps buildRustPlatform; cargoBuildType = "debug"; # "CARGO_TARGET_${stdenv.hostPlatform.rust.cargoEnvVarTarget}_LINKER" = # "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc"; nativeBuildInputs = [ buildRustPlatform.cargoSetupHook buildRustVersion pkgs.pkgsBuildBuild.pkg-config ]; buildInputs = [ pkgs.pkgsBuildBuild.openssl ]; buildPhase = '' touch openapi.json cargo build --bin generate-schemas target/debug/generate-schemas runHook postBuild ''; installPhase = '' mkdir -p $out/share/bankserver cp -r schemas $out/share/bankserver/schemas ''; doCheck = false; }; rustVersion = pkgs.pkgsBuildHost.rust-bin.fromRustupToolchain { channel = "stable"; targets = [ pkgs.pkgsBuildHost.targetPlatform.rust.rustcTarget pkgs.pkgsBuildHost.buildPlatform.rust.rustcTarget ]; }; rustPlatform = mkRustPlatform pkgs rustVersion; bankserver = pkgs.callPackage ./package.nix { inherit src rustPlatform schemas rev ; cargoDeps = cargoDeps rustPlatform; }; in { inherit bankserver; bankserverDocker = pkgs.dockerTools.buildLayeredImage { name = "bankserver"; # tag = "latest"; created = "now"; contents = [ bankserver pkgs.catatonit pkgs.cacert ]; config = { Env = [ "HOST=::" ]; # Entrypoint = ["/bin/bankserver"]; Entrypoint = [ "/bin/catatonit" "--" ]; Cmd = [ "/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 pkg-config openssl ]; }; }); }; }