summaryrefslogtreecommitdiff
path: root/packages/bulwark/package.nix
diff options
context:
space:
mode:
authorJakub Stachurski <j.stachurski@student.utwente.nl>2026-05-15 23:08:52 +0200
committerJakub Stachurski <j.stachurski@student.utwente.nl>2026-05-15 23:08:52 +0200
commitef4761574ebf6abe199e00943ff238ea0b69178d (patch)
treee35e244b5f4fe1242f4814f192b3abe36b1e9563 /packages/bulwark/package.nix
parent2f1a86a21141e61b739ba56887d09aaabff282c0 (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/bulwark/package.nix')
-rw-r--r--packages/bulwark/package.nix74
1 files changed, 74 insertions, 0 deletions
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;
+ };
+})