wrap loom into a Nix package

This commit is contained in:
EatThePooh 2025-10-14 12:41:15 +07:00
parent 30e97f5b8e
commit 67d13d8634
6 changed files with 58 additions and 26 deletions

6
flake.lock generated
View file

@ -2,11 +2,11 @@
"nodes": { "nodes": {
"deno-with-packages": { "deno-with-packages": {
"locked": { "locked": {
"lastModified": 1757917630, "lastModified": 1759993728,
"narHash": "sha256-zK0p0oq7NhBUUsfcPYS+iu2A0+HzzHJ4WxZ5MDd+Lis=", "narHash": "sha256-qZNehYgtNCB7YpMqZww4kgjlWDTPxqxivaHuCxMrGtA=",
"owner": "voleum-org", "owner": "voleum-org",
"repo": "deno-with-packages", "repo": "deno-with-packages",
"rev": "26f60eb96b0d092373e4fbe0ceae1a080b8f00b6", "rev": "6af05b2c5104339767126fa968ce9c62ec9ee352",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -19,7 +19,7 @@
shelf = import ./shelf { shelf = import ./shelf {
inherit pkgs system lib; inherit pkgs system lib;
}; };
in { in rec {
deno = { deno = {
enable = true; enable = true;
lockfiles = shelf.lockfiles ++ [ ./platform/loom/deno.lock ]; lockfiles = shelf.lockfiles ++ [ ./platform/loom/deno.lock ];
@ -28,8 +28,10 @@
packages.website = packages.website =
import ./nix/website.nix { inherit pkgs; root = ./.; }; import ./nix/website.nix { inherit pkgs; root = ./.; };
packages.loom = import ./platform { inherit pkgs; denoCache = config.packages.deno-cache; };
devShells.default = pkgs.mkShell { devShells.default = pkgs.mkShell {
buildInputs = with pkgs; [ config.packages.deno pandoc reuse ]; buildInputs = with pkgs; [ config.packages.deno pandoc reuse packages.loom ];
inputsFrom = [ config.flake-root.devShell ]; inputsFrom = [ config.flake-root.devShell ];
shellHook = '' shellHook = ''
echo "Available scrolls:" echo "Available scrolls:"

31
platform/default.nix Normal file
View file

@ -0,0 +1,31 @@
{ pkgs, denoCache }:
pkgs.stdenv.mkDerivation {
name = "loom";
src = ./loom;
buildPhase = ''
export DENO_DIR=$TMPDIR/.deno_cache
echo "Deno cache is ${denoCache}"
cp -rL "${denoCache}" "$DENO_DIR"/ 2>/dev/null || true
chmod -R u+w "$DENO_DIR" 2>/dev/null || true
echo "DENO_DIR is $DENO_DIR"
${pkgs.deno}/bin/deno task build:editor
'';
installPhase = ''
mkdir -p $out/bin $out/editor
cp -r editor/dist $out/editor/dist
cp -r mod.ts deno.json deno.lock $out
cp -r cli $out
# This is meant to be executed from inside a devShell with Deno set up
cat > $out/bin/loom <<EOF
#!/bin/sh
cd $out
exec deno task run "\$@"
EOF
chmod +x $out/bin/loom
'';
}

View file

@ -3,7 +3,7 @@
"dev:editor": "cd editor && deno run --cached-only -A --node-modules-dir npm:vite dev", "dev:editor": "cd editor && deno run --cached-only -A --node-modules-dir npm:vite dev",
"build:editor": "cd editor && deno run --cached-only -A --node-modules-dir npm:vite build", "build:editor": "cd editor && deno run --cached-only -A --node-modules-dir npm:vite build",
"check:editor": "cd editor && deno run --cached-only -A --node-modules-dir npm:svelte-check --tsconfig ./tsconfig.app.json && tsc -p tsconfig.node.json" "check:editor": "cd editor && deno run --cached-only -A --node-modules-dir npm:svelte-check --tsconfig ./tsconfig.app.json && tsc -p tsconfig.node.json"
"run": "deno run --cached-only -A mod.ts serve" "run": "deno run --cached-only -A mod.ts"
"compile": "deno compile --cached-only --no-config --no-check --include ./editor/dist/ --allow-read --allow-env --allow-net mod.ts" "compile": "deno compile --cached-only --no-config --no-check --include ./editor/dist/ --allow-read --allow-env --allow-net mod.ts"
}, },
"imports": { "imports": {

View file

@ -2,15 +2,15 @@
"version": "5", "version": "5",
"specifiers": { "specifiers": {
"npm:@stricli/core@*": "1.2.0", "npm:@stricli/core@*": "1.2.0",
"npm:@sveltejs/vite-plugin-svelte@^6.2.1": "6.2.1_svelte@5.39.9__acorn@8.15.0_vite@7.1.9__@types+node@24.6.2__picomatch@4.0.3_@types+node@24.6.2", "npm:@sveltejs/vite-plugin-svelte@^6.2.1": "6.2.1_svelte@5.39.11__acorn@8.15.0_vite@7.1.9__@types+node@24.7.0__picomatch@4.0.3_@types+node@24.7.0",
"npm:@tsconfig/svelte@^5.0.5": "5.0.5", "npm:@tsconfig/svelte@^5.0.5": "5.0.5",
"npm:@types/node@^24.6.0": "24.6.2", "npm:@types/node@^24.6.0": "24.7.0",
"npm:express@*": "5.1.0", "npm:express@*": "5.1.0",
"npm:rolldown-vite@7.1.14": "7.1.14_@types+node@24.6.2_picomatch@4.0.3", "npm:rolldown-vite@7.1.14": "7.1.14_@types+node@24.7.0_picomatch@4.0.3",
"npm:svelte-check@^4.3.2": "4.3.2_svelte@5.39.9__acorn@8.15.0_typescript@5.9.3", "npm:svelte-check@^4.3.2": "4.3.3_svelte@5.39.11__acorn@8.15.0_typescript@5.9.3",
"npm:svelte@^5.39.6": "5.39.9_acorn@8.15.0", "npm:svelte@^5.39.6": "5.39.11_acorn@8.15.0",
"npm:typescript@~5.9.3": "5.9.3", "npm:typescript@~5.9.3": "5.9.3",
"npm:vite@*": "7.1.9_@types+node@24.6.2_picomatch@4.0.3" "npm:vite@*": "7.1.9_@types+node@24.7.0_picomatch@4.0.3"
}, },
"npm": { "npm": {
"@emnapi/core@1.5.0": { "@emnapi/core@1.5.0": {
@ -397,7 +397,7 @@
"acorn" "acorn"
] ]
}, },
"@sveltejs/vite-plugin-svelte-inspector@5.0.1_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.39.9___acorn@8.15.0__vite@7.1.9___@types+node@24.6.2___picomatch@4.0.3__@types+node@24.6.2_svelte@5.39.9__acorn@8.15.0_vite@7.1.9__@types+node@24.6.2__picomatch@4.0.3_@types+node@24.6.2": { "@sveltejs/vite-plugin-svelte-inspector@5.0.1_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.39.11___acorn@8.15.0__vite@7.1.9___@types+node@24.7.0___picomatch@4.0.3__@types+node@24.7.0_svelte@5.39.11__acorn@8.15.0_vite@7.1.9__@types+node@24.7.0__picomatch@4.0.3_@types+node@24.7.0": {
"integrity": "sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==", "integrity": "sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==",
"dependencies": [ "dependencies": [
"@sveltejs/vite-plugin-svelte", "@sveltejs/vite-plugin-svelte",
@ -406,7 +406,7 @@
"vite" "vite"
] ]
}, },
"@sveltejs/vite-plugin-svelte@6.2.1_svelte@5.39.9__acorn@8.15.0_vite@7.1.9__@types+node@24.6.2__picomatch@4.0.3_@types+node@24.6.2": { "@sveltejs/vite-plugin-svelte@6.2.1_svelte@5.39.11__acorn@8.15.0_vite@7.1.9__@types+node@24.7.0__picomatch@4.0.3_@types+node@24.7.0": {
"integrity": "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==", "integrity": "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==",
"dependencies": [ "dependencies": [
"@sveltejs/vite-plugin-svelte-inspector", "@sveltejs/vite-plugin-svelte-inspector",
@ -430,8 +430,8 @@
"@types/estree@1.0.8": { "@types/estree@1.0.8": {
"integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==" "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="
}, },
"@types/node@24.6.2": { "@types/node@24.7.0": {
"integrity": "sha512-d2L25Y4j+W3ZlNAeMKcy7yDsK425ibcAOO2t7aPTz6gNMH0z2GThtwENCDc0d/Pw9wgyRqE5Px1wkV7naz8ang==", "integrity": "sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw==",
"dependencies": [ "dependencies": [
"undici-types" "undici-types"
] ]
@ -914,7 +914,7 @@
"readdirp@4.1.2": { "readdirp@4.1.2": {
"integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==" "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="
}, },
"rolldown-vite@7.1.14_@types+node@24.6.2_picomatch@4.0.3": { "rolldown-vite@7.1.14_@types+node@24.7.0_picomatch@4.0.3": {
"integrity": "sha512-eSiiRJmovt8qDJkGyZuLnbxAOAdie6NCmmd0NkTC0RJI9duiSBTfr8X2mBYJOUFzxQa2USaHmL99J9uMxkjCyw==", "integrity": "sha512-eSiiRJmovt8qDJkGyZuLnbxAOAdie6NCmmd0NkTC0RJI9duiSBTfr8X2mBYJOUFzxQa2USaHmL99J9uMxkjCyw==",
"dependencies": [ "dependencies": [
"@oxc-project/runtime", "@oxc-project/runtime",
@ -1086,8 +1086,8 @@
"statuses@2.0.2": { "statuses@2.0.2": {
"integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==" "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="
}, },
"svelte-check@4.3.2_svelte@5.39.9__acorn@8.15.0_typescript@5.9.3": { "svelte-check@4.3.3_svelte@5.39.11__acorn@8.15.0_typescript@5.9.3": {
"integrity": "sha512-71udP5w2kaSTcX8iV0hn3o2FWlabQHhJTJLIQrCqMsrcOeDUO2VhCQKKCA8AMVHSPwdxLEWkUWh9OKxns5PD9w==", "integrity": "sha512-RYP0bEwenDXzfv0P1sKAwjZSlaRyqBn0Fz1TVni58lqyEiqgwztTpmodJrGzP6ZT2aHl4MbTvWP6gbmQ3FOnBg==",
"dependencies": [ "dependencies": [
"@jridgewell/trace-mapping", "@jridgewell/trace-mapping",
"chokidar", "chokidar",
@ -1099,8 +1099,8 @@
], ],
"bin": true "bin": true
}, },
"svelte@5.39.9_acorn@8.15.0": { "svelte@5.39.11_acorn@8.15.0": {
"integrity": "sha512-sVOie0sbU9F/Lh0IoUfaq9hLzujRKxiL7xTMbG0y8ROx/qErtbfmm6sLSlJUbUMW4NcIgqHQPFiHX4LakA8fzA==", "integrity": "sha512-8MxWVm2+3YwrFbPaxOlT1bbMi6OTenrAgks6soZfiaS8Fptk4EVyRIFhJc3RpO264EeSNwgjWAdki0ufg4zkGw==",
"dependencies": [ "dependencies": [
"@jridgewell/remapping", "@jridgewell/remapping",
"@jridgewell/sourcemap-codec", "@jridgewell/sourcemap-codec",
@ -1143,8 +1143,8 @@
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"bin": true "bin": true
}, },
"undici-types@7.13.0": { "undici-types@7.14.0": {
"integrity": "sha512-Ov2Rr9Sx+fRgagJ5AX0qvItZG/JKKoBRAVITs1zk7IqZGTJUwgUr7qoYBpWwakpWilTZFM98rG/AFRocu10iIQ==" "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA=="
}, },
"unpipe@1.0.0": { "unpipe@1.0.0": {
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
@ -1152,7 +1152,7 @@
"vary@1.1.2": { "vary@1.1.2": {
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
}, },
"vite@7.1.9_@types+node@24.6.2_picomatch@4.0.3": { "vite@7.1.9_@types+node@24.7.0_picomatch@4.0.3": {
"integrity": "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==", "integrity": "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==",
"dependencies": [ "dependencies": [
"@types/node", "@types/node",
@ -1171,7 +1171,7 @@
], ],
"bin": true "bin": true
}, },
"vitefu@1.1.1_vite@7.1.9__@types+node@24.6.2__picomatch@4.0.3_@types+node@24.6.2": { "vitefu@1.1.1_vite@7.1.9__@types+node@24.7.0__picomatch@4.0.3_@types+node@24.7.0": {
"integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==",
"dependencies": [ "dependencies": [
"vite" "vite"

View file

@ -1 +0,0 @@
todo