handheld-daemon-ui: 3.2.3 -> 3.3.0 (#361609)
[NixPkgs.git] / nixos / modules / services / network-filesystems / litestream / default.nix
blobf4b0281ebbe20046bc95e641caad09c5b5fa4d97
1 { config, lib, pkgs, ... }:
2 let
3   cfg = config.services.litestream;
4   settingsFormat = pkgs.formats.yaml {};
5 in
7   options.services.litestream = {
8     enable = lib.mkEnableOption "litestream";
10     package = lib.mkPackageOption pkgs "litestream" { };
12     settings = lib.mkOption {
13       description = ''
14         See the [documentation](https://litestream.io/reference/config/).
15       '';
16       type = settingsFormat.type;
17       example = {
18         dbs = [
19           {
20             path = "/var/lib/db1";
21             replicas = [
22               {
23                 url = "s3://mybkt.litestream.io/db1";
24               }
25             ];
26           }
27         ];
28       };
29     };
31     environmentFile = lib.mkOption {
32       type = lib.types.nullOr lib.types.path;
33       default = null;
34       example = "/run/secrets/litestream";
35       description = ''
36         Environment file as defined in {manpage}`systemd.exec(5)`.
38         Secrets may be passed to the service without adding them to the
39         world-readable Nix store, by specifying placeholder variables as
40         the option value in Nix and setting these variables accordingly in the
41         environment file.
43         By default, Litestream will perform environment variable expansion
44         within the config file before reading it. Any references to ''$VAR or
45         ''${VAR} formatted variables will be replaced with their environment
46         variable values. If no value is set then it will be replaced with an
47         empty string.
49         ```
50           # Content of the environment file
51           LITESTREAM_ACCESS_KEY_ID=AKIAxxxxxxxxxxxxxxxx
52           LITESTREAM_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx
53         ```
55         Note that this file needs to be available on the host on which
56         this exporter is running.
57       '';
58     };
59   };
61   config = lib.mkIf cfg.enable {
62     environment.systemPackages = [ cfg.package ];
63     environment.etc = {
64       "litestream.yml" = {
65         source = settingsFormat.generate "litestream-config.yaml" cfg.settings;
66       };
67     };
69     systemd.services.litestream = {
70       description = "Litestream";
71       wantedBy = [ "multi-user.target" ];
72       after = [ "networking.target" ];
73       serviceConfig = {
74         EnvironmentFile = lib.mkIf (cfg.environmentFile != null) cfg.environmentFile;
75         ExecStart = "${cfg.package}/bin/litestream replicate";
76         Restart = "always";
77         User = "litestream";
78         Group = "litestream";
79       };
80     };
82     users.users.litestream = {
83       description = "Litestream user";
84       group = "litestream";
85       isSystemUser = true;
86     };
87     users.groups.litestream = {};
88   };
90   meta.doc = ./default.md;