summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2022-03-13 17:13:27 -0600
committerAlejandro Soto <alejandro@34project.org>2022-03-13 17:14:23 -0600
commit82c53e2c5c23ccd4fb2c24511084f7a828a20731 (patch)
tree4b7b881a9d4cd7fd9c10f781d3138232646a5d39
parent521f0bc8856ca6370e96181277ded0f09638ff67 (diff)
Add snapper
Diffstat (limited to '')
-rw-r--r--sys/default.nix64
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 = {