thelounge: fix build

Upstream switched to using TypeScript in v4.4.0, which broke the patch.
This fixes that issue by migrating to building The Lounge from source,
instead of having to patch the minified JavaScript.
This commit is contained in:
Winter 2023-05-22 18:20:22 -04:00
parent f9138c5ad6
commit 41bb263d28
7 changed files with 86 additions and 27 deletions

View file

@ -0,0 +1,71 @@
{ lib, stdenv, fetchFromGitHub, fetchYarnDeps, yarn, fixup_yarn_lock, nodejs, npmHooks, nixosTests }:
stdenv.mkDerivation (finalAttrs: {
pname = "thelounge";
version = "4.4.0";
src = fetchFromGitHub {
owner = "thelounge";
repo = "thelounge";
rev = "v${finalAttrs.version}";
hash = "sha256-2MHq71lKkFe1uHEENgUiYsO99bPyLmEZZIdcdgsZfSM=";
};
# Allow setting package path for the NixOS module.
patches = [ ./packages-path.patch ];
# Use the NixOS module's state directory by default.
postPatch = ''
echo /var/lib/thelounge > .thelounge_home
'';
offlineCache = fetchYarnDeps {
yarnLock = "${finalAttrs.src}/yarn.lock";
hash = "sha256-OKLsNGl94EDyLgP2X2tiwihgRQFXGvf5XgXwgX+JEpk=";
};
nativeBuildInputs = [ nodejs yarn fixup_yarn_lock npmHooks.npmInstallHook ];
configurePhase = ''
runHook preConfigure
export HOME="$PWD"
fixup_yarn_lock yarn.lock
yarn config --offline set yarn-offline-mirror ${finalAttrs.offlineCache}
yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
patchShebangs node_modules
runHook postConfigure
'';
buildPhase = ''
runHook preBuild
NODE_ENV=production yarn build
runHook postBuild
'';
# `npm prune` doesn't work and/or hangs for whatever reason.
preInstall = ''
rm -rf node_modules
yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive --production
'';
dontNpmPrune = true;
# Takes way, way, way too long.
dontStrip = true;
passthru.tests = nixosTests.thelounge;
meta = with lib; {
description = "Modern, responsive, cross-platform, self-hosted web IRC client";
homepage = "https://thelounge.chat";
changelog = "https://github.com/thelounge/thelounge/releases/tag/v${finalAttrs.version}";
maintainers = with maintainers; [ winter raitobezarius ];
license = licenses.mit;
inherit (nodejs.meta) platforms;
};
})

View file

@ -0,0 +1,13 @@
diff --git a/server/config.ts b/server/config.ts
index 543a8135..9744f00d 100644
--- a/server/config.ts
+++ b/server/config.ts
@@ -145,7 +145,7 @@ class Config {
}
getPackagesPath() {
- return path.join(this.#homePath, "packages");
+ return process.env.THELOUNGE_PACKAGES || path.join(this.#homePath, "packages");
}
getPackageModulePath(packageName: string) {

View file

@ -43,5 +43,6 @@ mapAliases {
"@google/clasp" = pkgs.google-clasp; # Added 2023-05-07
"@nestjs/cli" = pkgs.nest-cli; # Added 2023-05-06
manta = pkgs.node-manta; # Added 2023-05-06
thelounge = pkgs.thelounge; # Added 2023-05-22
triton = pkgs.triton; # Added 2023-05-06
}

View file

@ -319,7 +319,6 @@
, "textlint-rule-terminology"
, "textlint-rule-unexpanded-acronym"
, "textlint-rule-write-good"
, "thelounge"
, "thelounge-plugin-closepms"
, "thelounge-plugin-giphy"
, "thelounge-plugin-shortcuts"

View file

@ -502,16 +502,6 @@ final: prev: {
'';
};
thelounge = prev.thelounge.override (oldAttrs: {
buildInputs = [ final.node-pre-gyp ];
postInstall = ''
echo /var/lib/thelounge > $out/lib/node_modules/thelounge/.thelounge_home
patch -d $out/lib/node_modules/thelounge -p1 < ${./thelounge-packages-path.patch}
'';
passthru.tests = { inherit (nixosTests) thelounge; };
meta = oldAttrs.meta // { maintainers = with lib.maintainers; [ winter ]; };
});
thelounge-plugin-closepms = prev.thelounge-plugin-closepms.override {
nativeBuildInputs = [ final.node-pre-gyp ];
};

View file

@ -1,15 +0,0 @@
diff --git a/src/helper.js b/src/helper.js
index 27352b53..7078e4c5 100644
--- a/src/helper.js
+++ b/src/helper.js
@@ -110,6 +110,10 @@ function setHome(newPath) {
userLogsPath = path.join(homePath, "logs");
clientCertificatesPath = path.join(homePath, "certificates");
+ if (process.env.THELOUNGE_PACKAGES !== undefined) {
+ packagesPath = process.env.THELOUNGE_PACKAGES;
+ }
+
// Reload config from new home location
if (fs.existsSync(configPath)) {
const userConfig = require(configPath);

View file

@ -12968,7 +12968,7 @@ with pkgs;
theharvester = callPackage ../tools/security/theharvester { };
inherit (nodePackages) thelounge;
thelounge = callPackage ../applications/networking/irc/thelounge { };
theLoungePlugins = with lib; let
pkgs = filterAttrs (name: _: hasPrefix "thelounge-" name) nodePackages;