{ pkgs, lib, config, ... }: { options = { services.jank-client = { enable = lib.mkEnableOption "jank client"; package = lib.mkOption { description = "jank client package"; default = pkgs.callPackage ./package.nix {}; type = lib.types.package; }; port = lib.mkOption { description = "port to bind to"; default = 8080; type = lib.types.int; }; }; }; config = lib.mkIf config.services.jank-client.enable { environment.systemPackages = [ config.services.jank-client.package ]; virtualisation.docker = { enable = true; autoPrune.enable = true; }; virtualisation.oci-containers.backend = "docker"; virtualisation.oci-containers.containers."jank-client-jank" = { image = "compose2nix/jank-client-jank"; ports = [ "${builtins.toString config.services.jank-client.port}:8080/tcp" ]; log-driver = "journald"; extraOptions = [ "--network-alias=jank" "--network=jank-client_default" ]; }; systemd.services."docker-jank-client-jank" = { serviceConfig = { Restart = lib.mkOverride 90 "always"; RestartMaxDelaySec = lib.mkOverride 90 "1m"; RestartSec = lib.mkOverride 90 "100ms"; RestartSteps = lib.mkOverride 90 9; }; after = [ "docker-network-jank-client_default.service" ]; requires = [ "docker-network-jank-client_default.service" ]; partOf = [ "docker-compose-jank-client-root.target" ]; wantedBy = [ "docker-compose-jank-client-root.target" ]; }; systemd.services."docker-network-jank-client_default" = { path = [pkgs.docker]; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; ExecStop = "docker network rm -f jank-client_default"; }; script = '' docker network inspect jank-client_default || docker network create jank-client_default ''; partOf = ["docker-compose-jank-client-root.target"]; wantedBy = ["docker-compose-jank-client-root.target"]; }; systemd.services."docker-build-jank-client-jank" = { path = [pkgs.docker pkgs.git]; serviceConfig = { Type = "oneshot"; TimeoutSec = 300; }; script = '' cd ${config.services.jank-client.package}/src docker build -t compose2nix/jank-client-jank . ''; }; systemd.targets."docker-compose-jank-client-root" = { unitConfig = { Description = "Root target generated by compose2nix."; }; wantedBy = ["multi-user.target"]; }; }; }