This repository has no description
2.0 kB
71 lines
1{
2 lib,
3 applyPatches,
4 buildGoModule,
5 buildNpmPackage,
6 fetchFromGitHub,
7 makeWrapper,
8}:
9
10let
11 version = "0-unstable-2026-10-01";
12
13 # self-host.patch (AGPL-3.0 §13: this directory is the corresponding source
14 # linked from the footer and the landing page):
15 # - strips Google Tag Manager, Publift/Primis ads, the paywall and the
16 # landing page's YouTube/Vimeo embeds and GitHub star button
17 # - replaces the Google/Outlook/email-OTP sign-in page with GitHub OAuth
18 # (GET /api/auth/github, GITHUB_CLIENT_ID/GITHUB_CLIENT_SECRET)
19 # - makes the listen address configurable via LISTEN_ADDR (upstream
20 # hardcodes ":3002" on all interfaces)
21 src = applyPatches {
22 src = fetchFromGitHub {
23 owner = "schej-it";
24 repo = "timeful.app";
25 rev = "23b7e7ead1d279ea5d8f431199a230c2dfbe0c1a";
26 hash = "sha256-Yp2dkz4+QZ9pqZXOM4srZsCiu/TGLQXGNZtsRd5Dx+U=";
27 };
28 patches = [ ./self-host.patch ];
29 };
30
31 frontend = buildNpmPackage {
32 pname = "timeful-frontend";
33 inherit version;
34 src = "${src}/frontend";
35
36 npmDepsHash = "sha256-eHitoSJUPX2mhlOgGrECCUp0zhKFxgsfxkY7+BmeHak=";
37
38 # No PostHog key and no Google/Microsoft OAuth client baked in; sign-in
39 # goes through the server-side GitHub flow instead.
40 installPhase = ''
41 runHook preInstall
42 cp -r dist $out
43 runHook postInstall
44 '';
45 };
46in
47buildGoModule {
48 pname = "timeful";
49 inherit version src;
50
51 modRoot = "server";
52 subPackages = [ "." ];
53 vendorHash = "sha256-dl9JURh6pCB7P+jAWcjlPZwmkKPqV7EaOJZSwJYwcFQ=";
54
55 nativeBuildInputs = [ makeWrapper ];
56
57 postInstall = ''
58 mv $out/bin/server $out/bin/timeful
59 wrapProgram $out/bin/timeful --set-default FRONTEND_DIST ${frontend}
60 '';
61
62 passthru = { inherit frontend; };
63
64 meta = {
65 description = "Availability poll to find the best time for a group to meet (formerly Schej)";
66 homepage = "https://github.com/schej-it/timeful.app";
67 license = lib.licenses.agpl3Only;
68 mainProgram = "timeful";
69 platforms = lib.platforms.linux;
70 };
71}