diff options
Diffstat (limited to 'web/bubblegum/examples/default.nix')
-rw-r--r-- | web/bubblegum/examples/default.nix | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/web/bubblegum/examples/default.nix b/web/bubblegum/examples/default.nix new file mode 100644 index 000000000000..89482f93eacc --- /dev/null +++ b/web/bubblegum/examples/default.nix @@ -0,0 +1,82 @@ +{ depot, pkgs, lib, ... }: + +let + + scripts = [ + ./hello.nix + ./derivation-svg.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 +] |