From 82c53e2c5c23ccd4fb2c24511084f7a828a20731 Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Sun, 13 Mar 2022 17:13:27 -0600 Subject: Add snapper --- sys/default.nix | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) (limited to 'sys') diff --git a/sys/default.nix b/sys/default.nix index c68c869..3840a30 100644 --- a/sys/default.nix +++ b/sys/default.nix @@ -35,6 +35,11 @@ in { type = listOf str; }; + snapperSubvols = mkOption { + type = attrsOf str; + default = {}; + }; + crypt = mkOption { type = submodule { options = { @@ -327,6 +332,65 @@ in { ]; }; + local.snapperSubvols.home = "/home"; + + services.snapper.configs = let + snapperConfig = _: subvolume: { + inherit subvolume; + + extraConfig = '' + # btrfs qgroup for space aware cleanup algorithms + QGROUP="" + + # fraction of the filesystems space the snapshots may use + SPACE_LIMIT="0.5" + + # fraction of the filesystems space that should be free + FREE_LIMIT="0.2" + + # users and groups allowed to work with config + ALLOW_USERS="" + ALLOW_GROUPS="" + + # sync users and groups from ALLOW_USERS and ALLOW_GROUPS to .snapshots + # directory + SYNC_ACL="no" + + # start comparing pre- and post-snapshot in background after creating + # post-snapshot + BACKGROUND_COMPARISON="yes" + + # run daily number cleanup + NUMBER_CLEANUP="yes" + + # limit for number cleanup + NUMBER_MIN_AGE="1800" + NUMBER_LIMIT="100" + NUMBER_LIMIT_IMPORTANT="10" + + # create hourly snapshots + TIMELINE_CREATE="yes" + + # cleanup hourly snapshots after some time + TIMELINE_CLEANUP="yes" + + # limits for timeline cleanup + TIMELINE_MIN_AGE="1800" + TIMELINE_LIMIT_HOURLY="24" + TIMELINE_LIMIT_DAILY="7" + TIMELINE_LIMIT_WEEKLY="4" + TIMELINE_LIMIT_MONTHLY="12" + TIMELINE_LIMIT_YEARLY="10" + + # cleanup empty pre-post-pairs + EMPTY_PRE_POST_CLEANUP="yes" + + # limits for empty pre-post-pair cleanup + EMPTY_PRE_POST_MIN_AGE="1800" + ''; + }; + in mapAttrs snapperConfig cfg.snapperSubvols; + networking.firewall.allowedTCPPorts = [ 2234 ]; programs = { -- cgit v1.2.3