diff --git a/web/atward/build.rs b/web/atward/build.rs new file mode 100644 index 000000000..5dadba3bf --- /dev/null +++ b/web/atward/build.rs @@ -0,0 +1,50 @@ +//! Build script that can be used outside of Nix builds to inject the +//! ATWARD_INDEX_HTML variable when building in development mode. +//! +//! Note that this script assumes that atward is in a checkout of the +//! TVL depot. + +use std::process::Command; + +static ATWARD_INDEX_HTML: &str = "ATWARD_INDEX_HTML"; +static ERROR_MESSAGE: &str = r#"Failed to build index page. + +When building during development, atward expects to be in a checkout +of the TVL depot. This is required to automatically build the index +page that is needed at compile time. + +As atward can not automatically detect the location of the page, +you must set the `ATWARD_INDEX_HTML` environment variable to the +right path. + +The expected page is build using the files in //web/atward/indexHtml +in the depot."#; + +fn main() { + // Do nothing if the variable is already set (e.g. via Nix) + if let Ok(_) = std::env::var(ATWARD_INDEX_HTML) { + return; + } + + // Otherwise ask Nix to build it and inject the result. + let output = Command::new("nix-build") + .arg("-A").arg("web.atward.indexHtml") + // ... assuming atward is at //web/atward ... + .arg("../..") + .output() + .expect(ERROR_MESSAGE); + + if !output.status.success() { + eprintln!("{}\nNix output: {}", ERROR_MESSAGE, String::from_utf8_lossy(&output.stderr)); + return; + } + + let out_path = String::from_utf8(output.stdout) + .expect("Nix returned invalid output after building index page"); + + // Return an instruction to Cargo that will set the environment + // variable during rustc calls. + // + // https://doc.rust-lang.org/cargo/reference/build-scripts.html#cargorustc-envvarvalue + println!("cargo:rustc-env={}={}", ATWARD_INDEX_HTML, out_path.trim()); +} diff --git a/web/atward/default.nix b/web/atward/default.nix index e50ac32be..f3ed04345 100644 --- a/web/atward/default.nix +++ b/web/atward/default.nix @@ -2,4 +2,7 @@ depot.third_party.naersk.buildPackage { src = ./.; + override = x: { + ATWARD_INDEX_HTML = depot.web.atward.indexHtml; + }; } diff --git a/web/atward/indexHtml/default.nix b/web/atward/indexHtml/default.nix new file mode 100644 index 000000000..acb7b6acc --- /dev/null +++ b/web/atward/indexHtml/default.nix @@ -0,0 +1,97 @@ +{ depot, ... }: + +depot.web.tvl.template { + useUrls = true; + title = "atward"; + content = '' +

+ atward is TVL's search + service. It can be configured as a browser search engine for easy + access to TVL bugs, code reviews, code paths and more. +

+ +

Setting up atward

+

+ To configure atward, add a search engine to your browser with the + following search string: +

  https://at.tvl.fyi/?q=%s
+ Consider setting a shortcut, for example t or tvl. + You can now quickly access TVL resources by typing something + like t b/42 in your URL bar to get to the bug with ID + 42. +

+ +

Supported queries

+

+ The following query types are supported in atward: +

+

+ +

Configuration

+

+ Some behaviour of atward can be configured by adding query + parameters to the search string: +

+

+

+ In some browsers (like Firefox) users can not edit query + parameters for search engines. As an alternative configuration can + be supplied via cookies with the same names as the configuration + parameters. +

+

+ The form below can set this configuration: +

+ Use Sourcegraph instead of cgit +
+

+ + +

Source code

+

+ atward's source code lives + at //web/atward. +

+ ''; + extraHead = '' + + + ''; +} diff --git a/web/atward/src/index.html b/web/atward/src/index.html deleted file mode 100644 index a62d168bd..000000000 --- a/web/atward/src/index.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -TVL Search - - -
-

atward

-
-
- -

- atward is TVL's search - service. It can be configured as a browser search engine for easy - access to TVL bugs, code reviews, code paths and more. -

- -

Setting up atward

-

- To configure atward, add a search engine to your browser with the - following search string: -

  https://at.tvl.fyi/?q=%s
- Consider setting a shortcut, for example t or tvl. - You can now quickly access TVL resources by typing something - like t b/42 in your URL bar to get to the bug with ID - 42. -

- -

Supported queries

-

- The following query types are supported in atward: -

-

- -

Configuration

-

- Some behaviour of atward can be configured by adding query - parameters to the search string: -

-

-

- In some browsers (like Firefox) users can not edit query - parameters for search engines. As an alternative configuration can - be supplied via cookies with the same names as the configuration - parameters. -

-

- The form below can set this configuration: -

- Use Sourcegraph instead of cgit -
-

- - -

Source code

-

- atward's source code lives - at //web/atward. -

- -
- - diff --git a/web/atward/src/main.rs b/web/atward/src/main.rs index b29877c6c..7d6ded16e 100644 --- a/web/atward/src/main.rs +++ b/web/atward/src/main.rs @@ -144,7 +144,7 @@ fn opensearch() -> Response { /// Render the atward index page which gives users some information /// about how to use the service. fn index() -> Response { - Response::html(include_str!("index.html")) + Response::html(include_str!(env!("ATWARD_INDEX_HTML"))) } /// Render the fallback page which informs users that their query is diff --git a/web/tvl/default.nix b/web/tvl/default.nix index 2321f2e00..e79c47b53 100644 --- a/web/tvl/default.nix +++ b/web/tvl/default.nix @@ -9,28 +9,9 @@ let ${graphviz}/bin/neato -Tsvg ${./tvl.dot} > $out ''; - homepage = writeText "index.html" '' - - - - - - - - The Virus Lounge - - - -
-

The Virus Lounge

-
-
- + homepage = depot.web.tvl.template { + title = "The Virus Lounge"; + content = ''
The Virus Lounge
@@ -49,22 +30,16 @@ let It's pretty straightforward. Feel free to click on people, too.

${builtins.readFile tvlGraph} - -
- - - ''; + ''; + extraHead = '' + + ''; + }; in runCommandNoCC "website" {} '' mkdir -p $out/static cp ${homepage} $out/index.html diff --git a/web/tvl/template/default.nix b/web/tvl/template/default.nix new file mode 100644 index 000000000..26efef6de --- /dev/null +++ b/web/tvl/template/default.nix @@ -0,0 +1,52 @@ +{ depot, pkgs, ... }: + +{ # content of the tag + title + # main part of the page, usually wrapped with <main> +, content + # optional extra html to inject into <head> +, extraHead ? null + # whether to use global URLs instead of absolute paths +, useUrls ? false +}@args: + +let + inherit (pkgs) writeText lib; + + baseUrl = lib.optionalString useUrls "https://tvl.fyi"; +in + +writeText "index.html" ('' + <!DOCTYPE html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <meta name="description" content="The Virus Lounge"> + <link rel="stylesheet" type="text/css" href="${baseUrl}/static/tazjin.css" media="all"> + <link rel="icon" type="image/webp" href="${baseUrl}/static/favicon.webp"> + <title>${title} +'' + lib.optionalString (args ? extraHead) extraHead + '' + + +
+

${title}

+
+
+ + ${content} + +
+ + +'')