parent
7b9c208260
commit
c026da4056
@ -0,0 +1,57 @@ |
||||
{ config, lib, pkgs, ... }: |
||||
|
||||
with lib; |
||||
|
||||
let |
||||
cfg = config.services.borgmatic; |
||||
cfgfile = pkgs.writeText "config.yaml" (builtins.toJSON cfg.settings); |
||||
in { |
||||
options.services.borgmatic = { |
||||
enable = mkEnableOption "borgmatic"; |
||||
|
||||
settings = mkOption { |
||||
description = '' |
||||
See https://torsion.org/borgmatic/docs/reference/configuration/ |
||||
''; |
||||
type = types.submodule { |
||||
freeformType = with lib.types; attrsOf anything; |
||||
options.location = { |
||||
source_directories = mkOption { |
||||
type = types.listOf types.str; |
||||
description = '' |
||||
List of source directories to backup (required). Globs and |
||||
tildes are expanded. |
||||
''; |
||||
example = [ "/home" "/etc" "/var/log/syslog*" ]; |
||||
}; |
||||
repositories = mkOption { |
||||
type = types.listOf types.str; |
||||
description = '' |
||||
Paths to local or remote repositories (required). Tildes are |
||||
expanded. Multiple repositories are backed up to in |
||||
sequence. Borg placeholders can be used. See the output of |
||||
"borg help placeholders" for details. See ssh_command for |
||||
SSH options like identity file or port. If systemd service |
||||
is used, then add local repository paths in the systemd |
||||
service file to the ReadWritePaths list. |
||||
''; |
||||
example = [ |
||||
"user@backupserver:sourcehostname.borg" |
||||
"user@backupserver:{fqdn}" |
||||
]; |
||||
}; |
||||
}; |
||||
}; |
||||
}; |
||||
}; |
||||
|
||||
config = mkIf cfg.enable { |
||||
|
||||
environment.systemPackages = [ pkgs.borgmatic ]; |
||||
|
||||
environment.etc."borgmatic/config.yaml".source = cfgfile; |
||||
|
||||
systemd.packages = [ pkgs.borgmatic ]; |
||||
|
||||
}; |
||||
} |
@ -0,0 +1,50 @@ |
||||
{ borgbackup, coreutils, lib, python3Packages, systemd }: |
||||
|
||||
python3Packages.buildPythonApplication rec { |
||||
pname = "borgmatic"; |
||||
version = "1.5.12"; |
||||
|
||||
src = python3Packages.fetchPypi { |
||||
inherit pname version; |
||||
sha256 = "sha256-XLbBJvNRmH8W9SnOjF7zUbazRYFCMW6SEO2wKN/2VTY="; |
||||
}; |
||||
|
||||
checkInputs = with python3Packages; [ flexmock pytestCheckHook pytest-cov ]; |
||||
|
||||
# - test_borgmatic_version_matches_news_version |
||||
# The file NEWS not available on the pypi source, and this test is useless |
||||
# - test_collect_configuration_run_summary_logs_outputs_merged_json_results |
||||
# Upstream fixed in the next version, see |
||||
# https://github.com/witten/borgmatic/commit/ea6cd53067435365a96786b006aec391714501c4 |
||||
disabledTests = [ |
||||
"test_borgmatic_version_matches_news_version" |
||||
"test_collect_configuration_run_summary_logs_outputs_merged_json_results" |
||||
]; |
||||
|
||||
propagatedBuildInputs = with python3Packages; [ |
||||
borgbackup |
||||
colorama |
||||
pykwalify |
||||
ruamel_yaml |
||||
requests |
||||
setuptools |
||||
]; |
||||
|
||||
postInstall = '' |
||||
mkdir -p $out/lib/systemd/system |
||||
cp sample/systemd/borgmatic.timer $out/lib/systemd/system/ |
||||
substitute sample/systemd/borgmatic.service \ |
||||
$out/lib/systemd/system/borgmatic.service \ |
||||
--replace /root/.local/bin/borgmatic $out/bin/borgmatic \ |
||||
--replace systemd-inhibit ${systemd}/bin/systemd-inhibit \ |
||||
--replace sleep ${coreutils}/bin/sleep |
||||
''; |
||||
|
||||
meta = with lib; { |
||||
description = "Simple, configuration-driven backup software for servers and workstations"; |
||||
homepage = "https://torsion.org/borgmatic/"; |
||||
license = licenses.gpl3Plus; |
||||
platforms = platforms.linux; |
||||
maintainers = with maintainers; [ imlonghao ]; |
||||
}; |
||||
} |
Loading…
Reference in new issue