diff options
Diffstat (limited to 'web/bubblegum/examples/hello.nix')
-rw-r--r-- | web/bubblegum/examples/hello.nix | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/web/bubblegum/examples/hello.nix b/web/bubblegum/examples/hello.nix new file mode 100644 index 000000000000..881426bd1212 --- /dev/null +++ b/web/bubblegum/examples/hello.nix @@ -0,0 +1,80 @@ +{ depot, ... }: + +let + inherit (depot) + lib + ; + + inherit (depot.web.bubblegum) + pathInfo + respond + absolutePath + ; + + routes = { + "/" = { + status = "OK"; + title = "index"; + content = '' + Hello World! + ''; + }; + "/clock" = { + status = "OK"; + title = "clock"; + content = '' + It is ${toString builtins.currentTime}s since 1970-01-01 00:00 UTC. + ''; + }; + "/coffee" = { + status = "I'm a teapot"; + title = "coffee"; + content = '' + No coffee, I'm afraid + ''; + }; + }; + + notFound = { + status = "Not Found"; + title = "404"; + content = '' + This page doesn't exist. + ''; + }; + + navigation = + lib.concatStrings (lib.mapAttrsToList + (p: v: "<li><a href=\"${absolutePath p}\">${v.title}</a></li>") + routes); + + template = { title, content, ... }: '' + <!doctype html> + <html lang="en"> + <head> + <meta charset="utf-8"> + <title>${title}</title> + <style>a:link, a:visited { color: blue; }</style> + </head> + <body> + <hgroup> + <h1><code>//web/bubblegum</code></h1> + <h2>example app</h2> + </hgroup> + <header> + <nav> + <ul>${navigation}</ul> + </nav> + </header> + <main> + <p>${content}</p> + </main> + </body> + ''; + + response = routes."${pathInfo}" or notFound; + +in + respond response.status { + "Content-type" = "text/html"; + } (template response) |