nix-git/modules/btrbk/default.nix

109 lines
3.6 KiB
Nix
Raw Normal View History

2023-09-27 18:56:12 +02:00
{ config, pkgs, ... }:
{
# For each instance, a service and timer will be created:
# systemctl list-unit-files | grep btrbk
# #=> btrbk-<instance-name>.service
# #=> btrbk-<instance-name>.timer
#
# If onCalendar is set to null, one can manually execute btrbk with
# sudo systemctl start btrbk-<instance-name>.service
# Print generated systemd unit file
# cat "$(systemctl show -P FragmentPath btrbk-<instance-name>.service)"
# TODO: Maybe the following is not necessary if using hd-idle anyways (!)
# TODO: Mount/Unmount backup drive
# Example1:
# - https://github.com/oxalica/nixos-config/blob/1b18628afda9cecca0bc8c348b91e3ae6ab56905/nixos/invar/btrbk.nix#L55
# - https://github.com/oxalica/nixos-config/blob/1b18628afda9cecca0bc8c348b91e3ae6ab56905/nixos/invar/btrbk.nix#L64
# Example2:
# - https://github.com/emmanuelrosa/erosanix/blob/master/modules/btrbk.nix#L35-L42C7
# Spin down (unmounted/inactive) HDD disk.
# Inspired by https://www.reddit.com/r/NixOS/comments/751i5t/comment/do3f3l7/
#
# environment.systemPackages = with pkgs; [
# hd-idle
# ];
# systemd.services.hd-idle = {
# description = "Spin down inactive HDD";
# wantedBy = [ "multi-user.target" ];
# serviceConfig = {
# Type = "simple";
# # Options:
# # -a <disk>: Select disk for subsequent parameters.
# # -i 180: Spin down after 2 minutes (180 seconds) of inactivity.
# ExecStart = "${pkgs.hd-idle}/bin/hd-idle -a /dev/disk/by-id/XXX-XXX-XXX -i 180"; # TODO make disk id configurable
# };
# };
services.btrbk = {
extraPackages = [ pkgs.lz4 ];
# Lowest scheduling priority.
niceness = 19;
# Set of btrbk instances. The instance named btrbk is the default one.
instances = {
# # This is the configuration equivalent to
# # README.md section "Testing on Local Host".
# "testing-on-local-host" = {
# # The timer is disabled. The service has to be invoked manually.
# onCalendar = null;
# #onCalendar = "hourly";
# #onCalendar = "*:0/15"; # Every 15min
# # Configuration options for btrbk. Nested attrsets translate to subsections.
# settings = {
# timestamp_format = "long";
# stream_compress = "lz4";
#
# snapshot_preserve_min = "2d";
# snapshot_preserve = "24h 7d 4w 6m";
#
# target_preserve_min = "no";
# target_preserve = "7d 4w 6m";
#
# volume."/mnt/top-level" = {
# snapshot_dir = "@snap";
# target = "/mnt/usb-top-level/@snap";
# subvolume = "@foo";
# };
# };
# };
"local-snapshots" = {
onCalendar = "hourly";
#onCalendar = "*:0/15"; # Every 15min
settings = {
timestamp_format = "long";
stream_compress = "lz4";
snapshot_preserve_min = "2d";
snapshot_preserve = "24h 7d 4w 6m";
volume."/mnt/data/data" = {
snapshot_dir = "/mnt/data/snap";
subvolume = {
"arch.p1st.de" = {};
"blogger.privacy1st.de" = {};
"changedetection.p1st.de" = {};
"cloud.media-kollektiv.eu" = {};
"cloud.privacy1st.de" = {};
"git.privacy1st.de" = {};
#"mastodon-toot-follower.privacy1st.de" = {};
"money.p1st.de" = {};
"music.privacy1st.de" = {};
#"paste.p1st.de" = {};
"proxy" = {};
"recipe.privacy1st.de" = {};
"traggo.privacy1st.de" = {};
};
};
};
};
};
};
}