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
]
|