{ pkgs, ... }: { # Swagger UI service systemd.services.swagger-ui = { description = "Swagger UI for PostgREST APIs"; 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"; }; groups.swagger = { }; }; # Setup Swagger UI directory systemd.tmpfiles.rules = [ "d /var/lib/swagger-ui 0755 swagger swagger" ]; # Index page to select which API environment.etc = { "swagger-ui-init/index.html".text = '' PostgREST APIs

PostgREST APIs

Default API (port 3000) Learnlytics API (port 3001) ''; # Swagger UI for default API "swagger-ui-init/default/index.html".text = '' Swagger UI - Default API
''; # Swagger UI for learnlytics API "swagger-ui-init/learnlytics/index.html".text = '' Swagger UI - Learnlytics API
''; }; # Copy Swagger UI files on startup system.activationScripts.swagger-ui-setup = '' mkdir -p /var/lib/swagger-ui/default /var/lib/swagger-ui/learnlytics cp /etc/swagger-ui-init/index.html /var/lib/swagger-ui/index.html cp /etc/swagger-ui-init/default/index.html /var/lib/swagger-ui/default/index.html cp /etc/swagger-ui-init/learnlytics/index.html /var/lib/swagger-ui/learnlytics/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; [ nodePackages.http-server ]; }