{ pkgs ? import { }, }: let pname = "fcuny-net"; version = "0.1.0"; site = pkgs.stdenv.mkDerivation { inherit pname version; src = ./.; nativeBuildInputs = with pkgs; [ lychee zola ]; buildPhase = '' zola build lychee docs/*.html ''; installPhase = '' mkdir -p $out cp -r docs/* $out/ ''; }; # Development server serve = pkgs.writeShellScriptBin "serve-fcuny-net" '' cd src/fcuny.net ${pkgs.zola}/bin/zola serve --interface 0.0.0.0 --port 1111 ''; # Nginx configuration nginxConfig = pkgs.writeText "fcuny-net.conf" '' server { listen 80; server_name fcuny.net; root ${site}; index index.html; location / { try_files $uri $uri/ =404; } # Optional: Add some basic security headers add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; # Cache static assets location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ { expires 1y; add_header Cache-Control "public, immutable"; } } ''; in { inherit site serve nginxConfig; # Make site the default output default = site; }