{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, utils }: let inherit (builtins) fromTOML readFile substring; cargoToml = fromTOML (readFile ./Cargo.toml); version = "${cargoToml.package.version}_${substring 0 8 self.lastModifiedDate}_${self.shortRev or "dirty"}"; mkVnetod = { lib, rustPlatform, ... }: rustPlatform.buildRustPackage { name = "vnetod-${version}"; src = lib.cleanSource ./.; cargoLock.lockFile = ./Cargo.lock; doCheck = true; }; in { overlay = final: prev: { vnetod = final.callPackage mkVnetod { }; }; } // utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; vnetod = pkgs.callPackage mkVnetod { }; docker = pkgs.dockerTools.buildLayeredImage { name = "pleshevskiy/vnetod"; tag = cargoToml.package.version; config = { Volumes."/data" = { }; WorkingDir = "/data"; Entrypoint = [ "${vnetod}/bin/vnetod" ]; }; }; in { apps.default = { type = "app"; program = "${vnetod}/bin/vnetod"; }; packages = { inherit docker vnetod; default = vnetod; }; devShell = pkgs.mkShell { packages = with pkgs; [ cargo rustc rustfmt clippy rust-analyzer ]; RUST_SRC_PATH = pkgs.rustPlatform.rustLibSrc; }; }); }