summaryrefslogtreecommitdiff
path: root/sys/btrfs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--sys/btrfs/mounts.nix58
-rw-r--r--sys/btrfs/snapper.nix99
2 files changed, 84 insertions, 73 deletions
diff --git a/sys/btrfs/mounts.nix b/sys/btrfs/mounts.nix
index 133f08f..3863356 100644
--- a/sys/btrfs/mounts.nix
+++ b/sys/btrfs/mounts.nix
@@ -1,39 +1,47 @@
-{ lib, config, pkgs, ... }:
+{
+ lib,
+ config,
+ pkgs,
+ ...
+}:
with lib; let
cfg = config.local.btrfs;
-in
-{
+in {
options.local.btrfs = {
mounts = mkOption {
- default = { };
+ default = {};
- type = with lib.types; attrsOf (submodule {
- options = {
- ssd = mkOption {
- type = bool;
- };
+ type = with lib.types;
+ attrsOf (submodule {
+ options = {
+ ssd = mkOption {
+ type = bool;
+ };
- device = mkOption {
- type = str;
- };
+ device = mkOption {
+ type = str;
+ };
- subvol = mkOption {
- type = str;
+ subvol = mkOption {
+ type = str;
+ };
};
- };
- });
+ });
};
};
- config = mkIf (cfg.mounts != { }) {
- fileSystems =
- let
- btrfsMount = { device, subvol, ssd }: {
- inherit device;
- fsType = "btrfs";
- options = [ "noatime" "compress=zstd" "subvol=${subvol}" ] ++ optional ssd "ssd";
- };
- in
+ config = mkIf (cfg.mounts != {}) {
+ fileSystems = let
+ btrfsMount = {
+ device,
+ subvol,
+ ssd,
+ }: {
+ inherit device;
+ fsType = "btrfs";
+ options = ["noatime" "compress=zstd" "subvol=${subvol}"] ++ optional ssd "ssd";
+ };
+ in
mapAttrs (_: btrfsMount) cfg.mounts;
};
}
diff --git a/sys/btrfs/snapper.nix b/sys/btrfs/snapper.nix
index 27d2779..2d29aa4 100644
--- a/sys/btrfs/snapper.nix
+++ b/sys/btrfs/snapper.nix
@@ -1,73 +1,76 @@
-{ config, lib, pkgs, ... }:
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
with lib; let
cfg = config.local.btrfs;
-in
-{
+in {
options.local.btrfs = {
snapper = mkOption {
type = with lib.types; attrsOf str;
- default = { };
+ default = {};
};
};
- config = mkIf (cfg.snapper != { }) {
- environment.systemPackages = [ pkgs.local.btclone ];
+ config = mkIf (cfg.snapper != {}) {
+ environment.systemPackages = [pkgs.local.btclone];
- services.snapper.configs =
- let
- snapperConfig = _: subvolume: {
- SUBVOLUME = subvolume;
+ services.snapper.configs = let
+ snapperConfig = _: subvolume: {
+ SUBVOLUME = subvolume;
- # btrfs qgroup for space aware cleanup algorithms
- QGROUP = "";
+ # 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 the snapshots may use
+ SPACE_LIMIT = "0.5";
- # fraction of the filesystems space that should be free
- FREE_LIMIT = "0.2";
+ # 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 = [ ];
+ # 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";
+ # 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";
+ # start comparing pre- and post-snapshot in background after creating
+ # post-snapshot
+ BACKGROUND_COMPARISON = "yes";
- # run daily number cleanup
- NUMBER_CLEANUP = "yes";
+ # run daily number cleanup
+ NUMBER_CLEANUP = "yes";
- # limit for number cleanup
- NUMBER_MIN_AGE = "1800";
- NUMBER_LIMIT = "100";
- NUMBER_LIMIT_IMPORTANT = "10";
+ # limit for number cleanup
+ NUMBER_MIN_AGE = "1800";
+ NUMBER_LIMIT = "100";
+ NUMBER_LIMIT_IMPORTANT = "10";
- # create hourly snapshots
- TIMELINE_CREATE = true;
+ # create hourly snapshots
+ TIMELINE_CREATE = true;
- # cleanup hourly snapshots after some time
- TIMELINE_CLEANUP = true;
+ # cleanup hourly snapshots after some time
+ TIMELINE_CLEANUP = true;
- # 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";
+ # 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";
+ # cleanup empty pre-post-pairs
+ EMPTY_PRE_POST_CLEANUP = "yes";
- # limits for empty pre-post-pair cleanup
- EMPTY_PRE_POST_MIN_AGE = "1800";
- };
- in
+ # limits for empty pre-post-pair cleanup
+ EMPTY_PRE_POST_MIN_AGE = "1800";
+ };
+ in
mapAttrs snapperConfig cfg.snapper;
};
}