about summary refs log tree commit diff
AgeCommit message (Collapse)AuthorFilesLines
2023-06-12 r/6271 feat(tvix/store/pathinfosvc): add calculate_nar methodFlorian Klink12-67/+147
Putting this in the PathInfoService trait makes much more sense, we can have direct control over where/how to cache the results in the implementation. This now requires each PathInfoService to hold pointers to BlobService and DirectoryService. Change-Id: I4faae780d43eae4beeb57bd5e190e6d1a5d3314e Reviewed-on: https://cl.tvl.fyi/c/depot/+/8724 Tested-by: BuildkiteCI Autosubmit: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-12 r/6270 refactor(tvix/src/nar): drop NARCalculationServiceFlorian Klink11-346/+258
There's only one way to calculate NAR files, by walking through them. Things like caching such replies should be done closer to where we use these, composing NARCalculationService doesn't actually give us much. Instead, expose two functions, `nar::calculate_size_and_sha256` and `nar::writer_nar`, the latter writing NAR to a writer, the former using write_nar to only keeping the NAR size and digest. Change-Id: Ie5d2cfea35470fdbb5cbf9da1136b0cdf0250266 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8723 Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI Autosubmit: flokli <flokli@flokli.de>
2023-06-12 r/6269 feat(tvix/store): eliminate generics in BlobStoreFlorian Klink15-143/+230
To construct various stores at runtime, we need to eliminate associated types from the BlobService trait, and return Box<dyn …> instead of specific types. This also means we can't consume self in the close() method, so everything we write to is put in an Option<>, and during the first close we take from there. Change-Id: Ia523b6ab2f2a5276f51cb5d17e81a5925bce69b6 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8647 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-12 r/6268 test(tvix/eval): builtins.substring's behavior with negative argssterni3-0/+9
Change-Id: Ie8b97d174e9d58e33bf08c9b9e0afeeddd089ba8 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8700 Autosubmit: sterni <sternenseemann@systemli.org> Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
2023-06-12 r/6267 fix(tvix/eval): allow negative substring lengthsLinus Heckemann2-21/+5
Nix uses string::substr without checking the sign of the length[1]. The NixOS testing infrastructure relies on this[2], and on the implicit conversion of that to the maximum possible value for a size_t. [1]: https://github.com/NixOS/nix/blob/ecae62020b64914d9859a71ce197d03688c6133c/src/libexpr/primops.cc#L3597 [2]: https://github.com/NixOS/nixpkgs/blob/c7c298471676ac1c7789ab3c424fbcebecaa6791/nixos/lib/testing/driver.nix#L29 Change-Id: I6d0caf6830b6bda3fdf44c40c81de6a1befeca7b Reviewed-on: https://cl.tvl.fyi/c/depot/+/8746 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
2023-06-11 r/6266 fix(tvix/eval): emit only warnings on shadowed outputsLinus Heckemann4-6/+11
Unfortunately, nixpkgs has at least one case[1] where the out environment variable is shadowed -- though it doesn't cause a problem, since it's shadowed with the correct value, odd as this may be! [1]: https://github.com/NixOS/nixpkgs/blob/c7c298471676ac1c7789ab3c424fbcebecaa6791/pkgs/development/python-modules/pybind11/default.nix#L19 Change-Id: Ibf6790d2484dc9cce8e424feeb5886664d498dc3 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8696 Autosubmit: tazjin <tazjin@tvl.su> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2023-06-11 r/6265 fix(views/kit): provide `lib` argument to lazy-depsVincent Ambo1-1/+4
Change-Id: I6687bda77a3160b922156de9045d5f8565be0a61 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8744 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Autosubmit: tazjin <tazjin@tvl.su> Reviewed-by: flokli <flokli@flokli.de>
2023-06-11 r/6264 feat(corp/rih): implement backend captcha validationVincent Ambo4-1/+43
Change-Id: Ia80a6aeb8c20bdacbf93356be31592ca4ba7fcdc Reviewed-on: https://cl.tvl.fyi/c/depot/+/8741 Autosubmit: tazjin <tazjin@tvl.su> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2023-06-10 r/6263 feat(tvix/store): add mount command to entrypoint and fuse modFlorian Klink3-0/+55
`tvix-store mount PATH` will mount the tvix-store to the given path. Change-Id: Icb82a6b3cb8a22eec856c375a28ae5580403833f Reviewed-on: https://cl.tvl.fyi/c/depot/+/8665 Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI Autosubmit: flokli <flokli@flokli.de>
2023-06-10 r/6262 feat(tvix/nix-compat): derive HashFlorian Klink1-1/+1
This allows using a StorePath as a key in a hashmap. Change-Id: Id3eed623da4e1fc44a970a3982c7caa21d2495c8 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8666 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2023-06-10 r/6261 chore(tvix/store): add fuse featureFlorian Klink5-11/+295
This brings in fuse (via the `fuser` crate), and adds pkg-config and libfuse to the dev shell, so `cargo build` can link against it. Change-Id: I0d11607490e27d946bdf92b0b9e45f9ab644ba74 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8664 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2023-06-10 r/6260 docs(REVIEWS.md): improve gerrit workflow explanationDavHau1-3/+6
Change-Id: I03c156c72831931f5a1984b6ff80bdc239f75e8e Reviewed-on: https://cl.tvl.fyi/c/depot/+/8726 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-10 r/6259 feat(corp/ops): provide captcha verification key to backendVincent Ambo1-0/+12
Change-Id: I960aa604488a27945ae6e69e6f3212a8dfd356cb Reviewed-on: https://cl.tvl.fyi/c/depot/+/8740 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-10 r/6258 fix(corp/ops): let service account use encryption keyVincent Ambo1-1/+10
Change-Id: Idd68e849457ecf600b1d9a318846557adfce8575 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8737 Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2023-06-10 r/6257 feat(corp/rih/backend): sprinkle some logging all over the placeVincent Ambo4-10/+100
Change-Id: Ifd55a0bf75070b1d47c2d65c32960f05ad7040a0 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8736 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-10 r/6256 fix(corp/ops): add CORS configuration for backendVincent Ambo1-0/+5
Change-Id: Ia953523eff463bb98189735bf4cfad6390b8eb71 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8735 Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2023-06-10 r/6255 fix(corp/rih): correct structure of frontend requestVincent Ambo1-4/+11
Gotta use a shared crate for this .. Change-Id: I57669bdcace9676ff1311f3171c015702c934f56 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8734 Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2023-06-10 r/6254 feat(corp/rih): add UUIDs to records from frontendVincent Ambo4-2/+22
This UUID stays the same even if a user submits the form multiple times (unless they edit it manually in local storage, of course). Change-Id: I4190fbfeb1027ce8a8d87bc283099539e8722b39 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8733 Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2023-06-09 r/6253 docs(src/tests/nar_renderer): fix commentFlorian Klink1-2/+1
This testcase tests a missing blob fails the rendering, the comment has been copied from elsewhere. Change-Id: I48fa3fa454e12506590fa14a3591d156bafa8b5e Reviewed-on: https://cl.tvl.fyi/c/depot/+/8722 Reviewed-by: tazjin <tazjin@tvl.su> Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
2023-06-09 r/6252 docs(tvix/store): drop nar-bridge referencesFlorian Klink1-1/+1
The CLs did bitrot a bit, they're based on an older version of the protocol, and it's unclear if they'll be a separate Go Binary, or just another HTTP handler inside tvix-store itself, considering we now have way more NAR juggling code than before. Change-Id: I3632035cda8d75a8ff23b3132312f0f086d9e02f Reviewed-on: https://cl.tvl.fyi/c/depot/+/8732 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-09 r/6251 docs(tvix/store): update invocation in READMEFlorian Klink1-1/+1
This has moved to a `daemon` subcommand. Change-Id: Iae9778d8a59e6bf84555119fabfd62db3917bb62 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8731 Tested-by: BuildkiteCI Autosubmit: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-09 r/6250 feat(corp/rih): persist data in storage bucketVincent Ambo3-6/+533
Change-Id: Ide7a21b97e845681584378d348cc36aba951d69f Reviewed-on: https://cl.tvl.fyi/c/depot/+/8730 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-09 r/6249 chore(corp/ops): pipe secrets through to backend containerVincent Ambo1-0/+14
Change-Id: Idcaa4a7213b53fe1e818c6a81754d29b6249e957 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8729 Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2023-06-09 r/6248 feat(corp/ops): configure data storage bucketVincent Ambo1-7/+77
Note that there doesn't seem to be a TF resource type for the IAM binding between the bucket and the service account itself (other than applying to all buckets in the folder, which I don't want). For this reason I've added the `storage.uploader` IAM binding to the `rih-backend` service account *on the bucket* manually. Change-Id: I9fb06c7857e61dc642d9ea0d89159a0e343dc984 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8728 Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2023-06-09 r/6247 feat(corp/ops): configure hosting setup for backend domainVincent Ambo1-0/+64
Change-Id: Ia0298e3be2e16ac5dbc2b8aec1e840aa3af947e9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8719 Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2023-06-09 r/6246 feat(corp/ops): initial resources for running rih containerVincent Ambo1-0/+36
Change-Id: Ie7276396bbfcff64d91ca8cc655cad6927fd6599 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8718 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-09 r/6245 docs(tvix/store/docs): fix grammarFlorian Klink1-1/+1
Change-Id: I1d7d306e5d997a7ba47a83d613edc19a4fba1ed4 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8721 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su> Autosubmit: flokli <flokli@flokli.de>
2023-06-07 r/6244 fix(tvix/eval): use normal thunking behavior for default in formalssterni2-9/+7
When comparing to C++ Nix, we notice that the thunking of default expressions in function formals corresponds to their normal thunking, e.g. literals are not thunked. This means that we can just invoke compile() without much of a care and trust that it will sort it out correctly. If function formals blow up as a result of this, it likely indicates that the expression is treated incorrectly by compile(), not compile_param_pattern(). Change-Id: I64acbff2f251423eb72ce43e56a0603379305e1d Reviewed-on: https://cl.tvl.fyi/c/depot/+/8704 Autosubmit: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-07 r/6243 fix(tvix/eval): type check function argument with set patternsterni5-0/+18
C++ Nix forces and typechecks the passed argument even if it is not necessary in order to compute the return value of the function. I discovered this when I thought our formals miscompilation might be that we are too strict, but doesn't look like it in this case. Change-Id: Ifb3c92592293052c489d1e3ae8c7c54e4b6b4dc6 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8701 Tested-by: BuildkiteCI Autosubmit: sterni <sternenseemann@systemli.org> Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-07 r/6242 refactor(tvix/eval): don't track idx twice in compile_param_patternsterni1-9/+7
Change-Id: I27f9105ddb20d84342550b2a73b479a7764ee3fe Reviewed-on: https://cl.tvl.fyi/c/depot/+/8699 Reviewed-by: tazjin <tazjin@tvl.su> Autosubmit: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI
2023-06-06 r/6241 feat(grfn/gws.fyi): Link to bluesky profileGriffin Smith1-0/+1
Change-Id: I745f3761c4c91c43bbb7edff946244da242eb48c Reviewed-on: https://cl.tvl.fyi/c/depot/+/8717 Reviewed-by: grfn <grfn@gws.fyi> Autosubmit: grfn <grfn@gws.fyi> Tested-by: BuildkiteCI
2023-06-06 r/6240 fix(grfn/system): Set docker storageDriver on mugwumpGriffin Smith1-1/+4
A recent upgrade is requiring this now for some reason. Change-Id: I5908c12d104044897b4969dbd1299a3071d507bd Reviewed-on: https://cl.tvl.fyi/c/depot/+/8716 Tested-by: BuildkiteCI Autosubmit: grfn <grfn@gws.fyi> Reviewed-by: grfn <grfn@gws.fyi>
2023-06-06 r/6239 feat(docs): mention OIDC providers in registration instructionsLinus Heckemann1-2/+4
Change-Id: I698c7b6b1f5f5202c49fcbe026782eb4692d99d3 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8706 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su> Reviewed-by: sterni <sternenseemann@systemli.org>
2023-06-06 r/6238 chore(corp/rih): bootstrap backend application with rouilleVincent Ambo4-0/+905
Change-Id: I48b0c432a843db5a44b3a3de09f18e1232644a44 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8715 Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2023-06-06 r/6237 chore(corp/rih): move frontend to a separate folderVincent Ambo11-0/+0
Change-Id: Ic7467f459015c39c73f87c61a048319eaf1243be Reviewed-on: https://cl.tvl.fyi/c/depot/+/8714 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-06 r/6236 feat(corp/rih): submit form data to backendVincent Ambo4-3/+74
Change-Id: I0c74deea8debf9acbcf6eabf225969dbfe9cc34c Reviewed-on: https://cl.tvl.fyi/c/depot/+/8703 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-06 r/6235 feat(corp/rih): activate submit button when data is completeVincent Ambo2-1/+14
The completion detection is very naive for now, but baby steps etc. Change-Id: Iec6eae77fca13f3fc0ee1225268eef04277b504a Reviewed-on: https://cl.tvl.fyi/c/depot/+/8702 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-06 r/6234 feat(corp/rih): wire up captcha solving callbackVincent Ambo2-11/+35
This turned out a lot nicer than I expected it to be. Change-Id: I427670644eba789ea2037423fa9af8e632b19b34 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8695 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-06 r/6233 feat(corp/rih): display & load captcha element inside the formVincent Ambo5-7/+39
Change-Id: Ifd0f85d9e4f785c4cb1ae56ae67e6d999ff43c85 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8694 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-06 r/6232 chore(corp/rih): reverse form orderVincent Ambo1-31/+34
This makes more sense to me. Change-Id: I013bf9457f20a31a9762768607f4094358e1b7cb Reviewed-on: https://cl.tvl.fyi/c/depot/+/8693 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-06 r/6231 fix(tazjin/emacs): set font weight back to normalVincent Ambo1-1/+1
Whatever broke font rendering in nixpkgs briefly has been fixed. Change-Id: Ie14aa3e4893c2828b57deacda125561202628b26 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8713 Tested-by: BuildkiteCI Autosubmit: tazjin <tazjin@tvl.su> Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-06 r/6230 subtree(3p/exwm): update to commit 'b62d5e79'Vincent Ambo9-235/+531
This is almost one year of changes to EXWM. Note that it undoes our port of https://github.com/ch11ng/exwm/pull/737 That PR hasn't seen any movement in three years, so it might not be that relevant anymore. Other stuff has been mainlined in the meantime. Change-Id: I0845ff8a28a5bb1553855f6d6f0ceeaedcf0809e
2023-06-03 r/6229 feat(nix/buildkite): extraSteps: include parentLabel into hashFlorian Klink1-1/+1
Contrary to the normal steps, extra steps only show the attribute name in their label, not the whole attribute path. To make sure these are still unique, also incorporate the parentLabel into the string that's hashed. Change-Id: Ic7a1f76aaac159ab5bd30054e422234882947990 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8708 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2023-06-03 r/6228 feat(nix/buildkite): add step key to release stepsFlorian Klink1-0/+1
This uses the same logic ("sha1sum of label") as already used in the "build" chunks. Fixes https://b.tvl.fyi/issues/276. Change-Id: I76e59a141bd05f7d1d997a6471ea65e8cc7b4c2a Reviewed-on: https://cl.tvl.fyi/c/depot/+/8707 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2023-06-02 r/6227 fix(tvix/cli): fix refscan when no paths are referencedLinus Heckemann1-4/+21
Before, the construction of a TwoByteWM would panic when no patterns were provided, as in `tvix --expr 'builtins.toFile "snens" "soos"'`. Change-Id: I25ed498c475523aec5baf8683b23059fadabb21c Reviewed-on: https://cl.tvl.fyi/c/depot/+/8697 Reviewed-by: tazjin <tazjin@tvl.su> Autosubmit: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2023-06-01 r/6226 docs(nix/buildkite): escape "release" in warningFlorian Klink1-1/+1
When using the buildkite tooling with `postBuild` parameter set, the following error message is shown: ``` This replaces the previous boolean postBuild API in extra step definitions. Please remove the postBuild parameter from this step and instead set phase = release;. ``` However, `release` is no symbol, this should be a string. Update the message to reflect that. Change-Id: I341c81d862204db06946512428910cada28481ca Reviewed-on: https://cl.tvl.fyi/c/depot/+/8690 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2023-05-31 r/6225 feat(corp/ops): configure bucket hosting configurationVincent Ambo1-0/+17
This doesn't have redirects for weird routes yet, but I think that's doable somehow. Change-Id: Iaaac711304f9b2bd8ea04302940e9e9259cd67c9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8663 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su> Autosubmit: tazjin <tazjin@tvl.su>
2023-05-31 r/6224 chore: remove comments formerly meant for alignmentsterni3-3/+0
/**/ is a nice way to align if statements which doesn't work with nixpkgs-fmt, since it'll reflow the comment to the line preceding the if. Consequently, we can delete these comments now. Change-Id: Ifa5327f846a903e07607b21f8eedbc32fc36f758 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8689 Reviewed-by: sterni <sternenseemann@systemli.org> Autosubmit: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI
2023-05-30 r/6223 feat(tvix/store/bin): use sled for daemon, grpc for import cmdFlorian Klink1-8/+23
This now creates different store client, depending on the cli subcommand. The `import` command will connect to the gRPC service, and the `daemon` command will use the sled implementation. It might make sense to define some URI syntax to make this configurable by the user, via the CLI. Change-Id: I72351fcf0e83a013b6aa67a90b64c108cbb01ffd Reviewed-on: https://cl.tvl.fyi/c/depot/+/8619 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2023-05-30 r/6222 chore(3p/sources): bump nixpkgs channels & overlaysVincent Ambo6-71/+25
* 3p/buzz: delete package This is unused, old, and uses an insecure version of OpenSSL which broke eval. * 3p/overlays: remove nvd patch Newer versions of nvd are compatible with Nix 2.3 by default. * users/grfn/system/home: remove explicit rust-analyser package This conflicts with `rustup`, causing eval failures, as the wrapper seems to now be included in `rustup` by default. * users/grfn/system: temporarily disable ISO builds They were broken upstream in nixpkgs by a change to stdenv/setup.sh, being fixed in https://github.com/NixOS/nixpkgs/pull/234883 Change-Id: I0eea99ec98f4e73e615c012ffae1d0e37122e73b Reviewed-on: https://cl.tvl.fyi/c/depot/+/8585 Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi> Reviewed-by: sterni <sternenseemann@systemli.org> Autosubmit: tazjin <tazjin@tvl.su>