This repository has no description
2.2 kB
73 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 # - "Schedule" offers a .ics download next to Google Calendar/Outlook, and
20 # scheduled-event links point at this instance instead of timeful.app
21 # - makes the listen address configurable via LISTEN_ADDR (upstream
22 # hardcodes ":3002" on all interfaces)
23 src = applyPatches {
24 src = fetchFromGitHub {
25 owner = "schej-it";
26 repo = "timeful.app";
27 rev = "23b7e7ead1d279ea5d8f431199a230c2dfbe0c1a";
28 hash = "sha256-Yp2dkz4+QZ9pqZXOM4srZsCiu/TGLQXGNZtsRd5Dx+U=";
29 };
30 patches = [ ./self-host.patch ];
31 };
32
33 frontend = buildNpmPackage {
34 pname = "timeful-frontend";
35 inherit version;
36 src = "${src}/frontend";
37
38 npmDepsHash = "sha256-eHitoSJUPX2mhlOgGrECCUp0zhKFxgsfxkY7+BmeHak=";
39
40 # No PostHog key and no Google/Microsoft OAuth client baked in; sign-in
41 # goes through the server-side GitHub flow instead.
42 installPhase = ''
43 runHook preInstall
44 cp -r dist $out
45 runHook postInstall
46 '';
47 };
48in
49buildGoModule {
50 pname = "timeful";
51 inherit version src;
52
53 modRoot = "server";
54 subPackages = [ "." ];
55 vendorHash = "sha256-dl9JURh6pCB7P+jAWcjlPZwmkKPqV7EaOJZSwJYwcFQ=";
56
57 nativeBuildInputs = [ makeWrapper ];
58
59 postInstall = ''
60 mv $out/bin/server $out/bin/timeful
61 wrapProgram $out/bin/timeful --set-default FRONTEND_DIST ${frontend}
62 '';
63
64 passthru = { inherit frontend; };
65
66 meta = {
67 description = "Availability poll to find the best time for a group to meet (formerly Schej)";
68 homepage = "https://github.com/schej-it/timeful.app";
69 license = lib.licenses.agpl3Only;
70 mainProgram = "timeful";
71 platforms = lib.platforms.linux;
72 };
73}