about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--pkgs/applications/networking/irc/thelounge/default.nix71
-rw-r--r--pkgs/applications/networking/irc/thelounge/packages-path.patch13
-rw-r--r--pkgs/development/node-packages/aliases.nix1
-rw-r--r--pkgs/development/node-packages/node-packages.json1
-rw-r--r--pkgs/development/node-packages/overrides.nix10
-rw-r--r--pkgs/development/node-packages/thelounge-packages-path.patch15
-rw-r--r--pkgs/top-level/all-packages.nix2
7 files changed, 86 insertions, 27 deletions
diff --git a/pkgs/applications/networking/irc/thelounge/default.nix b/pkgs/applications/networking/irc/thelounge/default.nix
new file mode 100644
index 0000000000000..bee360d55e66f
--- /dev/null
+++ b/pkgs/applications/networking/irc/thelounge/default.nix
@@ -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;
+  };
+})
diff --git a/pkgs/applications/networking/irc/thelounge/packages-path.patch b/pkgs/applications/networking/irc/thelounge/packages-path.patch
new file mode 100644
index 0000000000000..eb1ded070536d
--- /dev/null
+++ b/pkgs/applications/networking/irc/thelounge/packages-path.patch
@@ -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) {
diff --git a/pkgs/development/node-packages/aliases.nix b/pkgs/development/node-packages/aliases.nix
index 04c8da00646d5..62f0d1aa672a9 100644
--- a/pkgs/development/node-packages/aliases.nix
+++ b/pkgs/development/node-packages/aliases.nix
@@ -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
 }
diff --git a/pkgs/development/node-packages/node-packages.json b/pkgs/development/node-packages/node-packages.json
index 75b7e49bcdc26..8f0eae5820d8c 100644
--- a/pkgs/development/node-packages/node-packages.json
+++ b/pkgs/development/node-packages/node-packages.json
@@ -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"
diff --git a/pkgs/development/node-packages/overrides.nix b/pkgs/development/node-packages/overrides.nix
index 59b0a010c6d3b..71546bb7aefb5 100644
--- a/pkgs/development/node-packages/overrides.nix
+++ b/pkgs/development/node-packages/overrides.nix
@@ -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 ];
   };
diff --git a/pkgs/development/node-packages/thelounge-packages-path.patch b/pkgs/development/node-packages/thelounge-packages-path.patch
deleted file mode 100644
index c0a9ad80be2f0..0000000000000
--- a/pkgs/development/node-packages/thelounge-packages-path.patch
+++ /dev/null
@@ -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);
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 09fb4c56823ab..2b213f19c3cc2 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -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;