]> Untitled Git - MarigoldOS/.git/blob - modules/archivebox.nix
Port some stuff from 0x00 repo.
[MarigoldOS/.git] / modules / archivebox.nix
1 { config, pkgs, lib, ... }:
2 let
3   cfg = config.services.archivebox;
4 in
5 {
6   options.services.archivebox = {
7     enable = lib.mkEnableOption "Archivebox server";
8     port = lib.mkOption {
9       type = lib.types.port;
10     };
11     dataDir = lib.mkOption {
12       type = lib.types.path;
13       default = "/var/lib/archivebox";
14     };
15     user = lib.mkOption {
16       type = lib.types.str;
17       default = "archivebox";
18     };
19     group = lib.mkOption {
20       type = lib.types.str;
21       default = "archivebox";
22     };
23   };
24   config = {
25     systemd.tmpfiles.rules = lib.mkIf cfg.enable [
26       "d '${cfg.dataDir}' 0770 ${cfg.user} ${cfg.group}"
27       "Z '${cfg.dataDir}' 0770 ${cfg.user} ${cfg.group}"
28     ];
29     systemd.services.archivebox = lib.mkIf cfg.enable {
30       wantedBy = [ "multi-user.target" ];
31       after = [ "network.target" ];
32       description = "Archives webpages in multiple formats.";
33       serviceConfig = {
34         # DynamicUser = true;
35         User = cfg.user;
36         Group = cfg.group;
37         ExecStart = ''${pkgs.archivebox}/bin/archivebox server --init ${toString cfg.port}'';
38         Restart = "always";
39         Type = "simple";
40         RestartSec = 1;
41         StateDirectory = "archivebox";
42         WorkingDirectory = "${cfg.dataDir}";
43       };
44     };
45     users.users = lib.mkIf (cfg.user == "archivebox") { # "${cfg.user.default}") {
46       "${cfg.user}" = {
47         description = "Archivebox daemon user";
48         isSystemUser = true;
49         group = cfg.group;
50         home = cfg.dataDir;
51       };
52     };
53     users.groups = lib.mkIf (cfg.group == "archivebox") { "${cfg.group}" = { }; }; # What a monstrosity of a line. I make me sick.
54   };
55 }