summaryrefslogtreecommitdiff
path: root/packages/bulwark
diff options
context:
space:
mode:
Diffstat (limited to 'packages/bulwark')
-rw-r--r--packages/bulwark/0001-use-local-google-fonts.patch29
-rw-r--r--packages/bulwark/package.nix74
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;
+ };
+})