# Auto-generated by compose2nix. { pkgs, lib, config, ... }: { # Runtime virtualisation.podman = { enable = true; autoPrune.enable = true; dockerCompat = true; }; # Enable container name DNS for all Podman networks. networking.firewall.interfaces = let matchAll = if !config.networking.nftables.enable then "podman+" else "podman*"; in { "${matchAll}".allowedUDPPorts = [ 53 ]; }; virtualisation.oci-containers.backend = "podman"; # Containers virtualisation.oci-containers.containers."caddy" = { image = "caddy:latest"; volumes = [ "${pkgs.writeText "Caddyfile" '' git.johron.no { tls johanhrong@icloud.com reverse_proxy gogs:3000 } ''}:/etc/caddy/Caddyfile:rw" "gogs_caddy_config:/config:rw" "gogs_caddy_data:/data:rw" ]; ports = [ "80:80/tcp" "443:443/tcp" ]; dependsOn = [ "gogs" ]; log-driver = "journald"; extraOptions = [ "--network-alias=caddy" "--network=gogs_default" ]; }; systemd.services."podman-caddy" = { serviceConfig = { Restart = lib.mkOverride 90 "always"; }; after = [ "podman-network-gogs_default.service" "podman-volume-gogs_caddy_config.service" "podman-volume-gogs_caddy_data.service" ]; requires = [ "podman-network-gogs_default.service" "podman-volume-gogs_caddy_config.service" "podman-volume-gogs_caddy_data.service" ]; partOf = [ "podman-compose-gogs-root.target" ]; wantedBy = [ "podman-compose-gogs-root.target" ]; }; virtualisation.oci-containers.containers."gogs" = { image = "gogs/gogs:latest"; volumes = [ "/opt/docker/gogs/data:/data:rw" ]; ports = [ "3000:3000/tcp" "22:22/tcp" ]; log-driver = "journald"; extraOptions = [ "--network-alias=gogs" "--network=gogs_default" ]; }; systemd.services."podman-gogs" = { serviceConfig = { Restart = lib.mkOverride 90 "always"; }; after = [ "podman-network-gogs_default.service" ]; requires = [ "podman-network-gogs_default.service" ]; partOf = [ "podman-compose-gogs-root.target" ]; wantedBy = [ "podman-compose-gogs-root.target" ]; }; # Networks systemd.services."podman-network-gogs_default" = { path = [ pkgs.podman ]; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; ExecStop = "podman network rm -f gogs_default"; }; script = '' podman network inspect gogs_default || podman network create gogs_default ''; partOf = [ "podman-compose-gogs-root.target" ]; wantedBy = [ "podman-compose-gogs-root.target" ]; }; # Volumes systemd.services."podman-volume-gogs_caddy_config" = { path = [ pkgs.podman ]; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; }; script = '' podman volume inspect gogs_caddy_config || podman volume create gogs_caddy_config ''; partOf = [ "podman-compose-gogs-root.target" ]; wantedBy = [ "podman-compose-gogs-root.target" ]; }; systemd.services."podman-volume-gogs_caddy_data" = { path = [ pkgs.podman ]; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; }; script = '' podman volume inspect gogs_caddy_data || podman volume create gogs_caddy_data ''; partOf = [ "podman-compose-gogs-root.target" ]; wantedBy = [ "podman-compose-gogs-root.target" ]; }; # Root service # When started, this will automatically create all resources and start # the containers. When stopped, this will teardown all resources. systemd.targets."podman-compose-gogs-root" = { unitConfig = { Description = "Root target generated by compose2nix."; }; wantedBy = [ "multi-user.target" ]; }; }