about summary refs log tree commit diff
path: root/modules/nixos/plausible.nix
diff options
context:
space:
mode:
authorAzat Bahawi <azat@bahawi.net>2023-11-16 01:47:45 +0300
committerAzat Bahawi <azat@bahawi.net>2023-11-16 01:47:45 +0300
commit1b39cfb14b608f374208a9483db661ccd1a43230 (patch)
treebe2fefbe6c50f4598a1eb22f8b0a9260726b2c0a /modules/nixos/plausible.nix
parent2023-11-13 (diff)
2023-11-16
Diffstat (limited to '')
-rw-r--r--modules/nixos/plausible.nix194
1 files changed, 94 insertions, 100 deletions
diff --git a/modules/nixos/plausible.nix b/modules/nixos/plausible.nix
index 172da3f..d346bde 100644
--- a/modules/nixos/plausible.nix
+++ b/modules/nixos/plausible.nix
@@ -6,125 +6,119 @@
 }:
 with lib; let
   cfg = config.nixfiles.modules.plausible;
-in
-  {
-    options.nixfiles.modules.plausible = {
-      enable = mkEnableOption "Plausible Analytics";
+in {
+  options.nixfiles.modules.plausible = {
+    enable = mkEnableOption "Plausible Analytics";
 
-      port = mkOption {
-        description = "Port.";
-        type = with types; port;
-        default = 8000;
-      };
+    port = mkOption {
+      description = "Port.";
+      type = with types; port;
+      default = 8000;
+    };
 
-      domain = mkOption {
-        description = "Domain name sans protocol scheme.";
-        type = with types; nullOr str;
-        default = "plausible.${config.networking.domain}";
-      };
+    domain = mkOption {
+      description = "Domain name sans protocol scheme.";
+      type = with types; nullOr str;
+      default = "plausible.${config.networking.domain}";
     };
+  };
 
-    config = let
-      db = "plausible";
-    in
-      mkIf cfg.enable {
-        _module.args.libPlausible = {
-          htmlPlausibleScript = {
-            domain ? "$host",
-            src ? "https://${cfg.domain}/js/script.js",
-          }: ''<script defer data-domain="${domain}" src="${src}"></script>'';
-        };
+  config = let
+    db = "plausible";
+  in
+    mkIf cfg.enable {
+      _module.args.libPlausible = {
+        htmlPlausibleScript = {
+          domain ? "$host",
+          src ? "https://${cfg.domain}/js/script.js",
+        }: ''<script defer data-domain="${domain}" src="${src}"></script>'';
+      };
 
-        secrets = {
-          plausible-key.file = "${inputs.self}/secrets/plausible-key";
-          plausible-admin-password.file = "${inputs.self}/secrets/plausible-admin-password";
-          plausible-smtp-password.file = "${inputs.self}/secrets/smtp-password";
-        };
+      secrets = {
+        plausible-key.file = "${inputs.self}/secrets/plausible-key";
+        plausible-admin-password.file = "${inputs.self}/secrets/plausible-admin-password";
+        plausible-smtp-password.file = "${inputs.self}/secrets/smtp-password";
+      };
 
-        nixfiles.modules = {
-          nginx = {
-            enable = true;
-            upstreams.plausible.servers."127.0.0.1:${toString cfg.port}" = {};
-            virtualHosts.${cfg.domain}.locations."/" = {
-              proxyPass = "http://plausible";
-              proxyWebsockets = true;
-            };
-          };
-          postgresql = {
-            enable = true;
-            extraPostStart = [
-              ''
-                $PSQL "${db}" -tAc 'GRANT ALL ON SCHEMA "public" TO "${db}"'
-                $PSQL "${db}" -tAc 'CREATE EXTENSION IF NOT EXISTS citext'
-              ''
-            ];
+      nixfiles.modules = {
+        nginx = {
+          enable = true;
+          upstreams.plausible.servers."127.0.0.1:${toString cfg.port}" = {};
+          virtualHosts.${cfg.domain}.locations."/" = {
+            proxyPass = "http://plausible";
+            proxyWebsockets = true;
           };
-          clickhouse.enable = true;
         };
-
-        services.postgresql = {
-          ensureDatabases = [db];
-          ensureUsers = [
-            {
-              name = db;
-              ensurePermissions."DATABASE \"${db}\"" = "ALL";
-            }
+        postgresql = {
+          enable = true;
+          extraPostStart = [
+            ''
+              $PSQL "${db}" -tAc 'GRANT ALL ON SCHEMA "public" TO "${db}"'
+              $PSQL "${db}" -tAc 'CREATE EXTENSION IF NOT EXISTS citext'
+            ''
           ];
         };
+        clickhouse.enable = true;
+      };
 
-        services.plausible = {
-          enable = true;
+      services.postgresql = {
+        ensureDatabases = [db];
+        ensureUsers = [
+          {
+            name = db;
+            ensurePermissions."DATABASE \"${db}\"" = "ALL";
+          }
+        ];
+      };
 
-          adminUser = {
-            name = "admin";
-            email = "admin@${my.domain.shire}";
-            passwordFile = config.secrets.plausible-admin-password.path;
-            activate = false;
-          };
+      services.plausible = {
+        enable = true;
 
-          mail = {
-            email = "admin+plausible@${my.domain.shire}";
-            smtp = {
-              hostAddr = my.domain.shire;
-              hostPort = 465;
-              enableSSL = true;
-              user = "azahi@${my.domain.shire}";
-              passwordFile = config.secrets.plausible-smtp-password.path;
-            };
-          };
+        adminUser = {
+          name = "admin";
+          email = "admin@${my.domain.shire}";
+          passwordFile = config.secrets.plausible-admin-password.path;
+          activate = false;
+        };
 
-          database = {
-            clickhouse = {
-              setup = false;
-              url = "http://127.0.0.1:8123/default";
-            };
+        mail = {
+          email = "admin+plausible@${my.domain.shire}";
+          smtp = {
+            hostAddr = my.domain.shire;
+            hostPort = 465;
+            enableSSL = true;
+            user = "azahi@${my.domain.shire}";
+            passwordFile = config.secrets.plausible-smtp-password.path;
+          };
+        };
 
-            postgres = {
-              setup = true;
-              dbname = db;
-            };
+        database = {
+          clickhouse = {
+            setup = false;
+            url = "http://127.0.0.1:8123/default";
           };
 
-          server = {
-            baseUrl = "https://${cfg.domain}";
-            disableRegistration = true;
-            listenAddress = "127.0.0.1";
-            inherit (cfg) port;
-            secretKeybaseFile = config.secrets.plausible-key.path;
+          postgres = {
+            setup = true;
+            dbname = db;
           };
         };
 
-        systemd.services.plausible = rec {
-          after = [
-            "postgresql.service"
-            "clickhouse.service"
-          ];
-          requires = after;
+        server = {
+          baseUrl = "https://${cfg.domain}";
+          disableRegistration = true;
+          listenAddress = "127.0.0.1";
+          inherit (cfg) port;
+          secretKeybaseFile = config.secrets.plausible-key.path;
         };
       };
-  }
-  # FIXME https://nixpk.gs/pr-tracker.html?pr=266702
-  // lib.moduleFromRef
-  "services/web-apps/plausible.nix"
-  "nh2:plausible-listen-address-no-distributed-erlang"
-  "080c1rdz99xj8y876cw1p3zxmmaqq75jhrpf9f5z1da8v7yvs078"
+
+      systemd.services.plausible = rec {
+        after = [
+          "postgresql.service"
+          "clickhouse.service"
+        ];
+        requires = after;
+      };
+    };
+}

Consider giving Nix/NixOS a try! <3