summaryrefslogtreecommitdiffstats
path: root/nixos
diff options
context:
space:
mode:
authorSilvan Mosberger <contact@infinisil.com>2019-07-23 13:45:43 +0200
committerGitHub <noreply@github.com>2019-07-23 13:45:43 +0200
commit8403187566b22cafea490703b1ff4ca97e143ce3 (patch)
tree0656096ef4e984d8318b09726b2d0d5b095d5cc2 /nixos
parentd54e52276bc381fd7093d44884fe4c6ad9629ad6 (diff)
parent37a2f058ed7ee008a8363933617ccb07db140541 (diff)
thelounge: init at 3.0.1 (#51947)
thelounge: init at 3.0.1
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/module-list.nix1
-rw-r--r--nixos/modules/services/networking/thelounge.nix75
2 files changed, 76 insertions, 0 deletions
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 0b8ed530889f..5041e49db1da 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -692,6 +692,7 @@
./services/networking/tcpcrypt.nix
./services/networking/teamspeak3.nix
./services/networking/tedicross.nix
+ ./services/networking/thelounge.nix
./services/networking/tinc.nix
./services/networking/tinydns.nix
./services/networking/tftpd.nix
diff --git a/nixos/modules/services/networking/thelounge.nix b/nixos/modules/services/networking/thelounge.nix
new file mode 100644
index 000000000000..b1d23372955e
--- /dev/null
+++ b/nixos/modules/services/networking/thelounge.nix
@@ -0,0 +1,75 @@
+{ pkgs, lib, config, ... }:
+
+with lib;
+
+let
+ cfg = config.services.thelounge;
+ dataDir = "/var/lib/thelounge";
+ configJsData = "module.exports = " + builtins.toJSON (
+ { private = cfg.private; port = cfg.port; } // cfg.extraConfig
+ );
+in {
+ options.services.thelounge = {
+ enable = mkEnableOption "The Lounge web IRC client";
+
+ private = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Make your The Lounge instance private. You will need to configure user
+ accounts by using the (<command>thelounge</command>) command or by adding
+ entries in <filename>${dataDir}/users</filename>. You might need to restart
+ The Lounge after making changes to the state directory.
+ '';
+ };
+
+ port = mkOption {
+ type = types.port;
+ default = 9000;
+ description = "TCP port to listen on for http connections.";
+ };
+
+ extraConfig = mkOption {
+ default = {};
+ type = types.attrs;
+ example = literalExample ''{
+ reverseProxy = true;
+ defaults = {
+ name = "Your Network";
+ host = "localhost";
+ port = 6697;
+ };
+ }'';
+ description = ''
+ The Lounge's <filename>config.js</filename> contents as attribute set (will be
+ converted to JSON to generate the configuration file).
+
+ The options defined here will be merged to the default configuration file.
+ Note: In case of duplicate configuration, options from <option>extraConfig</option> have priority.
+
+ Documentation: <link xlink:href="https://thelounge.chat/docs/server/configuration" />
+ '';
+ };
+ };
+
+ config = mkIf cfg.enable {
+ users.users.thelounge = {
+ description = "thelounge service user";
+ group = "thelounge";
+ };
+ users.groups.thelounge = {};
+ systemd.services.thelounge = {
+ description = "The Lounge web IRC client";
+ wantedBy = [ "multi-user.target" ];
+ environment = { THELOUNGE_HOME = dataDir; };
+ preStart = "ln -sf ${pkgs.writeText "config.js" configJsData} ${dataDir}/config.js";
+ serviceConfig = {
+ User = "thelounge";
+ StateDirectory = baseNameOf dataDir;
+ ExecStart = "${pkgs.thelounge}/bin/thelounge start";
+ };
+ };
+
+ environment.systemPackages = [ pkgs.thelounge ];
+ };
+}