Skip to content

Commit

Permalink
nixos/zrepl: init
Browse files Browse the repository at this point in the history
zrepl is a ZFS backup and replication tool written in Go.
  • Loading branch information
cole-h committed Feb 24, 2021
1 parent 83dba0e commit 44bc5de
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 0 deletions.
1 change: 1 addition & 0 deletions nixos/modules/module-list.nix
Expand Up @@ -257,6 +257,7 @@
./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
Expand Down
54 changes: 54 additions & 0 deletions nixos/modules/services/backup/zrepl.nix
@@ -0,0 +1,54 @@
{ 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";
};
};
};
}

0 comments on commit 44bc5de

Please sign in to comment.