{
  lib,
  pkgs,
  config,
  ...
}: {
  options.host.podman = {
    enable = lib.mkEnableOption "should home-assistant be enabled on this computer";
    macvlan = {
      subnet = lib.mkOption {
        type = lib.types.str;
        description = "Subnet for macvlan address range";
      };
      gateway = lib.mkOption {
        type = lib.types.str;
        description = "Gateway for macvlan";
        # TODO: see if we can default this to systemd network gateway
      };
      networkInterface = lib.mkOption {
        type = lib.types.str;
        description = "Parent network interface for macvlan";
        # TODO: see if we can default this some interface?
      };
    };
  };
  config = lib.mkIf config.host.podman.enable {
    systemd = {
      services = {
        "podman-network-macvlan" = {
          path = [pkgs.podman];
          serviceConfig = {
            Type = "oneshot";
            RemainAfterExit = true;
            ExecStop = "podman network rm -f macvlan";
          };
          script = ''
            podman network inspect macvlan || podman network create --driver macvlan --subnet ${config.host.podman.macvlan.subnet} --gateway ${config.host.podman.macvlan.gateway} --opt parent=${config.host.podman.macvlan.networkInterface} macvlan
          '';
          partOf = ["podman-compose-root.target"];
          wantedBy = ["podman-compose-root.target"];
        };
      };
      # disable computer sleeping
      targets = {
        # Root service
        # When started, this will automatically create all resources and start
        # the containers. When stopped, this will teardown all resources.
        "podman-compose-root" = {
          unitConfig = {
            Description = "Root target for podman targets.";
          };
          wantedBy = ["multi-user.target"];
        };
      };
    };

    virtualisation = {
      # Runtime
      podman = {
        enable = true;
        autoPrune.enable = true;
        dockerCompat = true;
        defaultNetwork.settings = {
          # Required for container networking to be able to use names.
          dns_enabled = true;
        };
      };

      oci-containers = {
        backend = "podman";
      };
    };
  };
}