Cross-compile and deploy newt to MIPS32 little-endian OpenWrt routers (e.g., Siflower SF19A28).
# Clone
git clone https://github.com/fosrl/newt /tmp/newt
cd /tmp/newt| services: | |
| playwright: | |
| stdin_open: true | |
| init: true | |
| restart: unless-stopped | |
| build: | |
| context: . | |
| dockerfile_inline: | | |
| FROM node:22-slim | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ |
| #!/bin/bash | |
| # Validate the Caddy configuration | |
| if docker exec -it caddy caddy validate --config /etc/caddy/Caddyfile; then | |
| echo "Valid configuration. Reloading Caddy..." | |
| # Hot reload the Caddy service with the new configuration | |
| docker exec -it caddy caddy fmt --overwrite /etc/caddy/Caddyfile | |
| docker exec -it caddy caddy reload --config /etc/caddy/Caddyfile --adapter caddyfile | |
| else | |
| echo "Configuration validation failed. Hot reload aborted." |
| <script lang="ts"> | |
| import PrintablePage from '$lib/components/printable-page.svelte' | |
| </script> | |
| <PrintablePage> | |
| {#snippet footer()} | |
| <footer>footer</footer> | |
| {/snippet} | |
| {#snippet header()} |
| #pragma once | |
| #include "lvgl.h" | |
| typedef struct { | |
| lv_color_t slate50; | |
| lv_color_t slate100; | |
| lv_color_t slate200; | |
| lv_color_t slate300; | |
| lv_color_t slate400; |
| # On DO server as root | |
| dd if=/dev/zero of=/zerofile bs=1M status=progress || echo "Zeroing complete" | |
| rm -f /zerofile | |
| # On your machine | |
| ssh root@myserver "dd if=/dev/vda | gzip -c | pv" | gzip -dc | sudo dd of=/dev/sda status=progress |
| #!/bin/bash | |
| # Get cloudflare token: https://dash.cloudflare.com/profile/api-tokens | |
| CLOUDFLARE_TOKEN="YOUR_CLOUDFLARE_TOKEN" | |
| DOMAIN="mysite.dev" | |
| WILDCARD="*.$DOMAIN" | |
| EMAIL="certbot@mysite.dev" | |
| PFX_PASSWORD="letsencrypt" | |
| mkdir -p letsencrypt |
| <!-- data/index.html --> | |
| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <style> | |
| * { | |
| box-sizing: border-box; | |
| user-select: none; |