about summary refs log tree commit diff
path: root/web/bubblegum/examples/default.nix
blob: 3f0f51db6369b61377134f795afad817ae92e245 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
{ 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
  ]