{ pkgs, ... }: let run = ({name, image, ports, environment ? {}, ... }@attrs: let rest = builtins.removeAttrs attrs [ "name" "image" "ports" "environment" ]; in { image = name; inherit ports; imageFile = image; inherit environment; autoStart = true; } // rest) ; in { options = {}; config = { networking.firewall.allowedTCPPorts = [ 5000 8080 8081 9001 9002 9003 ]; virtualisation.oci-containers.containers = { "schemingschemer1" = run { name = "ss/1"; image = import ../scheming-schemer/first/nix/image.nix {}; ports = [ "9001:20000" ]; }; "schemingschemer2" = run { name = "ss/2"; image = import ../scheming-schemer/second/nix/image.nix {}; ports = [ "9002:20000" ]; }; "schemingschemer3" = run { name = "ss/3"; image = import ../scheming-schemer/third/nix/image.nix {}; ports = [ "9003:20000" ]; }; "fancy-text" = run { name = "fancy-text"; image = import ../fancy_text/image.nix {}; ports = [ "9004:20000" ]; }; "gottacatchthemallfront" = run { name = "frontend-gotta-catch-them-all"; image = import ../gotta_catch_em_all/nix/frontend.nix {}; ports = [ "8080:80" ]; }; "gottacatchthemallback" = run { name = "gotta-catch-them-all-backend"; image = import ../gotta_catch_em_all/nix/backend.nix {}; ports = [ "5000:5000" ]; }; "lost-keys" = run { name = "lost-keys"; image = import ../lost-keys/image.nix {}; ports = [ "2222:2222" ]; }; "ruby-challenge" = run { name = "ruby-challenge"; image = import ../ruby_challenge/image.nix {}; ports = [ "8081:3000" ]; user = "joske:joske"; }; }; }; }