diff options
| author | Jakub Stachurski <j.stachurski@student.utwente.nl> | 2026-05-15 23:08:52 +0200 |
|---|---|---|
| committer | Jakub Stachurski <j.stachurski@student.utwente.nl> | 2026-05-15 23:08:52 +0200 |
| commit | ef4761574ebf6abe199e00943ff238ea0b69178d (patch) | |
| tree | e35e244b5f4fe1242f4814f192b3abe36b1e9563 /packages | |
| parent | 2f1a86a21141e61b739ba56887d09aaabff282c0 (diff) | |
Add support for bulwark, including package.
This makes omega-relay also a mail client so to speak,
though bulwark is mostly client-sided.
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/bulwark/0001-use-local-google-fonts.patch | 29 | ||||
| -rw-r--r-- | packages/bulwark/package.nix | 74 |
2 files changed, 103 insertions, 0 deletions
diff --git a/packages/bulwark/0001-use-local-google-fonts.patch b/packages/bulwark/0001-use-local-google-fonts.patch new file mode 100644 index 0000000..0bae8c0 --- /dev/null +++ b/packages/bulwark/0001-use-local-google-fonts.patch @@ -0,0 +1,29 @@ +diff --git a/app/layout.tsx b/app/layout.tsx +index 573ed32..e5b1edc 100644 +--- a/app/layout.tsx ++++ b/app/layout.tsx +@@ -1,5 +1,5 @@ + import type { Metadata } from "next"; +-import { Geist, Geist_Mono } from "next/font/google"; ++import localFont from "next/font/local"; + import { headers } from "next/headers"; + import { getLocale } from "next-intl/server"; + import { PWAInstallPrompt } from "@/components/pwa-install-prompt"; +@@ -7,15 +7,8 @@ import { ServiceWorkerRegistration } from "@/components/service-worker-registrat + import { configManager } from "@/lib/admin/config-manager"; + import "./globals.css"; + +-const geistSans = Geist({ +- variable: "--font-geist-sans", +- subsets: ["latin"], +-}); +- +-const geistMono = Geist_Mono({ +- variable: "--font-geist-mono", +- subsets: ["latin"], +-}); ++const geistSans = localFont({src: './Geist-Regular.otf', variable: "--font-geist-sans"}) ++const geistMono = localFont({src: './GeistMono-Regular.otf', variable: "--font-geist-mono"}) + + export async function generateMetadata(): Promise<Metadata> { + await configManager.ensureLoaded(); diff --git a/packages/bulwark/package.nix b/packages/bulwark/package.nix new file mode 100644 index 0000000..14b9844 --- /dev/null +++ b/packages/bulwark/package.nix @@ -0,0 +1,74 @@ +{ + lib, + buildNpmPackage, + fetchFromGitHub, + git, + geist-font, + + defaultHostname ? "127.0.0.1", + defaultPort ? 3000, +}: +buildNpmPackage (finalAttrs: { + pname = "bulwark"; + version = "1.6.5"; + nativeBuildInputs = [ git ]; + src = fetchFromGitHub { + owner = "bulwarkmail"; + repo = "webmail"; + tag = "${finalAttrs.version}"; + hash = "sha256-U2bXylfyRLh7d0PA8UNO5Jdi0jg2U//rJlohPJwaPUQ="; + }; + + npmDepsHash = "sha256-DLRXDM/PUqcjwX66hwvzALIKS016E7s3u/VDuYStYXA="; + npmPackFlags = [ "--ignore-scripts" ]; + NODE_OPTIONS = [ "--openssl-legacy-provider" ]; + + patches = [ + ./0001-use-local-google-fonts.patch + ]; + + preBuild = '' + # TODO: BASE_PATH + cp ${geist-font}/share/fonts/opentype/Geist{,Mono}-Regular.otf ./app/ + ''; + + postBuild = '' + sed -i '1s|^|#!/usr/bin/env node \n|' .next/standalone/server.js + patchShebangs .next/standalone/server.js + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/{share,bin} + + cp -r .next/standalone $out/share/homepage/ + cp -r .next/standalone $out/share/homepage/data/ + # cp -r .env $out/share/homepage/ + cp -r public $out/share/homepage/public + + mkdir -p $out/share/homepage/.next + cp -r .next/static $out/share/homepage/.next/static + + # https://github.com/vercel/next.js/discussions/58864 + ln -s /var/cache/bulwark $out/share/homepage/.next/cache + # also provide a environment variable to override the cache directory + substituteInPlace $out/share/homepage/node_modules/next/dist/server/image-optimizer.js \ + --replace '_path.join)(distDir,' '_path.join)(process.env["NEXT_CACHE_DIR"] || distDir,' + + chmod +x $out/share/homepage/server.js + + # we set a default port to support "nix run ..." + makeWrapper $out/share/homepage/server.js $out/bin/bulwark \ + --set-default PORT ${toString defaultPort} \ + --set-default HOSTNAME ${defaultHostname} \ + + runHook postInstall + ''; + + meta = { + description = "Bulwark JMAP Webmail :3"; + homepage = "https://bulwarkmail.org"; + license = lib.licenses.agpl3Only; + }; +}) |
