1
Fork 0
mirror of https://github.com/RGBCube/rgbcube.github.io synced 2025-05-14 05:54:58 +00:00

Add nix flake & start working on embedded assets

This commit is contained in:
RGBCube 2023-12-20 23:34:38 +03:00
parent 30bcb1e46f
commit 7410e1f929
No known key found for this signature in database
11 changed files with 2082 additions and 69 deletions

2
.gitignore vendored
View file

@ -12,12 +12,14 @@
!.gitignore
!Cargo.lock
!flake.lock
!*.css
!*.gif
!*.html
!*.js
!*.md
!*.nix
!*.rs
!*.toml
!*.woff2

113
Cargo.lock generated
View file

@ -177,6 +177,19 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "dashmap"
version = "5.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
dependencies = [
"cfg-if",
"hashbrown 0.14.3",
"lock_api",
"once_cell",
"parking_lot_core",
]
[[package]]
name = "embed-file"
version = "0.1.0"
@ -212,6 +225,18 @@ dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "filetime"
version = "0.2.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd"
dependencies = [
"cfg-if",
"libc",
"redox_syscall",
"windows-sys 0.52.0",
]
[[package]]
name = "fnv"
version = "1.0.7"
@ -347,12 +372,6 @@ dependencies = [
"pin-project-lite",
]
[[package]]
name = "http-range-header"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ce4ef31cda248bbdb6e6820603b82dfcd9e833db65a43e997a0ccec777d11fe"
[[package]]
name = "httparse"
version = "1.8.0"
@ -392,9 +411,9 @@ dependencies = [
[[package]]
name = "hyper-util"
version = "0.1.1"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ca339002caeb0d159cc6e023dff48e199f081e42fa039895c7c6f38b37f2e9d"
checksum = "bdea9aac0dbe5a9240d68cfd9501e2db94222c6dc06843e06640b9e07f0fdc67"
dependencies = [
"bytes",
"futures-channel",
@ -405,8 +424,6 @@ dependencies = [
"pin-project-lite",
"socket2",
"tokio",
"tower",
"tower-service",
"tracing",
]
@ -511,16 +528,6 @@ version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
[[package]]
name = "mime_guess"
version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
dependencies = [
"mime",
"unicase",
]
[[package]]
name = "minify-js"
version = "0.5.6"
@ -834,13 +841,15 @@ version = "0.1.0"
dependencies = [
"anyhow",
"axum",
"dashmap",
"embed-file",
"env_logger",
"log",
"maud",
"minify-js",
"stringreader",
"tar",
"tokio",
"tower-http",
]
[[package]]
@ -868,6 +877,12 @@ dependencies = [
"windows-sys 0.48.0",
]
[[package]]
name = "stringreader"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "913e7b03d63752f6cdd2df77da36749d82669904798fe8944b9ec3d23f159905"
[[package]]
name = "syn"
version = "2.0.41"
@ -885,6 +900,17 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
[[package]]
name = "tar"
version = "0.4.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb"
dependencies = [
"filetime",
"libc",
"xattr",
]
[[package]]
name = "termcolor"
version = "1.4.0"
@ -954,31 +980,6 @@ dependencies = [
"tracing",
]
[[package]]
name = "tower-http"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09e12e6351354851911bdf8c2b8f2ab15050c567d70a8b9a37ae7b8301a4080d"
dependencies = [
"bitflags 2.4.1",
"bytes",
"futures-util",
"http",
"http-body",
"http-body-util",
"http-range-header",
"httpdate",
"mime",
"mime_guess",
"percent-encoding",
"pin-project-lite",
"tokio",
"tokio-util",
"tower-layer",
"tower-service",
"tracing",
]
[[package]]
name = "tower-layer"
version = "0.3.2"
@ -1011,15 +1012,6 @@ dependencies = [
"once_cell",
]
[[package]]
name = "unicase"
version = "2.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89"
dependencies = [
"version_check",
]
[[package]]
name = "unicode-ident"
version = "1.0.12"
@ -1201,6 +1193,17 @@ version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
[[package]]
name = "xattr"
version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7dae5072fe1f8db8f8d29059189ac175196e410e40ba42d5d4684ae2f750995"
dependencies = [
"libc",
"linux-raw-sys",
"rustix",
]
[[package]]
name = "zerocopy"
version = "0.7.31"

1783
Cargo.nix Normal file

File diff suppressed because it is too large Load diff

View file

@ -9,15 +9,17 @@ repositoty = "https://github.com/RGBCube/rgbcube.github.io"
edition = "2021"
[dependencies]
anyhow = "1.0.75"
axum = "0.7.2"
embed-file = "0.1.0"
env_logger = "0.10.1"
log = "0.4.20"
maud = { git = "https://github.com/vidhanio/maud", branch = "patch-1", features = [ "axum" ] }
minify-js = "0.5.6"
tokio = { version = "1.35.1", features = [ "full" ] }
tower-http = { version = "0.5.0", features = [ "fs", "trace" ] }
anyhow = "1.0.75"
axum = "0.7.2"
dashmap = "5.5.3"
embed-file = "0.1.0"
env_logger = "0.10.1"
log = "0.4.20"
maud = { git = "https://github.com/vidhanio/maud", branch = "patch-1", features = [ "axum" ] }
minify-js = "0.5.6"
stringreader = "0.1.1"
tar = "0.4.40"
tokio = { version = "1.35.1", features = [ "full" ] }
[build]
incremental = true

13
build.rs Normal file
View file

@ -0,0 +1,13 @@
use std::process::Command;
fn main() {
Command::new("tar")
.args(&["cf", "assets.tar", "assets"])
.output()
.expect("Failed to package assets");
println!("cargo:rerun-if-changed=assets");
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rustc-env=ASSETS_PATH={}", "assets.tar");
}

128
flake.lock generated Normal file
View file

@ -0,0 +1,128 @@
{
"nodes": {
"cargo2nix": {
"inputs": {
"flake-compat": "flake-compat",
"flake-utils": [
"flake-utils"
],
"nixpkgs": [
"nixpkgs"
],
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1699033427,
"narHash": "sha256-OVtd5IPbb4NvHibN+QvMrMxq7aZN5GFoINZSAXKjUdA=",
"owner": "cargo2nix",
"repo": "cargo2nix",
"rev": "c6f33051f412352f293e738cc8da6fd4c457080f",
"type": "github"
},
"original": {
"owner": "cargo2nix",
"repo": "cargo2nix",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1701680307,
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1703013332,
"narHash": "sha256-+tFNwMvlXLbJZXiMHqYq77z/RfmpfpiI3yjL6o/Zo9M=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "54aac082a4d9bb5bbc5c4e899603abfb76a3f6d6",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"cargo2nix": "cargo2nix",
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
}
},
"rust-overlay": {
"inputs": {
"flake-utils": [
"cargo2nix",
"flake-utils"
],
"nixpkgs": [
"cargo2nix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1697336027,
"narHash": "sha256-ctmmw7j4liyfSh63v9rdFZeIoNYCkCvgqvtEOB7KhX8=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "e494404d36a41247987eeb1bfc2f1ca903e97764",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

43
flake.nix Normal file
View file

@ -0,0 +1,43 @@
{
description = "RGBCube's homepage.";
nixConfig = {
extra-substituters = "https://cache.garnix.io/";
extra-trusted-public-keys = "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=";
};
inputs = {
nixpkgs = {
url = "github:NixOS/nixpkgs/nixos-unstable";
};
flake-utils = {
url = "github:numtide/flake-utils";
};
cargo2nix = {
url = "github:cargo2nix/cargo2nix";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-utils.follows = "flake-utils";
};
};
outputs = { nixpkgs, flake-utils, cargo2nix, ... } @ inputs: flake-utils.lib.eachDefaultSystem (system: let
pkgs = import nixpkgs {
inherit system;
overlays = [ cargo2nix.overlays.default ];
};
rustPackages = pkgs.rustBuilder.makePackageSet {
rustVersion = "1.74.1";
rustChannel = "stable";
rustProfile = "minimal";
packageFun = import ./Cargo.nix;
};
in rec {
devShells.default = rustPackages.workspaceShell;
packages.site = rustPackages.workspace.site {};
packages.default = packages.site;
});
}

View file

@ -21,7 +21,7 @@ pub fn create<S: AsRef<str>>(styling: S, faces: [Markup; 6]) -> Markup {
},
html! {
style {
(PreEscaped(styling.as_ref()))
(PreEscaped(&styling))
}
div class="scene" {

View file

@ -13,7 +13,6 @@ use constants::*;
use env_logger::Target;
use log::LevelFilter;
use tokio::net::TcpListener;
use tower_http::services::ServeDir;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
@ -23,7 +22,7 @@ async fn main() -> anyhow::Result<()> {
.init();
let app = Router::new()
.nest_service("/assets", ServeDir::new("assets")) // TODO: Embed it all.
.nest_service("/assets", pages::assets())
.route("/", get(pages::index))
.fallback(pages::_404);

30
src/pages/assets.rs Normal file
View file

@ -0,0 +1,30 @@
use std::io::Read;
use axum::Router;
use dashmap::DashMap;
use embed_file::embed_string as embed;
use stringreader::StringReader;
use tar::Archive;
pub fn router() -> Router {
let app = Router::new();
let tar_contents = embed!("assets.tar");
let mut archive = Archive::new(StringReader::new(&tar_contents));
let archive_map: DashMap<String, Vec<u8>> = DashMap::new();
for entry in archive.entries().unwrap() {
let mut entry = entry.unwrap();
let path = String::from_utf8(entry.path_bytes().to_vec()).unwrap();
let mut contents = Vec::new();
entry.read_to_end(&mut contents).unwrap();
archive_map.insert(path, contents);
}
println!("{archive_map:?}");
app
}

View file

@ -1,4 +1,4 @@
macro_rules! import {
macro_rules! import_page {
($($ident:ident),*) => {
$(
mod $ident;
@ -7,4 +7,14 @@ macro_rules! import {
};
}
import! { _404, index }
macro_rules! import_router {
($($ident:ident),*) => {
$(
mod $ident;
pub use $ident::router as $ident;
)*
};
}
import_page! { _404, index }
import_router! { assets }