about summary refs log tree commit diff
path: root/web/bubblegum/examples/default.nix
blob: 20f897dbbf4af8065b511556f052e92ce47e6859 (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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
{ 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
]