nix machine / user configurations
1{ pkgs, lib, ... }: 2let 3 getFileType = name: if lib.hasSuffix ".json" name then "application/json" else "text/plain"; 4 mkWellKnownCfg = files: { 5 quic = true; 6 kTLS = true; 7 locations = ( 8 lib.mapAttrs' (name: file: { 9 name = "=/.well-known/${name}"; 10 value = { 11 extraConfig = '' 12 alias ${file}; 13 add_header access-control-allow-origin *; 14 default_type ${getFileType name}; 15 ''; 16 }; 17 }) files 18 ); 19 }; 20 mkDidWebCfg = domain: { 21 "${domain}" = 22 (mkWellKnownCfg { 23 "did.json" = ../../../secrets/${domain}.did; 24 "atproto-did" = pkgs.writeText "server" "did:web:${domain}"; 25 }) 26 // (lib.optionalAttrs (lib.hasSuffix "gaze.systems" domain) { 27 useACMEHost = "gaze.systems"; 28 forceSSL = true; 29 quic = true; 30 kTLS = true; 31 }); 32 }; 33 guestbookDid = "guestbook.gaze.systems"; 34in 35{ 36 security.acme.certs."gaze.systems".extraDomainNames = [guestbookDid]; 37 services.nginx.virtualHosts = mkDidWebCfg guestbookDid; 38}