nixos/zrepl: init

zrepl is a ZFS backup and replication tool written in Go.

Changed files
+55
nixos
modules
services
backup
+1
nixos/modules/module-list.nix
···
./services/backup/zfs-replication.nix
./services/backup/znapzend.nix
./services/blockchain/ethereum/geth.nix
+
./services/backup/zrepl.nix
./services/cluster/hadoop/default.nix
./services/cluster/k3s/default.nix
./services/cluster/kubernetes/addons/dns.nix
+54
nixos/modules/services/backup/zrepl.nix
···
+
{ config, pkgs, lib, ... }:
+
+
with lib;
+
let
+
cfg = config.services.zrepl;
+
format = pkgs.formats.yaml { };
+
configFile = format.generate "zrepl.yml" cfg.settings;
+
in
+
{
+
meta.maintainers = with maintainers; [ cole-h ];
+
+
options = {
+
services.zrepl = {
+
enable = mkEnableOption "zrepl";
+
+
settings = mkOption {
+
default = { };
+
description = ''
+
Configuration for zrepl. See <link
+
xlink:href="https://zrepl.github.io/configuration.html"/>
+
for more information.
+
'';
+
type = types.submodule {
+
freeformType = format.type;
+
};
+
};
+
};
+
};
+
+
### Implementation ###
+
+
config = mkIf cfg.enable {
+
environment.systemPackages = [ pkgs.zrepl ];
+
+
# zrepl looks for its config in this location by default. This
+
# allows the use of e.g. `zrepl signal wakeup <job>` without having
+
# to specify the storepath of the config.
+
environment.etc."zrepl/zrepl.yml".source = configFile;
+
+
systemd.packages = [ pkgs.zrepl ];
+
systemd.services.zrepl = {
+
requires = [ "local-fs.target" ];
+
wantedBy = [ "zfs.target" ];
+
after = [ "zfs.target" ];
+
+
path = [ config.boot.zfs.package ];
+
restartTriggers = [ configFile ];
+
+
serviceConfig = {
+
Restart = "on-failure";
+
};
+
};
+
};
+
}