mirror of
https://codeberg.org/privacy1st/nix-git
synced 2024-11-22 22:09:34 +01:00
83 lines
2.7 KiB
Nix
83 lines
2.7 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 = {
|
||
|
|
||
|
"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" = {};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
};
|
||
|
};
|
||
|
}
|