1 files changed,
+115,
-1
+115,
-1
1@@ -41,6 +41,119 @@
2 mainProgram = "y-sweet";
3 };
4 };
5+
6+ rtw-package = { pkgs, lib, buildGoModule, stdenvNoCC, ... }:
7+ let
8+ rtw-pnpm-deps = stdenvNoCC.mkDerivation {
9+ pname = "rtw-pnpm-deps";
10+ version = "0.1.0";
11+ src = ./client;
12+
13+ nativeBuildInputs = [
14+ pkgs.nodejs
15+ pkgs.pnpm
16+ ];
17+
18+ dontConfigure = true;
19+ dontFixup = true;
20+
21+ buildPhase = ''
22+ export HOME=$TMPDIR
23+ pnpm install --frozen-lockfile --ignore-scripts
24+ '';
25+
26+ installPhase = ''
27+ mkdir -p $out
28+ cp -r node_modules $out/
29+ find $out/node_modules -name ".modules.yaml" -delete
30+ find $out/node_modules -name "*.log" -delete
31+ '';
32+
33+ outputHashAlgo = "sha256";
34+ outputHashMode = "recursive";
35+ outputHash = lib.fakeHash;
36+ };
37+ in
38+ buildGoModule {
39+ pname = "rtw";
40+ version = "0.1.0";
41+
42+ src = ./.;
43+
44+ nativeBuildInputs = [
45+ pkgs.nodejs
46+ pkgs.pnpm
47+ pkgs.esbuild
48+ pkgs.templ
49+ pkgs.tailwindcss_4
50+ ];
51+
52+ buildInputs = [
53+ pkgs.brotli
54+ ];
55+
56+ # Go module lives in server/
57+ modRoot = "server";
58+
59+ # Build only the server command
60+ subPackages = [ "cmd/server" ];
61+
62+ # Disable workspace so ygo is fetched from proxy, not ../ygo
63+ GOWORK = "off";
64+ env.CGO_ENABLED = "1";
65+
66+ # Placeholder — compute in Task 3
67+ vendorHash = lib.fakeHash;
68+
69+ doCheck = false;
70+
71+ # Generate all assets before Go compilation
72+ preBuild = ''
73+ export HOME=$TMPDIR
74+
75+ mkdir -p server/pages/static/js server/pages/static/css
76+
77+ # Copy pre-installed client dependencies
78+ rm -rf client/node_modules
79+ cp -r ${rtw-pnpm-deps}/node_modules client/
80+ chmod -R +w client/node_modules
81+
82+ # Build client assets (vite outputs to ../server/pages/static/)
83+ pushd client
84+ pnpm run build
85+ popd
86+
87+ # Bundle service worker
88+ esbuild ./client/src/sw.js \\
89+ --bundle \\
90+ --outfile=./server/pages/static/js/sw.js \\
91+ --minify \\
92+ --format=iife \\
93+ --platform=browser \\
94+ --target=es2015
95+
96+ # Generate server-rendered CSS
97+ pushd server
98+ tailwindcss -m --cwd pages/ -i index.css -o static/css/style.css
99+ popd
100+
101+ # Generate templ Go files
102+ pushd server
103+ templ generate
104+ popd
105+ '';
106+
107+ # Rename binary from "server" to "rtw"
108+ postInstall = ''
109+ mv $out/bin/server $out/bin/rtw
110+ '';
111+
112+ meta = {
113+ description = "RTW adventure motorcycle trip planning server";
114+ license = lib.licenses.mit;
115+ mainProgram = "rtw";
116+ };
117+ };
118 in
119 {
120 packages = forEachSystem (system:
121@@ -49,7 +162,8 @@
122 in
123 {
124 y-sweet = pkgs.callPackage y-sweet-package {};
125- default = self.packages.${system}.y-sweet;
126+ rtw = pkgs.callPackage rtw-package {};
127+ default = self.packages.${system}.rtw;
128 }
129 );
130