{ 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. }; }