]> Untitled Git - MarigoldOS/.git/blobdiff - modules/archivebox.nix
Port some stuff from 0x00 repo.
[MarigoldOS/.git] / modules / archivebox.nix
diff --git a/modules/archivebox.nix b/modules/archivebox.nix
new file mode 100644 (file)
index 0000000..2e2a903
--- /dev/null
@@ -0,0 +1,55 @@
+{ config, pkgs, lib, ... }:
+let
+  cfg = config.services.archivebox;
+in
+{
+  options.services.archivebox = {
+    enable = lib.mkEnableOption "Archivebox server";
+    port = lib.mkOption {
+      type = lib.types.port;
+    };
+    dataDir = lib.mkOption {
+      type = lib.types.path;
+      default = "/var/lib/archivebox";
+    };
+    user = lib.mkOption {
+      type = lib.types.str;
+      default = "archivebox";
+    };
+    group = lib.mkOption {
+      type = lib.types.str;
+      default = "archivebox";
+    };
+  };
+  config = {
+    systemd.tmpfiles.rules = lib.mkIf cfg.enable [
+      "d '${cfg.dataDir}' 0770 ${cfg.user} ${cfg.group}"
+      "Z '${cfg.dataDir}' 0770 ${cfg.user} ${cfg.group}"
+    ];
+    systemd.services.archivebox = lib.mkIf cfg.enable {
+      wantedBy = [ "multi-user.target" ];
+      after = [ "network.target" ];
+      description = "Archives webpages in multiple formats.";
+      serviceConfig = {
+        # DynamicUser = true;
+        User = cfg.user;
+        Group = cfg.group;
+        ExecStart = ''${pkgs.archivebox}/bin/archivebox server --init ${toString cfg.port}'';
+        Restart = "always";
+        Type = "simple";
+        RestartSec = 1;
+        StateDirectory = "archivebox";
+        WorkingDirectory = "${cfg.dataDir}";
+      };
+    };
+    users.users = lib.mkIf (cfg.user == "archivebox") { # "${cfg.user.default}") {
+      "${cfg.user}" = {
+        description = "Archivebox daemon user";
+        isSystemUser = true;
+        group = cfg.group;
+        home = cfg.dataDir;
+      };
+    };
+    users.groups = lib.mkIf (cfg.group == "archivebox") { "${cfg.group}" = { }; }; # What a monstrosity of a line. I make me sick.
+  };
+}