depot/ops/nixos/lib/zfs.nix

48 lines
1.2 KiB
Nix
Raw Normal View History

# SPDX-FileCopyrightText: 2020 Luke Granger-Brown <depot@lukegb.com>
#
# SPDX-License-Identifier: Apache-2.0
2023-11-19 20:12:35 +00:00
{ lib, pkgs, config, ... }:
let
2022-01-23 23:38:40 +00:00
inherit (lib) mkOption types mkAfter mkIf mkDefault;
robCfg = config.services.zfs.rollbackOnBoot;
in
{
options.services.zfs.rollbackOnBoot = {
enable = mkOption {
type = types.bool;
default = false;
};
snapshot = mkOption {
type = types.str;
default = "zpool/local/root@blank";
};
keepPaths = mkOption {
type = types.listOf types.str;
default = [ ];
};
};
config = {
boot.supportedFilesystems = [ "zfs" ];
2023-01-18 21:43:48 +00:00
boot.zfs.devNodes = lib.mkDefault "/dev/disk/by-partuuid";
services.zfs.autoScrub.enable = true;
services.zfs.autoSnapshot = {
enable = true;
monthly = 1;
};
2022-01-23 23:38:40 +00:00
systemd.tmpfiles.rules = mkAfter (builtins.map (x: "L ${x} - - - - /persist{x}") robCfg.keepPaths);
2023-11-19 20:12:35 +00:00
boot.initrd.systemd.services.zfs-rollback = {
wantedBy = [ "initrd.target" ];
path = [ pkgs.zfs ];
script = ''
zfs rollback -r ${robCfg.snapshot}
2023-11-19 20:12:35 +00:00
'';
after = [ "zfs-import.target" ];
};
2022-01-23 23:38:40 +00:00
my.vault.bindMountStateTo = mkIf robCfg.enable (mkDefault "/persist/var/lib/vault-agent");
};
2022-01-23 23:38:40 +00:00
}