From c09ccd7d39eb4c246fcb0e2b3e4be0361a85c19a Mon Sep 17 00:00:00 2001 From: Damien Cassou Date: Thu, 15 May 2025 07:48:19 +0200 Subject: [PATCH] services.borgmatic: add initial support for darwin --- modules/services/borgmatic.nix | 21 +++++++++++++ tests/default.nix | 1 + .../borgmatic-darwin/basic-configuration.nix | 14 +++++++++ .../services/borgmatic-darwin/default.nix | 4 +++ .../borgmatic-darwin/expected-agent.plist | 31 +++++++++++++++++++ .../borgmatic-darwin/frequency-assertion.nix | 10 ++++++ 6 files changed, 81 insertions(+) create mode 100644 tests/modules/services/borgmatic-darwin/basic-configuration.nix create mode 100644 tests/modules/services/borgmatic-darwin/default.nix create mode 100644 tests/modules/services/borgmatic-darwin/expected-agent.plist create mode 100644 tests/modules/services/borgmatic-darwin/frequency-assertion.nix diff --git a/modules/services/borgmatic.nix b/modules/services/borgmatic.nix index 66168fe5d..bd2e30ed5 100644 --- a/modules/services/borgmatic.nix +++ b/modules/services/borgmatic.nix @@ -81,6 +81,27 @@ in }; }; }) + + (lib.mkIf pkgs.stdenv.isDarwin { + assertions = [ + (lib.hm.darwin.assertInterval "services.borgmatic.frequency" serviceConfig.frequency pkgs) + ]; + + launchd.agents.borgmatic = { + enable = true; + config = { + ProgramArguments = [ + (lib.getExe programConfig.package) + "--stats" + "--list" + ]; + ProcessType = "Background"; + StartCalendarInterval = lib.hm.darwin.mkCalendarInterval serviceConfig.frequency; + StandardOutPath = "${config.home.homeDirectory}/Library/Logs/borgmatic/launchd-stdout.log"; + StandardErrorPath = "${config.home.homeDirectory}/Library/Logs/borgmatic/launchd-stderr.log"; + }; + }; + }) ] ); } diff --git a/tests/default.nix b/tests/default.nix index d5566de50..1d329392e 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -330,6 +330,7 @@ import nmtSrc { ./modules/launchd ./modules/programs/aerospace ./modules/programs/element-desktop/darwin.nix + ./modules/services/borgmatic-darwin ./modules/services/emacs-darwin ./modules/services/espanso-darwin ./modules/services/git-sync-darwin diff --git a/tests/modules/services/borgmatic-darwin/basic-configuration.nix b/tests/modules/services/borgmatic-darwin/basic-configuration.nix new file mode 100644 index 000000000..d6aa5f856 --- /dev/null +++ b/tests/modules/services/borgmatic-darwin/basic-configuration.nix @@ -0,0 +1,14 @@ +{ + services.borgmatic = { + enable = true; + frequency = "weekly"; + }; + + nmt.script = '' + serviceFile=LaunchAgents/org.nix-community.home.borgmatic.plist + + assertFileExists "$serviceFile" + + assertFileContent "$serviceFile" ${./expected-agent.plist} + ''; +} diff --git a/tests/modules/services/borgmatic-darwin/default.nix b/tests/modules/services/borgmatic-darwin/default.nix new file mode 100644 index 000000000..60481767f --- /dev/null +++ b/tests/modules/services/borgmatic-darwin/default.nix @@ -0,0 +1,4 @@ +{ + darwin-borgmatic-service-basic-configuration = ./basic-configuration.nix; + darwin-borgmatic-frequency-assertion = ./frequency-assertion.nix; +} diff --git a/tests/modules/services/borgmatic-darwin/expected-agent.plist b/tests/modules/services/borgmatic-darwin/expected-agent.plist new file mode 100644 index 000000000..24cbe4dd6 --- /dev/null +++ b/tests/modules/services/borgmatic-darwin/expected-agent.plist @@ -0,0 +1,31 @@ + + + + + Label + org.nix-community.home.borgmatic + ProcessType + Background + ProgramArguments + + @borgmatic@/bin/borgmatic + --stats + --list + + StandardErrorPath + /home/hm-user/Library/Logs/borgmatic/launchd-stderr.log + StandardOutPath + /home/hm-user/Library/Logs/borgmatic/launchd-stdout.log + StartCalendarInterval + + + Hour + 0 + Minute + 0 + Weekday + 1 + + + + \ No newline at end of file diff --git a/tests/modules/services/borgmatic-darwin/frequency-assertion.nix b/tests/modules/services/borgmatic-darwin/frequency-assertion.nix new file mode 100644 index 000000000..f8ebb0c22 --- /dev/null +++ b/tests/modules/services/borgmatic-darwin/frequency-assertion.nix @@ -0,0 +1,10 @@ +{ + services.borgmatic = { + enable = true; + frequency = "00:02:00"; + }; + + test.asserts.assertions.expected = [ + "On Darwin services.borgmatic.frequency must be one of: hourly, daily, weekly, monthly, semiannually, annually." + ]; +}