{ pkgs, ... }: { # Swagger UI service systemd.services.swagger-ui = { description = "Swagger UI for PostgREST API"; after = [ "postgrest.service" "network.target" ]; wantedBy = [ "multi-user.target" ]; serviceConfig = { Type = "simple"; ExecStart = "${pkgs.nodePackages.http-server}/bin/http-server /var/lib/swagger-ui -p 8080 -c-1 --cors"; Restart = "on-failure"; RestartSec = 5; User = "swagger"; }; }; # Create swagger user users.users.swagger = { isSystemUser = true; group = "swagger"; }; users.groups.swagger = {}; # Setup Swagger UI directory systemd.tmpfiles.rules = [ "d /var/lib/swagger-ui 0755 swagger swagger" ]; # Create Swagger UI index.html that points to PostgREST OpenAPI environment.etc."swagger-ui-init/index.html".text = '' Swagger UI - PostgREST API
''; # Copy Swagger UI files on startup system.activationScripts.swagger-ui-setup = '' mkdir -p /var/lib/swagger-ui cp ${pkgs.swagger-ui}/share/swagger-ui/* /var/lib/swagger-ui/ 2>/dev/null || true cp /etc/swagger-ui-init/index.html /var/lib/swagger-ui/index.html chown -R swagger:swagger /var/lib/swagger-ui ''; # Open firewall port for Swagger UI networking.firewall.allowedTCPPorts = [ 8080 ]; # Include packages environment.systemPackages = with pkgs; [ swagger-ui nodePackages.http-server ]; }