about summary refs log tree commit diff
path: root/modules/nixos/soju.nix
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--modules/nixos/soju.nix88
1 files changed, 50 insertions, 38 deletions
diff --git a/modules/nixos/soju.nix b/modules/nixos/soju.nix
index 71dff86..f8212b5 100644
--- a/modules/nixos/soju.nix
+++ b/modules/nixos/soju.nix
@@ -5,9 +5,11 @@
   this,
   ...
 }:
-with lib; let
+with lib;
+let
   cfg = config.nixfiles.modules.soju;
-in {
+in
+{
   options.nixfiles.modules.soju = {
     enable = mkEnableOption "soju";
 
@@ -30,7 +32,9 @@ in {
     };
 
     prometheus = {
-      enable = mkEnableOption "Prometheus exporter" // {default = true;};
+      enable = mkEnableOption "Prometheus exporter" // {
+        default = true;
+      };
 
       port = mkOption {
         description = "Port.";
@@ -40,9 +44,10 @@ in {
     };
   };
 
-  config = let
-    db = "soju";
-  in
+  config =
+    let
+      db = "soju";
+    in
     mkIf cfg.enable {
       nixfiles.modules = {
         acme.enable = true;
@@ -58,7 +63,7 @@ in {
       };
 
       services.postgresql = {
-        ensureDatabases = [db];
+        ensureDatabases = [ db ];
         ensureUsers = [
           {
             name = db;
@@ -69,41 +74,41 @@ in {
 
       systemd.services.soju = {
         description = "soju IRC bouncer";
-        wantedBy = ["multi-user.target"];
-        wants = ["network-online.target"];
-        requires = ["postgresql.service"];
-        after = ["network-online.target" "postgresql.service"];
+        wantedBy = [ "multi-user.target" ];
+        wants = [ "network-online.target" ];
+        requires = [ "postgresql.service" ];
+        after = [
+          "network-online.target"
+          "postgresql.service"
+        ];
         serviceConfig = {
-          ExecStart = let
-            # https://soju.im/doc/soju.1.html
-            configFile = pkgs.writeText "soju.conf" ''
-              listen ircs://${cfg.address}:${toString cfg.port}
-              tls ${with config.certs.${cfg.domain}; "${directory}/fullchain.pem ${directory}/key.pem"}
-              ${
-                with cfg.prometheus;
-                  optionalString enable
-                  "listen http+prometheus://localhost:${toString port}"
-              }
-              db postgres ${
-                concatStringsSep " " [
-                  "host=/run/postgresql"
-                  "user=${db}"
-                  "dbname=${db}"
-                  "sslmode=disable"
-                ]
-              }
-              hostname ${cfg.domain}
-              title ${cfg.domain}
-            '';
-          in
+          ExecStart =
+            let
+              # https://soju.im/doc/soju.1.html
+              configFile = pkgs.writeText "soju.conf" ''
+                listen ircs://${cfg.address}:${toString cfg.port}
+                tls ${with config.certs.${cfg.domain}; "${directory}/fullchain.pem ${directory}/key.pem"}
+                ${with cfg.prometheus; optionalString enable "listen http+prometheus://localhost:${toString port}"}
+                db postgres ${
+                  concatStringsSep " " [
+                    "host=/run/postgresql"
+                    "user=${db}"
+                    "dbname=${db}"
+                    "sslmode=disable"
+                  ]
+                }
+                hostname ${cfg.domain}
+                title ${cfg.domain}
+              '';
+            in
             concatStringsSep " " [
               (getExe' pkgs.soju "soju")
               "-config ${configFile}"
             ];
           DynamicUser = true;
-          SupplementaryGroups = [config.services.nginx.group];
-          AmbientCapabilities = [""];
-          CapabilityBoundingSet = [""];
+          SupplementaryGroups = [ config.services.nginx.group ];
+          AmbientCapabilities = [ "" ];
+          CapabilityBoundingSet = [ "" ];
           UMask = "0077";
           LockPersonality = true;
           MemoryDenyWriteExecute = true;
@@ -122,12 +127,19 @@ in {
           ProtectProc = "invisible";
           ProcSubset = "pid";
           RemoveIPC = true;
-          RestrictAddressFamilies = ["AF_UNIX" "AF_INET" "AF_INET6"];
+          RestrictAddressFamilies = [
+            "AF_UNIX"
+            "AF_INET"
+            "AF_INET6"
+          ];
           RestrictNamespaces = true;
           RestrictRealtime = true;
           RestrictSUIDSGID = true;
           SystemCallArchitectures = "native";
-          SystemCallFilter = ["@system-service" "~@privileged"];
+          SystemCallFilter = [
+            "@system-service"
+            "~@privileged"
+          ];
         };
       };
     };

Consider giving Nix/NixOS a try! <3