--- /dev/null
+{ 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.
+ };
+}