← back to Exo
dashboard: decouple prettier-svelte from dashboard source
f255345a1ad29e923b0f22d0f5d13c815d1f697d · 2026-01-23 12:47:43 +0000 · Jake Hillion
The prettier-svelte formatter depended on the full dashboard build
(dashboardFull), causing the devshell to rebuild whenever any dashboard
source file changed.
Created a deps-only dream2nix derivation (deps.nix) that uses a stub
source containing only package.json, package-lock.json, and minimal
files for vite to succeed. Updated prettier-svelte to use this
derivation instead of dashboardFull.
The stub source is constant unless lockfiles change, so prettier-svelte
and the devshell no longer rebuild when dashboard source files are
modified.
Test plan:
- nix flake check passed
- nix fmt successfully formatted svelte files
Files touched
Diff
commit f255345a1ad29e923b0f22d0f5d13c815d1f697d
Author: Jake Hillion <jake@hillion.co.uk>
Date: Fri Jan 23 12:47:43 2026 +0000
dashboard: decouple prettier-svelte from dashboard source
The prettier-svelte formatter depended on the full dashboard build
(dashboardFull), causing the devshell to rebuild whenever any dashboard
source file changed.
Created a deps-only dream2nix derivation (deps.nix) that uses a stub
source containing only package.json, package-lock.json, and minimal
files for vite to succeed. Updated prettier-svelte to use this
derivation instead of dashboardFull.
The stub source is constant unless lockfiles change, so prettier-svelte
and the devshell no longer rebuild when dashboard source files are
modified.
Test plan:
- nix flake check passed
- nix fmt successfully formatted svelte files
---
dashboard/parts.nix | 46 +++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 43 insertions(+), 3 deletions(-)
diff --git a/dashboard/parts.nix b/dashboard/parts.nix
index 487078d5..8edcc6b7 100644
--- a/dashboard/parts.nix
+++ b/dashboard/parts.nix
@@ -3,6 +3,45 @@
perSystem =
{ pkgs, lib, ... }:
let
+ # Stub source with lockfiles and minimal files for build to succeed
+ # This allows prettier-svelte to avoid rebuilding when dashboard source changes
+ dashboardStubSrc = pkgs.runCommand "dashboard-stub-src" { } ''
+ mkdir -p $out
+ cp ${inputs.self}/dashboard/package.json $out/
+ cp ${inputs.self}/dashboard/package-lock.json $out/
+ # Minimal files so vite build succeeds (produces empty output)
+ echo '<!DOCTYPE html><html><head></head><body></body></html>' > $out/index.html
+ mkdir -p $out/src
+ touch $out/src/app.html
+ '';
+
+ # Deps-only build using stub source (for prettier-svelte)
+ # Only rebuilds when package.json or package-lock.json change
+ dashboardDeps = inputs.dream2nix.lib.evalModules {
+ packageSets.nixpkgs = pkgs;
+ modules = [
+ ./dashboard.nix
+ {
+ paths.projectRoot = inputs.self;
+ paths.projectRootFile = "flake.nix";
+ paths.package = inputs.self + "/dashboard";
+ }
+ {
+ deps.dashboardSrc = lib.mkForce dashboardStubSrc;
+ }
+ # Override build phases to skip the actual build - just need node_modules
+ {
+ mkDerivation = {
+ buildPhase = lib.mkForce "true";
+ installPhase = lib.mkForce ''
+ runHook preInstall
+ runHook postInstall
+ '';
+ };
+ }
+ ];
+ };
+
# Filter source to only include dashboard directory
dashboardSrc = lib.cleanSourceWith {
src = inputs.self;
@@ -42,11 +81,12 @@
'';
# Prettier with svelte plugin for treefmt
+ # Uses dashboardDeps instead of dashboardFull to avoid rebuilding on source changes
packages.prettier-svelte = pkgs.writeShellScriptBin "prettier-svelte" ''
- export NODE_PATH="${dashboardFull}/lib/node_modules/exo-dashboard/node_modules"
+ export NODE_PATH="${dashboardDeps}/lib/node_modules/exo-dashboard/node_modules"
exec ${pkgs.nodejs}/bin/node \
- ${dashboardFull}/lib/node_modules/exo-dashboard/node_modules/prettier/bin/prettier.cjs \
- --plugin "${dashboardFull}/lib/node_modules/exo-dashboard/node_modules/prettier-plugin-svelte/plugin.js" \
+ ${dashboardDeps}/lib/node_modules/exo-dashboard/node_modules/prettier/bin/prettier.cjs \
+ --plugin "${dashboardDeps}/lib/node_modules/exo-dashboard/node_modules/prettier-plugin-svelte/plugin.js" \
"$@"
'';
};
← a1939c89 Enable UI settings for image editing (#1258)
·
back to Exo
·
Fix regenerate for image models (#1263) ba199408 →