diff --git a/.github/workflows/nix-build.yaml b/.github/workflows/nix-build.yaml index 05d6d21..92852e6 100644 --- a/.github/workflows/nix-build.yaml +++ b/.github/workflows/nix-build.yaml @@ -1,4 +1,4 @@ -name: Build and Deploy Dockerfile +name: Build Nix Docker Image on: push: diff --git a/app/main.py b/app/main.py index 0178509..1d0d187 100644 --- a/app/main.py +++ b/app/main.py @@ -111,7 +111,8 @@ async def redirect_to_init(request: Request, call_next: Any): global user_exists if ( not user_exists - and request.url.path not in ["/init", "/globals.css"] + and request.url.path != "/init" + and not request.url.path.startswith("/static") and request.method == "GET" ): with open_session() as session: diff --git a/app/routers/root.py b/app/routers/root.py index aef99e4..f9d9cac 100644 --- a/app/routers/root.py +++ b/app/routers/root.py @@ -23,59 +23,59 @@ router = APIRouter() root = Path("static") -@router.get("/globals.css") +@router.get("/static/globals.css") def read_globals_css(): return FileResponse(root / "globals.css", media_type="text/css") -@router.get("/nouislider.css") +@router.get("/static/nouislider.css") def read_nouislider_css(): return FileResponse(root / "nouislider.min.css", media_type="text/css") -@router.get("/nouislider.js") +@router.get("/static/nouislider.js") def read_nouislider_js(): return FileResponse(root / "nouislider.min.js", media_type="text/javascript") -@router.get("/apple-touch-icon.png") +@router.get("/static/apple-touch-icon.png") def read_apple_touch_icon(): return FileResponse(root / "apple-touch-icon.png", media_type="image/png") -@router.get("/favicon-32x32.png") +@router.get("/static/favicon-32x32.png") def read_favicon_32(): return FileResponse(root / "favicon-32x32.png", media_type="image/png") -@router.get("/favicon-16x16.png") +@router.get("/static/favicon-16x16.png") def read_favicon_16(): return FileResponse(root / "favicon-16x16.png", media_type="image/png") -@router.get("/site.webmanifest") +@router.get("/static/site.webmanifest") def read_site_webmanifest(): return FileResponse( root / "site.webmanifest", media_type="application/manifest+json" ) -@router.get("/htmx.js") +@router.get("/static/htmx.js") def read_htmx(): return FileResponse(root / "htmx.js", media_type="application/javascript") -@router.get("/htmx-preload.js") +@router.get("/static/htmx-preload.js") def read_htmx_preload(): return FileResponse(root / "htmx-preload.js", media_type="application/javascript") -@router.get("/alpine.js") +@router.get("/static/alpine.js") def read_alpinejs(): return FileResponse(root / "alpine.js", media_type="application/javascript") -@router.get("/favicon.svg") +@router.get("/static/favicon.svg") def read_favicon_svg(): return FileResponse(root / "favicon.svg", media_type="image/svg+xml") diff --git a/flake.nix b/flake.nix index d3d768b..73f3c9f 100644 --- a/flake.nix +++ b/flake.nix @@ -81,6 +81,18 @@ exec ${default}/bin/fastapi run --port $ABR_APP__PORT ''; gitignore = pkgs.nix-gitignore.gitignoreSource [ ] ./.; + htmx-preload = builtins.fetchurl { + url = "https://unpkg.com/htmx-ext-preload@2.1.0/preload.js"; + sha256 = "sha256:1bfkr60i20aj16vbwz2nv1q5fmmmzmc52i2aqn5cx6xihbmwy7nd"; + }; + htmx = builtins.fetchurl { + url = "https://unpkg.com/htmx.org@2.0.4/dist/htmx.min.js"; + sha256 = "sha256:0ixlixv36rrfzj97g2w0q6jxbg0x1rswgvvd2vrpjm13r2jxs2g2"; + }; + alpinejs = builtins.fetchurl { + url = "https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"; + sha256 = "sha256:1lqa3v5p7pwz3599xnxf5bwxf17bbmqxcqz3cpgj32a8ab9fxl9y"; + }; in pkgs.dockerTools.buildImage { @@ -97,6 +109,10 @@ cp -r ${gitignore}/templates $out/app/templates cp -r ${gitignore}/static/* $out/app/static cp -r ${gitignore}/app $out/app/app + + cp ${htmx-preload} $out/app/static/htmx-preload.js + cp ${htmx} $out/app/static/htmx.js + cp ${alpinejs} $out/app/static/alpine.js ''; }; diff --git a/templates/base.html b/templates/base.html index d8c1cc7..f2fb967 100644 --- a/templates/base.html +++ b/templates/base.html @@ -5,9 +5,9 @@ {% block head %}