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