diff options
| author | Alejandro Soto <alejandro@34project.org> | 2022-03-13 17:13:27 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2022-03-13 17:14:23 -0600 |
| commit | 82c53e2c5c23ccd4fb2c24511084f7a828a20731 (patch) | |
| tree | 4b7b881a9d4cd7fd9c10f781d3138232646a5d39 /sys | |
| parent | 521f0bc8856ca6370e96181277ded0f09638ff67 (diff) | |
Add snapper
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/default.nix | 64 |
1 files changed, 64 insertions, 0 deletions
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 = { |
