about summary refs log tree commit diff
path: root/web/bubblegum (unfollow)
<
AgeCommit message (Collapse)AuthorFilesLines
2021-04-01 r/2395 chore(web/bubblegum): add OWNERS filesterni1-0/+3
Forgot to add this when moving it out of my //users directory. Change-Id: If6d30a2a58a6bd73e160706cb706e3b2e100e909 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2754 Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
2021-04-01 r/2394 feat(web/bubblegum): nix CGI programming frameworksterni9-0/+586
So here is what has been keeping me up at night: At some point I realized that nix actually made a somewhat passable language for CGI programming: * That `builtins.getEnv` exists as one of the impurities of Nix is perfect as environment variables are the main way of communication from the web server to the CGI application. * We can actually read from the filesystem via builtins.readDir and builtins.readFile with bearable overhead if we avoid importing the used paths into the nix store. * Templating and routing are convenient to implement via indented strings and attribute sets respectively. Of course there are obvious limitation: * The overhead of derivations is probably much to great for them to be useful via IfD. * Even without derivations, nix evaluation is very slow to the point were a trivial application takes between 100ms and 400ms to produce a response. * We can't really cause effects other than producing a response which makes it not viable for a lot of applications. There are some ways around this: * With a custom interpreter we could have streaming and multiplexed I/O (using lazy lists emulated via attrsets) to cause such effects, but it would probably perform terribly. * We can use builtins.fetchurl to call other HTTP-based microservices, but only in very limited constraints, i. e. only GET, no headers, and only if the tarball ttl is set to 0 in the global nix.conf. * Terrible error handling capabilities because builtins.tryEval actually doesn't catch a lot of errors. To prove that it actually works, there are some demo applications, which I invite you to run and potentially break horribly: nix-build -A web.bubblegum.examples && ./result # navigate to http://localhost:9000 The setup uses thttpd and executes the nix CGI scripts using users.sterni.nint which automatically passed `depot`, so they can import the cgi library. Change-Id: I3a22a749612211627e5f8301c31ec2e7a872812c Reviewed-on: https://cl.tvl.fyi/c/depot/+/2746 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
2021-04-01 r/2393 feat(sterni/nint): shebang interpreter for nix scriptssterni3-0/+244
nint (short for nix interpreter) is a tiny wrapper around nix-instantiate which allows to run nix scripts, i. e. nix expressions that conform to a certain calling convention. A nix script runnable using nint must conform to the following constraints: * It must evaluate to a function which has a set pattern with an ellipsis as the single argument. * It must produce a string as a return value or fail. When invoked, a the expression receives the following arguments: * `currentDir`: the current working directory as a nix path * `argv`: a list of strings containing `argv` including `argv[0]` * extra arguments which are manually specified which allows for passing along dependencies or libraries, for example: nint --arg depot '(import /depot {})' my-prog.nix [ argv[1] … ] would pass along depot to be used in `my-prog.nix`. Such nix scripts are purely functional in a sense: The way inputs can be taken is very limited and causing effects is also only possible in a very limited sense (using builtins.fetchurl if TARBALL_TTL is 0, adding files and directories to the nix store, realising derivations). As an approximation, a program executed using nint can be thought of as a function with the following signature: λ :: environment → working directory → argv → stdout where environment includes: * the time at the start of the program (`builtins.currentTime`) * other information about the machine (`builtins.currentSystem` …) * environment variables (`builtins.getEnv`) * the file system (`builtins.readDir`, `builtins.readFile`, …) which is the biggest input impurity as it may change during evaluation Additionally import from derivation and builtin fetchers are available which introduce further impurities to be utilized. Future work: * Streaming I/O via lazy lists. This would allow usage of stdin and output before the program terminates. However this would require using libexpr directly or writing a custom nix interpreter. A description of how this would work can be found on the website of the esoteric programming language Lazy K: https://tromp.github.io/cl/lazy-k.html * An effect system beyond stdin / stdout. * Better error handling, support setting exit codes etc. These features would require either using an alternative or custom interpreter for nix (tvix or hnix) or to link against libexpr directly to have more control over evaluation. Change-Id: I61528516eb418740df355852f23425acc4d0656a Reviewed-on: https://cl.tvl.fyi/c/depot/+/2745 Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI
2021-04-01 r/2392 refactor(tazjin/nixos): Use setup scripts from //ops/nixosVincent Ambo1-41/+4
Change-Id: I8baf2404f0f6e9c4fad767911646cdc55051dd2e Reviewed-on: https://cl.tvl.fyi/c/depot/+/2753 Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
2021-04-01 r/2391 fix(tazjin/blog): Make redirects from old links permanentVincent Ambo1-2/+1
Change-Id: I41d71f9aae7e64bdfef8f2b7142d13009b216eaa Reviewed-on: https://cl.tvl.fyi/c/depot/+/2752 Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
2021-04-01 r/2390 chore(third_party/cgit): use lib instead of stdenv.libFlorian Klink1-5/+6
Getting `lib` from `stdenv.lib` is deprecated, and throws warnings. Change-Id: Ic925818c1b5a67d15d6d40ad784554328cd603e0 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2751 Reviewed-by: lukegb <lukegb@tvl.fyi> Reviewed-by: glittershark <grfn@gws.fyi> Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
2021-04-01 r/2389 style(web/todolist): List paths without 'At ' prefixVincent Ambo1-1/+1
This also looks much cleaner than before. Change-Id: I767b881c73699151afc03746c04e413e74f30387 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2750 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
2021-04-01 r/2388 feat(web/todolist): Drop 'TODO' prefixes in individual itemsVincent Ambo1-5/+10
This modifies the capture regex executed by `jq` to capture the TODO text itself as a separate capture group, which is then used for the content of the TODO listing. The web listing looks much cleaner this way. Change-Id: I00a14da57b315a353f700c112ba33f38e16f1f85 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2749 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
2021-04-01 r/2387 feat(gs/mugwump): Switch to cloudflare as lego providerGriffin Smith1-3/+4
Change-Id: Iba48c8ac8c45075ecb9741572bca9cea4f8b0f9d Reviewed-on: https://cl.tvl.fyi/c/depot/+/2748 Reviewed-by: glittershark <grfn@gws.fyi> Tested-by: BuildkiteCI
2021-04-01 r/2386 feat(gs/mugwump): Set up ddclientGriffin Smith1-0/+26
The way this loads the api key is a hack, but also... I don't care! Change-Id: I4d417b1a824007620661188b60b21a1f73867dca Reviewed-on: https://cl.tvl.fyi/c/depot/+/2747 Reviewed-by: glittershark <grfn@gws.fyi> Tested-by: BuildkiteCI
2021-04-01 r/2385 feat(sterni/nix/url): implement urldecodingsterni2-0/+46