image-sync 0.1.1

Smart container image cache synchronizer — pulls from external registries only when needed
{
  description = "image-sync — smart container image cache synchronizer";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
    fenix = {
      url = "github:nix-community/fenix";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    crate2nix = {
      url = "github:nix-community/crate2nix";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    flake-utils.url = "github:numtide/flake-utils";
    substrate = {
      url = "github:pleme-io/substrate";
      inputs.nixpkgs.follows = "nixpkgs";
      inputs.fenix.follows = "fenix";
    };
    forge = {
      url = "github:pleme-io/forge";
      inputs.nixpkgs.follows = "nixpkgs";
      inputs.fenix.follows = "fenix";
      inputs.substrate.follows = "substrate";
      inputs.crate2nix.follows = "crate2nix";
    };
  };

  outputs = { self, nixpkgs, crate2nix, flake-utils, substrate, forge, ... }:
    (import "${substrate}/lib/build/rust/tool-image-flake.nix" {
      inherit nixpkgs crate2nix flake-utils forge;
    }) {
      toolName = "image-sync";
      src = self;
      repo = "pleme-io/image-sync";
      tag = "0.1.0";
      extraContents = pkgs: [
        pkgs.crane
        pkgs.skopeo
        # Skopeo requires a trust policy. Bake a permissive one into the image.
        (pkgs.writeTextDir "etc/containers/policy.json"
          ''{"default":[{"type":"insecureAcceptAnything"}]}'')
      ];
      architectures = ["amd64" "arm64"];
    };
}