Files
home-manager/tests/modules/programs/borgmatic/patterns-configuration.nix
Austin Horstman 7d46509d83 borgmatic: migrate backups to native settings
Add programs.borgmatic.backups.<name>.settings for native borgmatic
YAML and generate each backup file from it.

The location, storage, retention, and consistency options and the
section extraConfig options become deprecated aliases into settings.
Warnings name the affected backup. Legacy configurations without
overlapping keys produce the same YAML, and Home Manager symlink
exclusions still append to exclude_from.

Drop the assertions that rejected backups setting both or neither of
sourceDirectories and patterns, so native source patterns and
database-only backups work.
2026-09-30 07:59:27 -05:00

69 lines
1.6 KiB
Nix

{
config,
lib,
realPkgs,
...
}:
let
inherit (config.programs.borgmatic) backups;
in
{
programs.borgmatic = {
enable = true;
backups = {
main = {
location = {
patterns = [
"R /home/user"
"+ home/user/stuff-to-backup"
"+ home/user/junk/important-file"
"- home/user/junk"
];
repositories = [ "/mnt/backup-drive" ];
};
};
};
};
test.asserts.warnings.expected = (import ./warnings.nix { inherit lib; }) {
file = ./patterns-configuration.nix;
entries = [
{
from = "location.repositories";
to = "settings.repositories";
changed = true;
}
{
from = "location.patterns";
to = "settings.patterns";
}
];
};
nmt.script = ''
config_file=$TESTED/home-files/.config/borgmatic.d/main.yaml
assertFileExists $config_file
declare -A expectations
expectations[patterns[0]]="${builtins.elemAt backups.main.location.patterns 0}"
expectations[patterns[1]]="${builtins.elemAt backups.main.location.patterns 1}"
expectations[patterns[2]]="${builtins.elemAt backups.main.location.patterns 2}"
expectations[patterns[3]]="${builtins.elemAt backups.main.location.patterns 3}"
yq=${realPkgs.yq-go}/bin/yq
for filter in "''${!expectations[@]}"; do
expected_value="''${expectations[$filter]}"
actual_value="$($yq ".$filter" $config_file)"
if [[ "$actual_value" != "$expected_value" ]]; then
fail "Expected '$filter' to be '$expected_value' but was '$actual_value'"
fi
done
'';
}