mirror of
https://codeberg.org/privacy1st/nix-git
synced 2024-11-25 22:35:03 +01:00
109 lines
3.6 KiB
Nix
109 lines
3.6 KiB
Nix
{ 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" = {};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
};
|
|
};
|
|
}
|