{ depot, pkgs, lib, ... }: let scripts = [ ./hello.nix (substituteAll { src = ./blog.nix; # by making this a plain string this # can be something outside the nix store! blogdir = ./posts; }) ]; inherit (depot.nix) writeExecline runExecline getBins ; inherit (depot.web.bubblegum) writeCGI ; inherit (pkgs) runCommandLocal substituteAll ; bins = (getBins pkgs.thttpd [ "thttpd" ]) // (getBins pkgs.coreutils [ "printf" "cp" "mkdir" ]); webRoot = let copyScripts = lib.concatMap (path: let cgi = writeCGI { # assume we are on NixOS since thttpd doesn't set PATH. # using third_party.nix is tricky because not everyone # has a tvix daemon running. binPath = "/run/current-system/sw/bin"; } path; in [ "if" [ bins.cp cgi "\${out}/${cgi.name}" ] ]) scripts; in runExecline.local "webroot" { } ([ "importas" "out" "out" "if" [ bins.mkdir "-p" "$out" ] ] ++ copyScripts); port = 9000; in writeExecline "serve-examples" { } [ "foreground" [ bins.printf "%s\n" "Running on http://localhost:${toString port}" ] "${bins.thttpd}" "-D" "-p" (toString port) "-l" "/dev/stderr" "-c" "*.nix" "-d" webRoot ]